mybatis collection 只能對映第一個物件的原因
今天在做一個一對多的關聯查詢時,明明對面有多條資料,但是死活只能拿到第一條,xml檔案的配置如下
其中,cn.college.school.vo.MenuSupportVo 物件裡面有這樣一個屬性
//關聯的學校列表
private List<School> schools;
關聯都是正常的mybatis操作,如果mybatis不熟的請自行百度
cn.college.school.dao.SchoolDao.menuGetSchool 對應的查詢為
<select id="menuGetSchool" resultType="cn.college.school.vo.MenuSupportVo" >
select * from school where id in (${_parameter});
</select>
之所以用 ${} 來包圍是因為我傳過去的 schoolIds 引數是 這樣的 21,23,24 如果用#{} 包圍mybatis會把其當為佔位符來傳遞
只會查到一條記錄了
${_parameter} 不用 ${schoolIds} 是因為 如果只有一個引數過來時,有時會報一個錯
There is no getter for property named 'XXX' in 'class java.lang.String'
這是mybatis本身的問題,要麼在介面加上 @Param 來對映,要麼就用這個,我的因為是在xml檔案引用的,所以就用了這個引數
然後查詢的時候是這樣的
mybatis列印的日誌是3條記錄,但是返回的物件始終只能對映第一條,後來參考了幾篇文章,說是因為兩張表的欄位有些重複了,導致只能對映一個
但是上面都是連線查詢的,而我的是用collection的select進行查詢關聯的,所以很麻煩,知道原因後
其實我只是想查詢 name 屬性過來而已,那能不能直接用String來接收,然後試了一下
跟原來的其實差不多,只是查詢語句變了
首先在 cn.college.school.vo.MenuSupportVo 加了這樣一個屬性
//學校名稱
private List<String> schoolNames;
然後把 第一xml檔案的內容改為
紅色指示的是修改的地方
然後再把那邊的檔案改為
<select id="menuGetSchool" resultType="java.lang.String" >
select name from school where id in (${_parameter});
</select>
然後再次查詢,發現就可以了,如下圖
很明顯是可以的,所以就使用了這樣的方法來處理即可
參考文章
記錄一下,防止下次出現同樣的問題沒有頭緒