動態SQL之foreach
1.1. foreach標簽
向sql傳遞數組或List,mybatis使用foreach解析,如下:
根據多個id查詢用戶信息
查詢sql:
SELECT * FROM user WHERE id IN (1,10,24)
1.1.1. 改造QueryVo
如下圖在pojo中定義list屬性ids存儲多個用戶id,並添加getter/setter方法
1.1.1. Mapper.xml文件
UserMapper.xml添加sql,如下:
<!-- 根據ids查詢用戶 -->
<select id="queryUserByIds" parameterType="queryVo"
SELECT * FROM `user`
<where>
<!-- foreach標簽,進行遍歷 -->
<!-- collection:遍歷的集合,這裏是QueryVo的ids屬性 -->
<!-- item:遍歷的項目,可以隨便寫,,但是和後面的#{}裏面要一致 -->
<!-- open:在前面添加的sql片段 -->
<!-- close:在結尾處添加的sql片段 -->
<!-- separator:指定遍歷的元素之間使用的分隔符 -->
<foreach collection="ids"
separator=",">
#{item}
</foreach>
</where>
</select>
----------------------------------------------------
測試方法如下圖:
@Test
public void testQueryUserByIds() {
// mybatis和spring整合,整合之後,交給spring管理
SqlSession sqlSession = this.sqlSessionFactory.openSession();
// 創建Mapper接口的動態代理對象,整合之後,交給spring管理
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
// 使用userMapper執行根據條件查詢用戶
QueryVo queryVo = new QueryVo();
List<Integer> ids = new ArrayList<>();
ids.add(1);
ids.add(10);
ids.add(24);
queryVo.setIds(ids);
List<User> list = userMapper.queryUserByIds(queryVo);
for (User u : list) {
System.out.println(u);
}
// mybatis和spring整合,整合之後,交給spring管理
sqlSession.close();
}
動態SQL之foreach