記錄下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