mybatis foreach遍历LIST读到数据为null的问题

目录
  • foreach遍历LIST读到数据为null
    • 解决方案
  • foreach 遍历list中的坑
    • 下面是正确的判断条件

foreach遍历LIST读到数据为null

当我们在使用mybatis的时候,就避免不了批量更新,或者批量查询使用数组或者list,就避免不了使用foreach遍历,当我们在遍历的时候,数据遍历不出来,取出的值是null

解决方案

如下:只需要修改为下标取值

foreach 遍历list中的坑

将jdbc改写为mybatis时,传入的条件为list使用到的标签是<where> 、<choose>、<when>、<if>、<foreach>因为判断list集合时判断条件不全,导致sql执行错误

下面是正确的判断条件

<where>
  <choose>
    <when test="unitList != null and ! unitList.isEmpty() and unitList.size() > 0">
    (tab2.id IN
      <foreach collection="unitList" item="item" index="index"
      open="(" separator="," close=")">
      #{item}
      </foreach>
      AND tab1.`status` = #{deviceStatus})
    <if test="zoonList != null and ! zoonList.isEmpty() and zoonList.size() > 0">
      OR (tab2.leaderId IN
        <foreach collection="zoonList" item="item" index="index"
        open="(" separator="," close=")">
        #{item}
        </foreach>
      AND tab1.`status` = #{deviceStatus})
    </if>
  </when>
  <when test="zoonList != null and ! zoonList.isEmpty() and zoonList.size() > 0">
    tab2.leaderId IN
    <foreach collection="zoonList" item="item" index="index"
      open="(" separator="," close=")">
      #{item}
     </foreach>
    AND tab1.`status` = #{deviceStatus}
  </when>
  </choose>
</where>

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • MyBatis中使用foreach循环的坑及解决

    目录 使用foreach循环的坑 正确写法为 忽现的Mybatis foreach失效记录 解决方案 使用foreach循环的坑 我们首先看一段MyBatis中使用foreach循环的sql: SELECT * FROM table where id in <foreach item="item" collection="ids1" open="(" close=")" index="0" separ

  • mybatis使用foreach遍历list集合或者array数组方式

    一.准备工作 1.db.properties文件(记得修改自己的数据库和用户名.密码) dataSource.driver=com.mysql.jdbc.Driver dataSource.url=jdbc:mysql://localhost:3306/mybatis?useUnicode=true&characterEncoding=utf8 dataSource.username=blog dataSource.password=blog 2.主配置文件 <?xml version=&q

  • mybatis 中 foreach collection的用法小结(三种)

    foreach的主要用在构建in条件中,它可以在SQL语句中进行迭代一个集合. foreach元素的属性主要有 item,index,collection,open,separator,close. item表示集合中每一个元素进行迭代时的别名,     index指 定一个名字,用于表示在迭代过程中,每次迭代到的位置,     open表示该语句以什么开始,     separator表示在每次进行迭代之间以什么符号作为分隔 符,     close表示以什么结束. 在使用foreach的时候

  • mybatis foreach遍历LIST读到数据为null的问题

    目录 foreach遍历LIST读到数据为null 解决方案 foreach 遍历list中的坑 下面是正确的判断条件 foreach遍历LIST读到数据为null 当我们在使用mybatis的时候,就避免不了批量更新,或者批量查询使用数组或者list,就避免不了使用foreach遍历,当我们在遍历的时候,数据遍历不出来,取出的值是null 解决方案 如下:只需要修改为下标取值 foreach 遍历list中的坑 将jdbc改写为mybatis时,传入的条件为list使用到的标签是<where>

  • ASP.NET中GridView、DataList、DataGrid三个数据控件foreach遍历用法示例

    本文实例讲述了ASP.NET中GridView.DataList.DataGrid三个数据控件foreach遍历用法.分享给大家供大家参考,具体如下: //gridview遍历如下: foreach (GridViewRow row in GridView1.Rows) { CheckBox cb = (CheckBox)row.FindControl("CheckBox2"); if (cb.Checked == true) { } } //datagrid遍历: foreach (

  • mybatis foreach批量插入数据:Oracle与MySQL区别介绍

    下面给大家介绍mybatis foreach批量插入数据:Oracle与MySQL不同点: •主要不同点在于foreach标签内separator属性的设置问题: •separator设置为","分割时,最终拼接的代码形式为:insert into table_name (a,b,c) values (v1,v2,v3) ,(v4,v5,v6) ,... •separator设置为"union all"分割时,最终拼接的代码形式为:insert into table

  • MyBatis传入数组集合类并使用foreach遍历

    这篇文章主要介绍了MyBatis传入数组集合类并使用foreach遍历,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 在mapper中传入数组或集合类,使用foreach标签遍历出其中的值与SQL语句拼接 JAVA dao层接口 public interface UserDao { public List<User> getUsersByCollection(Collection collection); } mapper文件 <sel

  • Spring MVC使用jstl 标签c:forEach 遍历输出双层嵌套List的数据方式

    目录 Spring MVC jstl 标签c:forEach 遍历输出双层嵌套List数据 1.创建Controller 2.创建对应的jsp页面 注意事项: springMVC的forEach不能正常显示 1.问题 2.解决 Spring MVC jstl 标签c:forEach 遍历输出双层嵌套List数据 具体操作步骤如下: 1.创建Controller import java.util.ArrayList; import java.util.List; import javax.serv

  • mybatis3.4.6 批量更新 foreach 遍历map 的正确姿势详解

    好久没编码了!最近开始编码遇到一个问题 !一个批量修改的问题,就是mybatis foreach 的使用. 当时使用的场景 ,前端 传逗号拼接的字符串id, 修改id对应数据的数据顺序 ,顺序 就是id 的顺序. 就是一个条件(单个id值) 修改一个值(传入的id的顺序) , 1. 把条件作为Map 的key 修改值是value,用map入参 2.用List<Object> 或者数组 ,把条件和值封装成对象放进list集合或者array数组 3.代码使用for循环调用mapper方法 穿两个参

  • 深入浅析MyBatis foreach标签

    前面我们学习了如何使用 Mybatis if.where.trim 等动态语句来处理一些简单的查询操作.对于一些 SQL 语句中含有 in 条件,需要迭代条件集合来生成的情况,可以使用 foreach 来实现 SQL 条件的迭代. Mybatis foreach 标签用于循环语句,它很好的支持了数据和 List.set 接口的集合,并对此提供遍历的功能.语法格式如下. SELECT * FROM product_ WHERE ID in <foreach item="item"

  • 详解mybatis foreach collection示例

    在SQL开发过程中,动态构建In集合条件查询是比较常见的用法,在Mybatis中提供了foreach功能,该功能比较强大,它允许你指定一个集合,声明集合项和索引变量,它们可以用在元素体内.它也允许你指定开放和关闭的字符串,在迭代之间放置分隔符.这个元素是很智能的,它不会偶然地附加多余的分隔符. 下面是一个演示示例: <select id="findByIdsMap" resultMap="BaseResultMap"> Select <includ

  • mybatis foreach标签的使用详解

    mybatis的foreach标签经常用于遍历集合,构建in条件语句或者批量操作语句. 下面是foreach标签的各个属性 属性 描述 collection 表示迭代集合的名称,可以使用@Param注解指定,如下图所示 该参数为必选 item 表示本次迭代获取的元素,若collection为List.Set或者数组,则表示其中的元素:若collection为map,则代表key-value的value,该参数为必选 open 表示该语句以什么开始,最常用的是左括弧'(',注意:mybatis会将

  • php中foreach遍历类对象的总结

    foreach 遍历数组很常见,同样foreach也可以遍历对象 做如下测试: class my { public $a = 'a'; protected $b = 'b'; private $c = 'c'; private $data = array('fantasy','windows','linux'); // 内部foreach遍历class function traversable() { foreach($this as $key=>$val) { echo $key.'=>';

随机推荐