使用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

 

 
posted @ 2019-09-04 10:26  海绵般汲取  阅读(2366)  评论(0编辑  收藏  举报