1. 程式人生 > >mybatis collection 只能對映第一個物件的原因

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>

然後再次查詢,發現就可以了,如下圖

很明顯是可以的,所以就使用了這樣的方法來處理即可

參考文章

記錄一下,防止下次出現同樣的問題沒有頭緒