mybatis中批量插入以及更新
1:批量插入
批量插入就是在预编译的时候,将代码进行拼接,然后在数据库执行
<insert id="batchInsert" parameterType="java.util.List">
insert into table_name
(column1,column2,column3,column4,column5,column6,column7,
column8,column9,column10,column11,column12)
values
<foreach collection="list" item="item" index="index"
separator=",">
(#{item.column1},#{item.column2},#{item.column3},#{item.column4},
#{item.column5},#{item.column6},#{item.column7},#{item.column8},#{item.column9},
#{item.column10},#{item.column11},#{item.column12} )
</foreach>
</insert>
以上代码在数据库拼接后的效果是:
insert into table_name (a,b,c) values (a_value,b_value,c_value),(a_value2,b_value2,c_value2),.....
2:批量更新
<update id="batchUpdate" parameterType="java.util.List">
<foreach close="" collection="list" index="index" item="item"
open="" separator=";">
update table_name
<set>
<if test="item.column1!= null">column1= #{item.column1,jdbcType=VARCHAR},</if>
<if test="item.column2!= null">column2= #{item.column2,jdbcType=VARCHAR},</if>
<if test="item.column3!= null">column3= #{item.column3,jdbcType=VARCHAR},</if>
<if test="item.column4!= null">
column4= #{item.column4,jdbcType=VARCHAR},
</if>
</set>
where column5=#{item.column5,jdbcType=VARCHAR}
</foreach>
</update>
更新代码也是做了一个拼接,在数据库预编译后的效果是:
update table_name set a=a_value,b=b_value where c=c_value;update table_name set a=a_value2,b=b_value2 where c=c_value2;....
3:对于数据量比较大,而且不能断定需要insert或者update时,我们可以先将表中包含这些字段值得数据取出来,然后进行比较,判断
表中是否存在,然后归类为updateList和insertList,然后在分批次处理
<select id="queryIsExist" parameterType="java.util.List"
resultType="ExistDepositDto">
select column1 as column1 , column2 as column2 from
table_name where column3 in
<foreach collection="list" index="index" item="item" open="("
separator="," close=")">#{item.column3}</foreach>
and column4 in
<foreach collection="list" index="index" item="item" open="("
separator="," close=")">#{item.column4 }
</foreach> </select>
这里的如此是list,list里面是javabean对象,其实可以使用set结合的方式,这样可以去重,但是没有找到
正确的拼接方式,就使用list<Object>作为入参的方式,
在数据库中预编译后的效果是:
select column1, column2,column3 from table_name where
column1 in ('','','') and column2 in('','','') and column3 in('','','')
这样取出来的范围比较大,然后在拿数据与取出来的数据进行比较,相同说明表里存在,不同说明不存在。
mybatis中批量插入以及更新的更多相关文章
- mybatis中批量插入的两种方式(高效插入)
MyBatis简介 MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装.MyBatis可以使用 ...
- 161102、MyBatis中批量插入
方法一: <insert id="insertbatch" parameterType="java.util.List"> <selectKe ...
- 【mybatis】mybatis中批量插入 批量更新 batch 进行insert 和 update,或者切割LIst进行批量操作
================================================================== 分别展示 mybatis 批量新增 和 批量更新 的操作: ...
- MyBatis动态批量插入、更新Mysql数据库的通用实现方案
一.业务背景 由于需要从A数据库提取大量数据同步到B系统,采用了tomikos+jta进行分布式事务管理,先将系统数据源切换到数据提供方,将需要同步的数据查询出来,然后再将系统数据源切换到数据接收方, ...
- MyBatis中批量插入数据对插入记录数的限制
<基于Mybatis框架的批量数据插入的性能问题的探讨>(作者:魏静敏 刘欢杰 来源:<计算机光盘软件与应用> 2013 年第 19 期)中提到批量插入的记录数不能超过1000 ...
- sql server中批量插入与更新两种解决方案分享(存储过程)
转自http://www.shangxueba.com/jingyan/1940447.html 1.游标方式 SET ANSI_NULLS ONGOSET QUOTED_IDENTIFIER ONG ...
- sql server中批量插入与更新两种解决方案分享
若只是需要大批量插入数据使用bcp是最好的,若同时需要插入.删除.更新建议使用SqlDataAdapter我测试过有很高的效率,一般情况下这两种就满足需求了 bcp方式 复制代码 代码如下: /// ...
- mybatis中批量插入数据
<insert id="insertIntoDevAct" parameterType="java.util.List"><foreach c ...
- Mybatis中实现oracle的批量插入、更新
oracle 实现在Mybatis中批量插入,下面测试可以使用,在批量插入中不能使用insert 标签,只能使用select标签进行批量插入,否则会提示错误 ### Cause: java.sql.S ...
随机推荐
- bzoj 4128 矩阵求逆
/************************************************************** Problem: 4128 User: idy002 Language: ...
- LOJ6070 基因 分块+回文自动机
这个在翁文涛的论文里有讲到 大概的就是一个子串的回文自动机是原串回文自动机的子图 于是每隔$\sqrt n$重新跑一个$(k \times \sqrt n,n)$的回文自动机 记录回文串个数和位置 并 ...
- 自己对war包解压的误区
ss.war解压后不会出现ss而是startup.sh运行后会出现
- unity下3d模型的透明处理
1.若只是改变模型的透明度:点击模型,在Inspector中可以看到很多模型的属性.找到要改变透明度的地方,更改shader渲染的方式选中Transparent(透明度)的diffuse,之后调节Ma ...
- MyEclipse启动时 弹出提醒框
1. MyEclipse has detected that less than 5% of the 31MB of PS Survivor Space (Heap memory) space rem ...
- Linux TC(Traffic Control)框架原理解析
近日的工作多多少少和Linux的流控有点关系.自打几年前知道有TC这么一个玩意儿而且多多少少理解了它的原理之后,我就没有再动过它,由于我不喜欢TC命令行,实在是太繁琐了.iptables命令行也比較繁 ...
- Knockout.Js官网学习(Mapping插件)
前言 Knockout设计成允许你使用任何JavaScript对象作为view model.必须view model的一些属性是observable的,你可以使用KO绑定他们到你的UI元素上,当这些o ...
- 版本控制-GitHub
前面几篇文章,我们介绍了Git的基本用法及Git服务器的搭建,本篇文章来学习一下如何使用GitHub.GitHub是开源的代码库以及版本控制库,是目前使用网络上使用最为广泛的服务,GitHub可以托管 ...
- shell变量的截取总结
#shell变量的截取 Shell中的${}.##和%% 假设定义了一个变量为: 代码如下: file=/dir1/dir2/dir3/my.file.txt //变量的删除 可以用${ }分别替换得 ...
- 【C#】C#对电子邮件的收发操作
目录结构: contents structure [+] 简介 发送邮件 读取邮件 1.简介 邮件传输常用的协议有,SMTP.POP3.IMAP4.他们都属于TCP/IP协议,默认状态下分别通过TCP ...