使用mybatis的resultMap进行复杂查询

 
 
记录下mybatis的集合查询中碰到的问题
 

MyBatis ofType和javaType区别

 

mybatis 关联查询 resultMap 同名冲突

 
使用mybatis的resultMap进行复杂查询
 
mybatis <collection>标签 类型为string时没法获取重复数据错误
 
使用resultMap进行一对多关联查询的方式有两种:
方法 一、 使用左链接查询全部关联数据
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
相关文章
相关标签/搜索