【MyBatis学习09】高级映射之一对多查询
来源:互联网 发布:淘宝售后客服术语大全 编辑:程序博客网 时间:2024/06/05 19:31
上一篇博文总结了一下一对一的映射,本文主要总结一下一对多的映射,从上一篇文章中的映射关系图中可知,订单项和订单明细是一对多的关系,所以本文主要来查询订单表,然后关联订单明细表,这样就有一对多的问题出来了。
首先还是先写sql语句,在写sql语句的时候遵循两点:
- 查询的主表是哪个? 订单表
- 查询的关联表是哪个? 订单明细表
明确了主表和关联表,下面就可以写sql了,我们在上一节的sql基础上添加订单明细表的关联即可。
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
这样我们就查询出了订单表中的所有字段,user表和orderdetail表的部分字段,当然也可以查询所有字段,这个根据具体需求来定。看一下查询结果:
从结果中可以看出,订单的信息有重复,订单项是不重复的,因为一对多嘛,这很好理解。所以如果我们用resultType来做映射的话就会出现订单信息的重复,我们不希望出现这个结果,即对orders的映射不能出现重复记录的情况。那么我们就需要在Orders.Java类中添加一个List<OrderDetail> orderDetails
属性来封装订单明细项(比较简单,代码就不贴了),最终会将订单信息映射到Orders中,该订单所对应的订单明细映射到Orders中的orderDetails属性中(这跟hibernate中有点类似,如果是hibernate,也会在Orders类中维护一个装OrderDetail的List)。
有了这个思路,接下来就开始写映射文件了。
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
所以我们要定义一个名为OrdersAndOrderDetailResultMap的resultMap,如下:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
这里看到了一个继承,因为订单信息和关联的用户信息和前面一对一是完全一样的,我们就不需要再写一遍了,<resultMap>
支持继承,直接继承那个resultMap即可,然后加上订单明细这部分即可。
<collection>
是用来处理一对多映射的标签,property属性是Orders.java类中对应的装OrderDetail的List的属性名,就是刚刚定义的那个List,ofType属性表示该List中装的是啥,可以是完全限定名,也可以是别名。然后<collection>
里面的标签和属性就和前面一样了,不再赘述。
然后定义一下mapper接口即可:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
到此位置,一对多的映射就写好了,下面测试一下:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 1
- 2
- 3
- 4
- 5
- 6
- 7
一对多就总结到这吧,下一篇博文将总结一下mybatis中多对多映射。
- 【MyBatis学习09】高级映射之一对多查询
- 【MyBatis学习09】高级映射之一对多查询
- 【MyBatis学习09】高级映射之一对多查询
- 【MyBatis学习09】高级映射之一对多查询
- Mybatis学习(08)-高级映射之一对多查询
- 【Mybatis】---高级映射之一对多查询
- MyBatis高级映射之一对多查询
- Mybatis学习(09)-高级映射之多对多查询
- mybatis学习之高级映射中的多对多查询
- 【MyBatis学习10】高级映射之多对多查询
- 【MyBatis学习10】高级映射之多对多查询
- 【MyBatis学习10】高级映射之多对多查询
- 【MyBatis学习10】高级映射之多对多查询
- mybatis之一对多映射查询(十一)
- Mybatis高级映射多对多查询
- 【Mybatis】---高级映射之多对多查询
- MyBatis高级映射之多对多查询
- 【MyBatis框架】高级映射-多对多查询
- Yii2中request的使用方法
- 注解(Annotation)自定义注解入门
- windows 安装tensorflow
- 图像配准之概念简述
- 扩展阅读 数学对编程的重要意义 C语言计算1,2,3,...,100的总和
- 【MyBatis学习09】高级映射之一对多查询
- 团队协作开发的最佳实践--Git Flow
- C++之迭代器(Iterator)篇
- 理解'*','*args','**','**kwargs'
- basic Python 1(syntax&strings&dastetime)
- 子DIV浮动(float)后父DIV高度自动失效解决方案
- 《慕课网玩转算法面试》笔记及习题解答5.4.~5.6
- ijkplayer详解使用教程
- 51 nod oj 1189 素因子分解+逆元