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

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM