mybatis---------insert,delete ,update的批量操作
在数据量大的情况下,可以使用批量 提高性能
批量插入insert
方法一:
<insert id="insertbatch" parameterType="java.util.List">
<selectKey keyProperty="id" order="AFTER"
resultType="int">
SELECT LAST_INSERT_ID()
</selectKey>
INSERT INTO sourcedoc (
sdate, sweek,
roomno, daysched, nightsched,
adminsched, vacationsched, programdept,
programname
)values
<foreach collection="list" item="item" index="index" separator=",">
(
#{item.sdate},#{item.sweek},#{item.roomno},
#{item.daysched},#{item.nightsched},#{item.adminsched},
#{item.vacationsched},#{item.programdept},#{item.programname}
)
</foreach>
</insert>
方法二:
<insert id="batchInsert" parameterType="ArrayList">
insert into table1(sdate,sweek,roomno,daysched,nightsched,adminsched,vacationsched,programdept,programname)
<foreach collection="list" item="item" index="index" separator="union all">
select #{item.sdate,jdbcType=VARCHAR},
#{item.sweek,jdbcType=VARCHAR},
#{item.roomno,jdbcType=VARCHAR},
#{item.nightsched,jdbcType=VARCHAR},
#{item.adminsched,jdbcType=VARCHAR},
#{item.vacationsched,jdbcType=VARCHAR},
#{item.programdept,jdbcType=VARCHAR},0,0,
#{item.programname,jdbcType=VARCHAR}
from dual
</foreach>
</insert>
批量删除(delete)
<!-- 通过主键集合批量删除记录 -->
<delete id="batchRemoveUserByPks" parameterType="java.util.List">
DELETE FROM LD_USER WHERE ID in
<foreach item="item" index="index" collection="list" open="(" separator="," close=")">
#{item}
</foreach>
</delete>
批量修改(update)
update orders set state = '0' where no in
<foreach collection="list" item="nos" open="(" separator="," close=")">
#{nos}
</foreach>
</update>
MyBatis中in子句 in 参数 使用方法
1.只有一个参数
参数的类型要声明为List或Array
Sql配置如下:
<select id="selectProduct" resultMap="Map">
SELECT * FROM PRODUCT
WHERE PRODUCTNO IN
<foreach item="productNo" index="index" collection="参数的类型List或array">
#{productNo}
</foreach>
</select>
2.多个参数
首先要将多个参数写入同一个map,将map作为一个参数传入mapper
Sql配置如下:
<select id="selectSoucedoc" resultMap="Map">
SELECT *
FROM PRODUCT
WHERE PRODUCTNO IN
<foreach item="id" index="index" collection="map中集合参数的名称">
#{id}
</foreach>
</select>
##############
- <insert id="addTrainRecordBatch" useGeneratedKeys="true" parameterType="java.util.List">
- <selectKey resultType="long" keyProperty="id" order="AFTER">
- SELECT
- LAST_INSERT_ID()
- </selectKey>
- insert into t_train_record (add_time,emp_id,activity_id,flag)
- values
- <foreach collection="list" item="item" index="index" separator="," >
- (#{item.addTime},#{item.empId},#{item.activityId},#{item.flag})
- </foreach>
- </insert>
对于foreach标签的解释参考了网上的资料,具体如下:
foreach的主要用在构建in条件中,它可以在SQL语句中进行迭代一个集合。foreach元素的属性主要有 item,index,collection,open,separator,close。
item表示集合中每一个元素进行迭代时的别名,index指 定一个名字,用于表示在迭代过程中,每次迭代到的位置,
open表示该语句以什么开始,separator表示在每次进行迭代之间以什么符号作为分隔 符,
close表示以什么结束,在使用foreach的时候最关键的也是最容易出错的就是collection属性,该属性是必须指定的,
但是在不同情况 下,该属性的值是不一样的,主要有一下3种情况:
1.如果传入的是单参数且参数类型是一个List的时候,collection属性值为list
2.如果传入的是单参数且参数类型是一个array数组的时候,collection的属性值为array
3.如果传入的参数是多个的时候,我们就需要把它们封装成一个Map了,当然单参数也可以封装成map
mybatis---------insert,delete ,update的批量操作的更多相关文章
- MyBatis insert/delete/update 的返回值
insert,返回值是:新插入行的主键(primary key):需要包含<selectKey>语句,才会返回主键,否则返回值为null. <insert id="inse ...
- 带有OUTPUT的INSERT,DELETE,UPDATE
原文地址:http://blog.sina.com.cn/s/blog_71460d950100nld2.html OUTPUT是SQL SERVER2005的新特性.可以从数据修改语句中返回输出.可 ...
- Use Select To Generate Any Insert/Delete/Update Statement
If you don't have the permission to generate script according to an existing db, but you have the re ...
- sqlserver触发器insert,delete,update
Create Trigger [dbo].[upemployee_kefyu_sale] on [dbo].[employee] for update as if update(FullName) b ...
- sql server 带有OUTPUT的INSERT,DELETE,UPDATE
原文:sql server 带有OUTPUT的INSERT,DELETE,UPDATE OUTPUT是SQL SERVER2005的新特性.可以从数据修改语句中返回输出.可以看作是"返回结果 ...
- MySQL进阶10--DML数据操纵预言: insert/delete/update --多表连接修改/.多表连接删除/多表连接查询-- truncate 和 delete的区别
/* DML -- 数据操纵预言: insert/delete/update */ #一: 插入语句 /* 语法1: insert into 表名(列名,..,列名....) values(值1,值2 ...
- mybatis insert、update 、delete默认返回值解释与如何设置返回表主键
在使用mybatis做持久层时,insert.update.delete,sql语句默认是不返回被操作记录主键的,而是返回被操作记录条数: 那么如果想要得到被操作记录的主键,可以通过下面的配置方式获取 ...
- mybatis insert转update,duplicate关键字的使用示例,及返回情况说明
主键存在时又insert转为update某个关键字段,示例如下,注意,如果这条数据曾经不存在,此时执行insert返回条目是1,如果已存在,执行update返回条目是2!!!<insert id ...
- MyBatis日记(四):MyBatis——insert、update、delete、select
MyBatis简单增删改查操作,此处所做操作,皆是在之前创建的MyBatis的Hello world的工程基础上所做操作. 首先在接口文件(personMapper.java)中,添加操作方法: pa ...
- Mybatis Insert、update、delete流程
上文mybatis源码简书我们讲到sqlsession中通过executor来执行sql,我们接着往下看 update方法点进去,我们进到baseexecutor 这里我们看到 clearLocalC ...
随机推荐
- matlab里plot画多幅图像、设置总标题、legend无边框
%%绘图 suptitle('公路') %总标题subplot(2,2,1);plot(x,y11,'r-') hold onplot(x,y21,'b-')xlabel('方向')ylabel(' ...
- Java List&Map简单初始化方法
Java中List与Map初始化的一些写法 // InitCollections.java - sample of init collect package com.util; import java ...
- 阅读国外大神对this的分析,自己的总结
大神的分析地址:http://javascriptissexy.com/understand-javascripts-this-with-clarity-and-master-it/#comment- ...
- angular中的jsonp记录
angular的正常机制采用引入$http服务的形式进行 get post等的访问.但是在跨域访问的时候就需要采用jsonp了. 不废话,直接上示例和引用原文地址: 比如访问地址为 http://ur ...
- 用sudo命令无法读取环境变量
通过sudo -l来查看sudo的限制: $ sudo -l Matching Defaults entries for xxx on this host: env_reset, mail_badpa ...
- jquery常用的选择器
jquery用选择器来得到jquery对象,进而进行一些操作. 一.基本选择器 1.id选择器.示例:选择id为one的元素 var $one = $("#one"); 2.类选择 ...
- openstack私有云布署实践【16.1 CentOS7.1 只有根分区镜像制作】
之所以要只有根分区镜像,是因为在创建VM或者调整云主机的硬盘大小时,它能自动扩容.无需人工介入 在原来的物理机10.40.41.1的CentOS 6.7上制作镜像.(当然如果你的制作镜像的宿主机是 ...
- Matches Puzzle Game
Matches Puzzle Game 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5456 数位DP 首先我把C-A=B改为A+B=C(我觉得会简单 ...
- 计算机网络课程优秀备考PPT之第一章概述(一)
为了记录自己从2016.9~2017.1的<计算机网络>助教生涯,也为了及时梳理和整写笔记! 以上,是<计算机网络>课程的第一章概述.
- 《细说PHP》的php语言结构
6.1流程控制 顺序结构 语句按照出现的先后次序自上而下依次执行 分支结构 先做判断再做选择 6.3.4 特殊的流程控制语句 break语句结束当前for.foreach.while.do-while ...