關於mybatis中Available parameters are [collection, list] 的問題


在使用mybatis進行foreach 操作時報錯,Available parameters are [collection, list],

我的mapper文件中的代碼

() <select id="getAdminByConForeach" resultType="com.blackberry.day1.Admin" > SELECT * FROM Admin WHERE id IN <foreach item="admin_id" collection="aa" separator="," index="2" open="(" close=")"> #{admin_id} </foreach> </select> ()

測試方法

(```)
@Test
public void test21() throws IOException {
String resource = "conf/mybatis.xml";
InputStream inputStream = Resources.getResourceAsStream (resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder ().build (inputStream);
SqlSession sqlSession = sqlSessionFactory.openSession ();
try{
AdminMapperDynamicSQL adminMapperDynamicSQL = sqlSession.getMapper (AdminMapperDynamicSQL.class);
List list = adminMapperDynamicSQL.getAdminByConForeach (Arrays.asList (67,68,69,71,72));
for (Admin admin: list) {
System.out.println(admin);

        }

    }
    finally {

    }
}

(```)

查詢資料后發現,當mybatis傳入參數為list集合的時候;mybatis會自動把其封裝為一個map;會以“list”作為key;

    每個元素的值作為value;格式為Map<"list",value>
    當mybatis傳入參數為數組的時候mybatis會自動把其封裝為一個map;會以“array”作為key;
    每個元素的值作為value;格式為Map<"array",value>

解決法

第一種,利用@Param注解,使得foreach里面的collection知道要遍歷的集合哪個;第二種,因為mybatis封裝了list所有我們將collection的屬性設置為list即可,第三種將我們的List包裝成Map參數進行傳遞。參考文章


免責聲明!

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



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