概述
使用foreach时,一定要注意传入的list是否空。
1、使用一个foreach
Service层:
public List<UserInfo> getListOne() {
List<String> nameList = new ArrayList<>();
nameList.add("wang");
List<User> userList = new ArrayList<>();
if(nameList != null && nameList.size() > 0) { //在数据复杂的情况下,一定要判断是否为空,否则可能会报错
userList = userInfoMapper.getListOne(nameList);
}
return userList;
}
Dao层:
List<UserInfo> getListOne(List<String> nameList);
Xml文件:
<select id="getListOne" resultType="UserInfo">
SELECT * FROM user_info
WHERE name IN
<foreach item="nameList" index="index" collection="list"
open="(" separator="," close=")">
#{nameList}
</foreach>
</select>
上面这个xml中的collection的值为list,如果传入的参数为数组,这里collection的值应该为Array
2、使用两个foreach:
Service层:
public List<User> getListOne() {
List<Long> idList = new ArrayList<>();
List<String> nameList = new ArrayList<>();
idList.add(1L);
nameList.add("name");
if(null == idList || idList.size() < 1) {
//这里传入0L,而list中的数据类型为Long,原因是因为一般表的id没有为0的,所以制造为空的条件
idList.add(0L);
}
if(null == nameList || nameList.size() < 1){
nameList.add("");
}
//然后将list数据封装到Map里面去
Map<String, Object> optionMap = new HashMap<>();
optionMap.put("idList", idList);
optionMap.put("nameList", nameList);
List<User> userList = userInfoMapper.getListOne(optionMap);
return userList;
}
Dao层:
List<UserInfo> getListOne(Map<String, Object> optionMap);
Xml文件:
<select id="getListOne" resultType="UserInfo">
SELECT * FROM user_info
WHERE id IN
<foreach item="param" index="index" collection="idList"
open="(" separator="," close=")">
#{param}
</foreach>
OR name IN
<foreach item="param" index="index" collection="nameList"
open="(" separator="," close=")">
#{param}
</foreach>
</select>
在多个foreach中,将list放到Map里面,这个时候,xml文件中的collection值就为Map中的那个list的名字。
item参数的值,貌似任意的都是可以的,我测试了几个,都是可行的。
最后
以上就是畅快曲奇为你收集整理的java中在mybatis的配置文件中使用两个foreach问题的全部内容,希望文章能够帮你解决java中在mybatis的配置文件中使用两个foreach问题所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复