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