admin 发表于 2017-5-7 12:48:51

mybatis关联查询,一对一,一对多

注:这篇文章的代码有部分删减,不能直接使用,不过关键代码都存在 应用场景:   想用mybatis做关联查询,并且把查询出的数据自动组装成对象可以使用关联查询。1、一对一实现例如:一部小说,属于一个分类,查询小说的时候想同时查询出所属分类。1)实体定义:public class Book {
    private static final long serialVersionUID = 1L;
   
    /**
   *小说ID
   */
    private Integer bookId;
    /**
   *作者
   */
    private String author;
    /**
   *小说名称
   */
    private String bookName;
    /**
    /**
   *分类ID
   */
    private Integer catalogId;
   
    private CrawlCatalog catalog;
}public class Catalog{
    private static final long serialVersionUID = 1L;
   
    /**
   *分类ID
   */
    private Integer catalogId;
    /**
   *分类名字
   */
    private String name;
}2) BookMapper实现<!--通用表字段列表-->
    <resultMap id="ResultMapWithCata" type="Book">
      <result column="BOOK_ID" property="bookId" jdbcType="INTEGER"/>
      <result column="AUTHOR" property="author" jdbcType="VARCHAR"/>
      <result column="BOOK_NAME" property="bookName" jdbcType="VARCHAR"/>
      <result column="CATALOG_ID" property="catalogId" jdbcType="INTEGER"/>
      <association property="catalog" javaType="Catalog">
            <id column="CATALOG_ID" property="catalogId" />
            <result column="CATALOGNAME" property="name" />
      </association>
    </resultMap>
    <!--通用表字段列表--><!--
    方法名称: selectListByIds
    调用路径: BookEntityMapper.selectListByIds
    开发信息:
    处理信息: 根据ID查询记录
    -->
    <select id="selectListByIds" parameterType="java.util.List" resultMap="ResultMapWithCata">
       SELECT   
               <include refid="columnListAlias"/>, c.NAME AS CATALOGNAME
       FROM   BOOK b, CATALOG c
       WHERE b.CATALOG_ID=c.CATALOG_ID AND (
      <foreach collection="list" item="item" index="index" separator=" OR " >
            BOOK_ID=#{item}
         </foreach>
         )
    </select>2、多对一实现例如:一个用户在商城生成了一个订单,订单中包含很多商品,想在查询订单的同时把订单的明细查询出来1)实体定义public class Order {
    /** 主键订单Id */
    private Integer id;
    /** 下单用户id */
    private Integer userid;
    // 订单明细
    private List<OrderDetail> orderdetails;
}public class OrderDetail {
    /** 主鍵,訂單明细表Id */
    private Integer id;
    /** 訂單Id */
    private Integer orderId;
    /** 商品id */
    private Integer itemsId;
    /** 商品购买数量 */
    private Integer itemsNum;
    // 明细对应的商品信息
    private Items items;
}2)OrderMapper实现<!-- 查询订单关联查询用户及订单明细 -->
<select id="findOrdersAndOrderDetailResultMap" resultMap="ordersAndOrderDetailResultMap">
    SELECT
      t1.*,
      t3.id orderdetail_id,
      t3.item_id,
      t3.item_num,
      t3.order_id
    FROM
      order t1,
      orderdetail t3
    WHERE t3.orders_id=t1.id
</select>
<!-- 查询订单(关联用户)及订单明细的resultMap -->
<resultMap type="Orders" id="ordersAndOrderDetailResultMap">
<id column="id" property="id"/>
<result column="user_id" property="userId"/>
<collection property="orderdetails" ofType="OrderDetail">
    <id column="orderdetail_id" property="id"/>
    <result column="item_id" property="itemId"/>
    <result column="item_num" property="itemNum"/>
    <result column="order_id" property="orderId"/>
</collection>
</resultMap>


页: [1]
查看完整版本: mybatis关联查询,一对一,一对多