利用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;

查询结果如下:

利用mybatis如何实现一个一对多查询功能

映射要求:

不能出现重复的订单信息

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的解释加在了代码中 ,如下:

<?xml version="1.0" encoding="UTF-8" ?>



 
 
  
  
   
  
   
   
   
   
  
 
 
 
 
 
  
  
  
  
  
  
  
  
   
   
   
   
   
   
  
 
 
 
 
 

代码有点多,不怕得,下面的是之前的一对一的,注意继承至之前写好的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();
  }
 }

运行结果如下:

利用mybatis如何实现一个一对多查询功能

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

6 .总结

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

关于利用mybatis如何实现一个一对多查询功能问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注创新互联行业资讯频道了解更多相关知识。


分享文章:利用mybatis如何实现一个一对多查询功能
文章网址:http://cdiso.cn/article/iicses.html

其他资讯