注:这篇文章的代码有部分删减,不能直接使用,不过关键代码都存在 应用场景: 想用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>
复制代码
|