foreach的主要用在构建in条件中,它可以在SQL语句中进行迭代一个集合。
foreach元素的属性主要有 item,index,collection,open,separator,close。
item表示集合中每一个元素进行迭代时的别名,
index指 定一个名字,用于表示在迭代过程中,每次迭代到的位置,
open表示该语句以什么开始,
separator表示在每次进行迭代之间以什么符号作为分隔 符,
close表示以什么结束。
1.单参数List的类型:
<select id="findUserByListUser" resultType="com.hz.pojo.User">
SELECT *
FROM smbms_user u
WHERE userCode in
<foreach item="val" collection="list"
open="(" separator="," close=")">
#{val}
</foreach>
</select>
上述collection的值为list,对应的Mapper是这样的
public abstract List<User> findUserByListUser(List<String> list);
测试代码:
@Test
public void test03(){
try {
SqlSession sqlSession = MyBatisUtil.createSqlSession();
//通过映射获得UserDao接口实例
UserDao userDao = sqlSession.getMapper(UserDao.class);
List<String> list = new ArrayList<>();
list.add("liming");
list.add("hanlubiao");
list.add("zhanghua");
List<User> listUser = userDao.findUserByListUser(list);
for(User abc:listUser){
System.out.println(abc);
}
MyBatisUtil.closeSqlSession(sqlSession);
}catch (Exception e){
e.printStackTrace();
}
}
2.单参数array数组的类型:
<select id="findUserByArrayUser" resultType="com.hz.pojo.User">
SELECT *
FROM smbms_user u
WHERE userCode in
<foreach item="val" collection="array"
open="(" separator="," close=")">
#{val}
</foreach>
</select>
上述collection为array,对应的Mapper代码:public abstract List<User> findUserByArrayUser(String[] strings);
对应的测试代码:
@Test
public void test04(){
try {
SqlSession sqlSession = MyBatisUtil.createSqlSession();
//通过映射获得UserDao接口实例
UserDao userDao = sqlSession.getMapper(UserDao.class);
String strings[] = new String[]{"liming","hanlubiao","zhanghua"};
List<User> listUser = userDao.findUserByArrayUser(strings);
for(User abc:listUser){
System.out.println(abc);
}
MyBatisUtil.closeSqlSession(sqlSession);
}catch (Exception e){
e.printStackTrace();
}
}
3.Map类型
<select id="findUserByMapUser" resultType="com.hz.pojo.User">
SELECT *
FROM smbms_user u
WHERE userCode in
<foreach item="val" collection="map"
open="(" separator="," close=")">
#{val}
</foreach>
</select>
上述collection的值为ids,是传入的参数Map的key,对应的Mapper文件的代码:public abstract List<User> findUserByMapUser(Map<String,Object> map);
对应测试代码:
@Test
public void test05(){
try {
SqlSession sqlSession = MyBatisUtil.createSqlSession();
//通过映射获得UserDao接口实例
UserDao userDao = sqlSession.getMapper(UserDao.class);
List<String> list = new ArrayList<>();
list.add("liming");
list.add("hanlubiao");
list.add("zhanghua");
Map<String,Object> Map = new HashMap<>();
Map.put("map",list);
List<User> listUser = userDao.findUserByMapUser(Map);
for(User abc:listUser){
System.out.println(abc);
}
MyBatisUtil.closeSqlSession(sqlSession);
//关闭sqlSession
}catch (Exception e){
e.printStackTrace();
}