使用mybatis的resultMap进行复杂查询
记录下mybatis的集合查询中碰到的问题
MyBatis ofType和javaType区别
mybatis 关联查询 resultMap 同名冲突
使用mybatis的resultMap进行复杂查询
mybatis <collection>标签 类型为string时无法获取重复数据错误
使用resultMap进行一对多关联查询的方式有两种:
方法 1、 使用左连接查询所有关联数据
1. <resultMap id="peopleResultMap" type="People">
2. <id property="id" column="id" />
3. <result property="name" column="name" />
4. <collection property="qqs" ofType="string" javaType="list">
5. <result column="qq" />
6. </collection>
7. </resultMap>
8.
9. <select id="selectPeopleById" resultMap="peopleResultMap">
10. select p.*,pq.qq from
11. people p left join people_qq pq on p.id = pq.people_id
12. where p.id = #{id}
13. </select>
如上面,左连接关联查询出qq表的qq字段,然后将qq通过resultMap的集合类放到这个List<String> qqs这个属性字段中。
优点:查询数据只需要查询一次就可以了。
缺点:因为左连接查询,people表一对多qq表,会查询出重复的id数据行。这样就无法使用到数据库自带的分页函数。
select p.*,pq.qq from
people p left join people_qq pq on p.id = pq.people_id
where p.id = #{id}
上面这个sql查询出来的数据格式
如下:
方法 2 使用子查询的方式查询
1. <resultMap id="peopleResultMap" type="People"> 2. <id property="id" column="id" /> 3. <result property="name" column="name" /> 4. <collection property="qqs" ofType="string" javaType="list"> 5. <result column="qq" /> 6. </collection> 7. </resultMap> 8. 9. <select id="selectPeopleById" resultMap="peopleResultMap"> 10. select p.*,pq.qq from 11. people p left join people_qq pq on p.id = pq.people_id 12. where p.id = #{id} 13. </select>
子查询,就是在集合列表中调用另一个查询,进行数据赋值。
优点:可以使用数据库自带的分页函数
缺点:查询数据需要多次调用子查询进行集合字段数据查询。如果是大数据量查询,将会需要多次调用子查询sql。
mybatis默认使用懒加载的方式进行集合的子查询。存在问题。
可以查看下面这篇文章:mybatis问题解决
Springmvc+mybatis,mybatis配置延迟加载时,json序列化异常 https://ask.csdn.net/questions/344738?sort=comments_count 实体类有一个属性是其它实体类的类型,mybatis默认使用了 延迟加载,导致在处理这个类的时候某些属性不能被序列化,因此造成了上述原因 https://www.oschina.net/question/2312022_2232071 最近做项目时,使用了mybatis级联查询,配置了懒加载模式,结果通过springMvc返回json时报的错。报错如下: https://blog.csdn.net/qq_33548914/article/details/79991280
作者:海绵般汲取
出处:https://www.cnblogs.com/gne-hwz/
版权:本文版权归作者和博客园共有
转载:欢迎转载,但未经作者同意,必须保留此段声明;必须在文章中给出原文连接;否则必究法律责任
出处:https://www.cnblogs.com/gne-hwz/
版权:本文版权归作者和博客园共有
转载:欢迎转载,但未经作者同意,必须保留此段声明;必须在文章中给出原文连接;否则必究法律责任