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 ...
随机推荐
- System.currentTimeMillis() uptimeMillis elapsedRealtime 区别
System.currentTimeMillis() 系统时间,也就是日期时间,可以被系统设置修改,然后值就会发生跳变. uptimeMillis 自开机后,经过的时间,不包括深度睡眠的时间 ela ...
- Android摘抄总结
著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处.作者:葛小葛链接:http://www.zhihu.com/question/27069588/answer/38417756来源: ...
- 【11.8校内测试】【倒计时2天】【状压DP】【随机化?/暴力小模拟】
Solution 数据范围疯狂暗示状压,可是一开始发现状态特别难受. 将每一层的奇偶性状压,预处理所有状态的奇偶性.每一层的输入代表的其实可以是下一层某个点可以被从这一层哪些点转移到. 所以枚举每个状 ...
- C++学习笔记44:继承与派生
类的组合,类的继承 类的组合(汽车类,轮子类,此时可以把轮子类组合到汽车类:) 类的继承(交通工具类,汽车类,此时汽车类可以派生自交通工具类:) 组合:常用描述has a.. 继承:常用描述is a ...
- CentOS下bond网卡聚合与网桥结合
需求:服务器配置bond多网卡聚合,然后KVM需要使用到网桥,那么需要做到网桥绑定到bond网卡上. 实现核心: 1.bond配置参考:https://www.cnblogs.com/EasonJim ...
- C、C++、C#、Java、php、python语言的内在特性及区别
C.C++.C#.Java.PHP.Python语言的内在特性及区别: C语言,它既有高级语言的特点,又具有汇编语言的特点,它是结构式语言.C语言应用指针:可以直接进行靠近硬件的操作,但是C的指针操作 ...
- http://blog.csdn.net/wzzvictory/article/details/16994913
原文地址:http://blog.csdn.net/wzzvictory/article/details/16994913 一.什么是instancetype instancetype是cla ...
- Android Studio下加入百度地图的使用 (一)——环境搭建
最近有学生要做毕业设计,会使用到定位及地图信息的功能,特此研究了一下,供大家参考,百度定位SDK已经更新到了5.0,地图SDK已经更新到了3.5,但是在AndroidStudio中使用还是存在一些不稳 ...
- WebSocket——为Web应用带来桌面应用般的灵活性【转载+整理】
原文地址 本文内容 WebSocket 简介 浏览器端的 JavaScript 实现 Java 端的 WebSocket 实现 对 Web 应用的重新思考 使用WebSocket时所需注意的要点 We ...
- How to configure ESXi to boot via Software iSCSI?
http://blogs.vmware.com/vsphere/2011/11/how-to-configure-esxi-to-boot-via-software-iscsi.html Introd ...