mybatis高级映射一对多查询实现代码

本篇文章主要介绍了mybatis高级映射一对多查询实现代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下。

1.需求分析:

在开发中会遇到这样一个问题,查询订单信息,级联查询用户信息和订单明细信息

2.sql语句实现

2.1确定主查询表:订单表

2.2确定关联查询表用户表, 订单明细表

sql语句如下:

select orders.*, t_user.address, t_user.name, t_user.brithday, orderdetail.id orderdetail_id, orderdetail.orderid, orderdetail.itemsid from orders, t_user, orderdetail where orders.userid=t_user.id AND orderdetail.orderid=orders.id;

查询结果如下:

映射要求:

不能出现重复的订单信息

3.编码实现

在orders.java中添加属性,List ordersDetails 。类比hibernate学习,代码如下:

public class Orders { private int id; private String note; private Date dateTime; private String number; private int userId; private User user; private List ordersDetails;//看这里 }

最终会将订单信息映射到orders中,订单所对应的订单明细映射到orders的ordersDetails集合中,从上面查询结果图中可以看出最终的订单信息将为2条(orders信息不重复),每个订单orders中的属性存储了该订所对应的订单明细。

4.编写mapper.java和mapper.xml文件

代码如下:

package com.djp.config.mapper; import com.djp.pojo.Orders; import com.djp.pojo.OrdersCustom; import java.util.List; public interface OrdersCustomMapper { /** * 查询订单关联查询用户信息和订单明细信息 * * @return */ List findOrderAndOrderDetailResultMap(); /** * 查询订单关联查询用户信息 * * @return */ List findOrderUser() throws Exception; /** * 使用resultMap映射 * * @return * @throws RuntimeException */ List findOrderUserResultMap() throws RuntimeException; }

对于mapper.xml的解释加在了代码中 ,如下:

select orders.*, t_user.address, t_user.name, t_user.brithday, orderdetail.id orderdetail_id, orderdetail.orderid, orderdetail.itemsid from orders, t_user, orderdetail where orders.userid=t_user.id AND orderdetail.orderid=orders.id select orders.*,t_user.address,t_user.name,t_user.brithday from orders, t_user where orders.userid=t_user.id select orders.*,t_user.address,t_user.name,t_user.brithday from orders, t_user where orders.userid=t_user.id

代码有点多,不怕得,下面的是之前的一对一的,注意继承至之前写好的resultMap。

5 写测试代码

/** * 查询订单关联查询用户信息和订单明细信息 */ @Test public void testFindOrderAndOrderDetailResultMap() { try { System.out.println("start................."); //通过得到的sqlSessionFactory打开回话sqlSession sqlSession sqlSession = sqlSessionFactory.openSession(); //通过会话得到用户的代理 OrdersCustomMapper ordersCustomMapper = sqlSession.getMapper(OrdersCustomMapper.class); List list = ordersCustomMapper.findOrderAndOrderDetailResultMap(); for (Orders item : list) { System.out.println("订单+用户+订单明细:"+item); } } catch (Exception e) { e.printstacktrace(); } }

运行结果如下:

从图中可看出我们需要的订单信息,关联查询出的用户信息,关联查询出的订单明细信息都出来了!

6 .总结

mybatis使用resultMap实现一对多查询用collection对关联查询出的多条记录映射到一个list集合中

相关文章

HashMap是Java中最常用的集合类框架,也是Java语言中非常典型...
在EffectiveJava中的第 36条中建议 用 EnumSet 替代位字段,...
介绍 注解是JDK1.5版本开始引入的一个特性,用于对代码进行说...
介绍 LinkedList同时实现了List接口和Deque接口,也就是说它...
介绍 TreeSet和TreeMap在Java里有着相同的实现,前者仅仅是对...
HashMap为什么线程不安全 put的不安全 由于多线程对HashMap进...