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

网友投稿 234 2023-05-23


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

"http://mybatis.org/dtd/mybatis-3-mapper.dtd">

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.aGIxGXxzddress,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集合中


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:java三层架构原理与作用小结
下一篇:微信小程序实战之轮播图(3)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~