mybatis关联查询,一对一,一对多
Posted yin.kh
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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>
以上是关于mybatis关联查询,一对一,一对多的主要内容,如果未能解决你的问题,请参考以下文章
SpringBoot与Mybatis整合(包含generate自动生成代码工具,数据库表一对一,一对多,关联关系中间表的查询)