mybatis使用foreach遍历空list空指针,笨法子解决

mybatis使用foreach遍历空list空指针,笨法子解决

今天在使用foreach遍历list时,因为需要在list中追加数据,先是实例化一个arrayList(),然后在while循环里查找数据,向arrayList()中插入数据,当查到10条数据后,退出循环。大概是下面这样

List> result = new ArrayList<>(1);
        while (result.size() < 10) {
            result.addAll(userMapper.lis(userId, result));
        }

mybatis的foreach是这样

  SELECT * FROM tb_user WHERE  id IN
        <foreach collection="list" item="item" separator="," index="index" open="(" close=")">
            #{item.id}
        </foreach>
    

这里就会出现一个问题,一开始被便利的arrayList()的长度为0,虽然申请到了地址,但是里面并没有数据,这样id In #{item}会报错。毕竟没有数据,怎么能通过in来限制条件呢?

尝试了网上的方法,在foreach外面加上if判断,就是下面这样

  SELECT * FROM tb_user WHERE  id IN
  	<if test= "list !=null and list.size() > 0 ">
  	<foreach collection="list" item="item" separator="," index="index" open="(" close=")">
            #{item.id}
        </foreach>
  	</if>        

经过实践,这样还是不行,还是一样的错误,无论是list.size()还是list.size都不行。

最终用了一个蠢方法,在实例化arrayList之后,手动putALL一个map进去,最后再把map删除。

    List> result = new ArrayList<>(1);
        Map temp = new HashMap<>(1);
        temp.put("id", 0);
        result.add(temp);
        while (result.size() < 10) {
            result.addAll(entityUserMapper.listChatMatch(userId, result));
        }
        result.remove(0);

因为业务用到的用户表中没有,也不会有id为0的用户,先把存入id为0的map放进arrayList里面,再通过foreach遍历,这样就不会报错了。因为一开始就把map放进arrayList里面,这个map的下标为0,得到想要的数据之后直接remove就行。
不知道在mybatis中该怎么操作,希望有大佬能指点一二。

学习之路不会终止,要成为一个终生学习者。

你可能感兴趣的:(JAVA,WEB,SSM,mybatis,foreach,java)