【Mybatis从0到1-011】一对多查询(resultMap)

来源:互联网 发布:未闻花名网络歌手资源 编辑:程序博客网 时间:2024/05/21 17:30

Demo需求:查询订单关联查询用户及订单明细。

SQL语句
确定主查询表:订单表
确定关联查询表:订单明细表
在一对一查询基础上添加订单明细表关联即可

SELECT 
  orders.*,
  USER.username,
  USER.sex,
  USER.address,
  orderdetail.id orderdetail_id,
  orderdetail.items_id,
  orderdetail.items_num,
  orderdetail.orders_id
FROM
  orders,
  USER,
  orderdetail
WHERE orders.user_id = user.id AND orderdetail.orders_id=orders.id

分析:

使用resultType将上边的查询结果映射到pojo中,订单信息的pojo就会重复。


如果对demo提出要求:

对orders映射不能出现重复记录。
针对要求需要进行如下操作:

 1.在orders.java类中添加List<orderDetail> orderDetails属性。
 2.将订单信息映射到orders中,订单所对应的订单明细映射到orders中的orderDetails属性中。


映射成的orders记录数为两条(orders信息不重复)
每个orders中的orderDetails属性存储了该 订单所对应的订单明细。

【1】添加属性

在orders中添加list订单明细属性,前提是先创建OrderDetail.java文件,关键代码如下:
public class OrderDetail {    private Integer id;    private Integer ordersId;    private Integer itemsId;    private Integer itemsNum;
之后创建Items.java文件,路径为:src\main\java\po\Items.java
代码如下:
public class Items {     private Integer id;    private String name;    private Float price;    private String pic;    private Date createtime;
最后在Order.java中添加list属性代码如下:
private List<OrderDetail> orderDetails;

【2】定义resultMap

 <!-- 订单及订单明细的resultMap使用extends继承,不用在中配置订单信息和用户信息的映射 -->   <resultMap type="po.Orders" id="OrdersAndOrderDetailResultMap" extends="OrdersUserResultMap">       <!-- 订单信息 -->       <!-- 用户信息 -->       <!-- 使用extends继承,不用在中配置订单信息和用户信息的映射 -->       <!-- 订单明细信息       一个订单关联查询出了多条明细,要使用collection进行映射       collection:对关联查询到多条记录映射到集合对象中       property:将关联查询到多条记录映射到cn.itcast.mybatis.po.Orders哪个属性       ofType:指定映射到list集合属性中pojo的类型 -->       <collection property="orderdetails" ofType="po.OrderDetail">           <!-- id:订单明细唯 一标识           property:要将订单明细的唯一标识 映射到po.Orderdetail的哪个属性-->           <id column="orderdetail_id" property="id"/>           <result column="items_id" property="itemsId"/>           <result column="items_num" property="itemsNum"/>           <result column="orders_id" property="ordersId"/>       </collection>   </resultMap>

【3】修改statement

打开OrderMapperCustom.xml文件,添加如下代码:

<select id="findOrdersAndOrderDetailResultMap" resultMap="OrdersAndOrderDetailResultMap">    SELECT    orders.*,    USER.username,    USER.sex,    USER.address,    orderdetail.id orderdetail_id,    orderdetail.items_id,    orderdetail.items_num,    orderdetail.orders_id    FROM    orders,    USER,    orderdetail    WHERE orders.user_id = user.id AND orderdetail.orders_id=orders.id</select>

【4】修改接口定义

在接口文件OrderMapperCustom.java下加入:

//查询订单(关联用户)及订单明细List<Orders> findOrdersAndDetailResultMap() throws Exception;

【5】测试文件


【小结】

mybatis使用resultMap的collection对关联查询的多条记录映射到一个list集合属性中。
使用resultType实现:
将订单明细映射到orders中的orderdetails中,需要自己处理,使用双重循环遍历,去掉重复记录,将订单明细放在orderdetails中。

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 公司不给去办理变更股东信息怎么办 滴滴车主注册没有自己的车型怎么办 代办用虚假地址注册的公司怎么办? 写字楼注册公司租户不租了怎么办 租户没把公司迁出我该怎么办 租户不肯把户口迁出了业主怎么办 同片区个体户营业场所搬迁怎么办 个体领发票的本丢了怎么办 领房产证发票和合同丢了怎么办 税务登记证5年没有办怎么办 二证合一后税务登记证怎么办? 微信漂流瓶打招呼对方收不到怎么办 添加不上徽信好友的微信帐号怎么办 手机号码不用了微信密码忘了怎么办 别人用我的手机号码注册微信怎么办 电脑此网站的安全证书有问题怎么办 起诉离婚开庭时被告不到场怎么办 商标35类被别人注册了怎么办 商标被注销后被别人注册怎么办 电商35类商标被抢注怎么办 血小板太低怎么办可以吃水果吗? 微信好友删除了只记得昵称怎么办 优酷会员1080p很卡怎么办 电脑最下面的任务栏不显示怎么办 ea账号保留的问题忘了怎么办 微博超级话题账号被屏蔽怎么办 梦幻西游手机将军令号码换了怎么办 文档的内容被锁定无法修改怎么办 用户没有权限访问u盘时该怎么办? 电脑找不到ip地址连不上网怎么办 商标提前被别人注册微博昵称怎么办 扫码注册显示手机号被占用怎么办 vivo手机屏锁密码忘了怎么办 手机号注册微博手机号不用了怎么办 微博更换手机号被别人注册过怎么办 怎么有个qq注册验证码怎么办 12306手机丢了密码忘了怎么办 教师考试注册时邮箱填写错误怎么办 计算机二级注册时邮箱填错了怎么办 注册时执业范围填错了怎么办 百度号被盗了申诉不回来怎么办