Mybatis中的foreach用法

目录

  • Mybatis中的foreach用法
    • 元素属性
      • List对象集合查询
      • 根据数组中的Id删除
      • update修改

元素属性

  • item: 集合中元素迭代时的别名,该参数为必选。
  • index:在list和数组中,index是元素的序号,在map中,index是元素的key,该参数可选
  • open:foreach代码的开始符号,一般是(和close=")"合用。常用在in(),values()时。该参数可选
  • separator:元素之间的分隔符。","形式
  • close :foreach代码的关闭符号,一般是")“和open=”("合用。常用在in(),values()时。该参数可选。
  • collection:三种情况
    1. 如果传入的是单参数且参数类型是一个List的时候,collection属性值为list
    2. 如果传入的是单参数且参数类型是一个array数组的时候,collection的属性值为array
    3. 如果使用Map封装了,collection的属性值为对应的Key

List对象集合查询

Controller层方法内参数传入List对象集合,Mybatis内foreach方法

<select id="selectTestList" parameterType="com.bxy.leaveapply.domain.Test" resultMap="LeaveResult">SELECT * FROM `test` awhere 1=1<if test="TestList !=null"><foreach collection="list" item="item" index="index" open="and (" separator="or" close=")">a.user_id = #{item.userId} and a.leave_status = #{item.leaveStatus}and #{item.startTime}  between a.start_time and a.end_time</foreach></if></select>

根据数组中的Id删除

<delete id="deleteTestByIds" parameterType="String">delete from test where test_id in<foreach item="testId" collection="array" open="(" separator="," close=")">#{testId}</foreach>

update修改

第一种:
Dao层的数据为:

int updateForEachByYiKuId(@Param("list") List<WmsMoveDetail> list,@Param("scanningFlag") Byte scanningFlag,@Param("remark") String remark);

Mapper中的sql语句:

<update id="updateForEachByYiKuId" parameterType="java.util.List"><foreach collection="list" item="item" index="index" open="" close="" separator=";">update wmsmovedetail<set ><if test="scanningFlag != null and scanningFlag !=''" >ScanningFlag = #{scanningFlag},</if><if test="remark != null and remark !=''" >Remark = #{remark},</if></set>where YiKuId = #{item.yiKuId} and RowNo = #{item.rowNo}</foreach></update>

在使用foreach处理update时,后台输出sql一直报错,但是确定没问题。查看jdbc的设置,缺少**&allowMultiQueries=true**
MySQL连接数据库时,添加语句:“allowMultiQueries=true”的作用:
1.可以在sql语句后携带分号,实现多语句执行。
2.可以执行批处理,同时发出多个SQL语句。

第二种:
Dao层的数据为:

int updateListByChuKuIdAndRowNo(@Param("list") List<WmsOutputDetail> list);

Mapper中的sql语句

<update id="updateListByChuKuIdAndRowNo" parameterType="java.util.List"><foreach collection="list" item="item" index="index" open="" close="" separator=";">update wmsoutputdetail<trim prefix="SET" suffixOverrides=","><if test="item.remark != null and  item.remark != ''">Remark = #{item.remark},</if><if test="item.scanningFlag != null and  item.scanningFlag != ''">ScanningFlag = #{item.scanningFlag},</if></trim>where ChuKuId = #{item.chuKuId} and RowNo = #{item.rowNo}</foreach></update>

Mybatis中的foreach用法相关推荐

  1. 关于mybatis中selectKey的用法

    在使用MyBatis插入数据进入数据库的时候会用到sequence序列来生成自增的id 这时可以使用selectKey就可以得到sequence的值,同时也会将值返回.不过对于不同的数据库有不同的操作 ...

  2. mysql mapper foreach_springboot结合MyBatis中使用foreach

    废话少说,直接建项目上代码 先建一个springboot web项目或者模块,目录结构如下 在pom.xml中自行加入需要的依赖,application.properties的配置如下 server. ...

  3. Mybatis 中 selectKey的用法

    大家好,我们今天来看下mysql中selectKey的用法. selectKey返回最近一次插入的id 返回自增ID <selectKey resultType="java.lang. ...

  4. mybatis 中 if else 用法

    mybaits 中没有 else 要用 chose when otherwise 代替 下面就是MyBatis中的if....else...表示方法 <choose><when te ...

  5. Mybatis中parameterType的用法

    在mybatis映射接口的配置中,有select,insert,update,delete等元素都提到了parameterType的用法,parameterType为输入参数,在配置的时候,配置相应的 ...

  6. Mybatis中的association用法

    这篇文章我们将来学习一些 association 用法 表结构 DROP TABLE IF EXISTS `student`; CREATE TABLE `student` ( `id` int(11 ...

  7. C++中的foreach用法

    在c++中,一般人只知道foreach分开写为"for each"时的用法,却不知道"foreach"的用法.不多说,直接上代码. QStringList li ...

  8. foreach在java中_java中的foreach用法

    之前看过foreach的用法,但只是简单的了解,最近在看书的时候发现还是经常用到,还是对其总结一下: foreach是java SE5 引入的一种比for语句更加简洁的循环语句.用于数组和容器.我们不 ...

  9. Mybatis中Example的用法

    Example简单介绍 1.example是Mybatis数据层框架中的一个工具,可以帮我们完成sql语句中where条件句的书写,相当于where后面的部分,我们可以根据不同的条件来查询和操作数据库 ...

最新文章

  1. Linux 命令(记录)
  2. 用存储过程实现数据分页
  3. 【Linux 内核】实时调度类 ⑦ ( 实时调度类核心函数源码分析 | dequeue_task_rt 函数 | 从执行队列中移除进程 )
  4. 干货 | 林轩田机器学习「基石+技法」历史文章汇总
  5. react设置默认props
  6. (百度云服务器的)域名不加www可以访问,添加就不能访问 (添加域名绑定)- 解决篇
  7. ORACLE查看某个表的索引状态
  8. RubyGem version error: rack(1.0.0 runtime)
  9. 云课堂计算机教室怎么使用,锐捷“云课堂2.0”焕发计算机教室青春活力
  10. LiveReload拓展配合Webpack实现网页自动刷新
  11. androidFD泄露问题总结
  12. Child returned status 1问题解决
  13. 如何在第三方平台或系统中引入外源邮箱:126邮箱、QQ邮箱
  14. 论“无常,苦、无我”
  15. OSPF——LSA讲解
  16. 怎么样可以批量下载网页图片?
  17. 深度学习基础:机器学习中的基函数与函数空间
  18. 发表论文介绍(计算机类)
  19. (js)switch
  20. jpg转换成dwf的方式

热门文章

  1. Calabash 快速入门 (Android)
  2. delphi 安卓图片保存数据库_在Delphi实现在数据库中存取图像的图文演示无错
  3. Flink 窗口函数(Window Functions)增量聚合函数
  4. linux在vim中查找、退出
  5. linux EHCI DRIVER之中断处理函数ehci_irq()分析(二)
  6. Hive实现unpivot
  7. 白话说CC--五分钟带你了解EAL4+与EAL5+的区别
  8. 听说过孤儿进程和僵尸进程嘛?
  9. 21 种代码的坏味道
  10. webview的使用套餐,androidstudiondk配置