SSM项目从零开始到入门031-mybatis的一对多关联映射
发布日期:2021-06-30 16:30:19 浏览次数:3 分类:技术文章

本文共 1524 字,大约阅读时间需要 5 分钟。

  先祭出上篇文章的关系图,上篇我们实现了,查询订单的同时查询订单所属的用户信息。现在有了新的问题,就是查询订单时,不光实现上篇功能,同时还要将订单明细查询出来。这就涉及到了一对多的查询。

首先我们写出查询的SQL语句

SELECT   	o.*,  u.* , d.*FROM  	t_order o ,  t_user u  ,  t_orderdetail dWHERE   	o.user_id = u.id AND o.id = d.order_id

从结果中可以看出,订单的信息有重复,这是因为id为1的订单有两条订单详情。所以如果我们用resultType来做映射的话就会出现订单信息的重复,我们不希望出现这个结果,即对orders的映射不能出现重复记录的情况。那么我们就需要在Orders.java类中添加一个List<OrderDetail> orderDetails属性来封装订单明细项,将订单信息映射到Orders中。

/** * 订单表 */public class Order {    /**     * 订单id       */    private Integer id;      /**     * 用户id     */    private Long userId;    /**     * 订单号     */    private String orderNumber;     /**     * 一个订单对应一个用户【一对一次采用对象】     */    private User user;    /**     * 一个订单包含多个订单明细【一对多采用集合】     */    private List
details; //get ... set 省略}

然后我们编写mapper接口方法

/*** 返回所有订单列表及订单明细* @return List
*/public List
queryOrderUserAndOrderDetail();

然后编辑映射文件xml

1.首先编写resultmap

这里直接继承前面所设置的OrderUserResultMap

2.然后加入sql查询

最后我们编辑测设类测试一下

@Test	public void queryOrderUserAndOrderDetailTest() {		List
queryOrderAndUserAll = orderMapper.queryOrderUserAndOrderDetail(); for (Order order : queryOrderAndUserAll) { System.out.println(order.toString()); } for (Order order : queryOrderAndUserAll) { System.out.println(order.getDetails().size()); } }

转载地址:https://kevin.blog.csdn.net/article/details/79543021 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:Javascript计算日期间隔
下一篇:SSM项目从零开始到入门030-mybatis的一对一关联映射

发表评论

最新留言

不错!
[***.144.177.141]2024年04月22日 14时49分50秒