java中在mybatis的配置文件中使用两个foreach问题

使用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参数的值,貌似任意的都是可以的,我测试了几个,都是可行的。

猜你喜欢

转载自blog.csdn.net/qq_20565303/article/details/79762351