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 ...
随机推荐
- 数据结构+算法面试100题~~~摘自CSDN
数据结构+算法面试100题~~~摘自CSDN,作者July 1.把二元查找树转变成排序的双向链表(树) 题目:输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表.要求不能创建任何新的结点,只调 ...
- iOS web view 与 js 交互
移动应用中许多复杂的且经常改动的页面会使用H5进行代替native,这里就会使用到js和webview的交互 iOS里面,UIWebView提供了方法stringByEvaluatingJavaScr ...
- javascript中用正则表达式判断是否为汉字及常用的判断
a.判断是否为汉字: 1.汉字为任意长度时: var han = /^[\u4e00-\u9fa5]+$/; 例如: var han = /^[\u4e00-\u9fa5]+$/; var vals= ...
- Qt打包成单独可执行的exe文件
1.将图标newIco.ico复制到工程目录下. 2.在工程目录下新建空白txt文档,添加以下内容. IDI_ICON1 ICON DISCARDABLE "newIco.ico" ...
- ROS知识(24)——ros::spin()和spinOnce的含义及其区别
1.ros::spin()和spinOnce含义 如果在节点中如果订阅了话题,那么就必须要调用ros::sping()或者ros::spinOnce()函数去处理话题绑定的回调函数,否则该节点将不会调 ...
- JNI编程实现(Windows)
上一篇介绍了Linux平台的JNI编程方法,Windows平台的JNI本地调用基本类似,区别就是制作的动态库不同,Linux平台是*.so,Windows平台是*.dll.其中,Windows平台的函 ...
- 动态ip、静态ip、pppoe拨号的区别
pppoe拨号 pppoe拨号上网,又叫做ADSL拨号上网.宽带拨号上网.指现在有很多我的E家用户,送的无线猫,阉割了PPPOE拨号功能,必须要从电脑上拨号才能上网.还有大街上的WIFI热点也很多,如 ...
- VMWare Station 问题汇总
1.开机黑屏,不启动系统 解决方法: 命令行窗口cmd—输入下面代码,然后重启计算机. netsh winsock reset 2.提示磁盘被锁无法打开 解决方法: 虚拟机目录下面的.lck文件都删了
- JavaScript – Convert Image to Base64 String
From: https://bytenota.com/javascript-convert-image-to-base64-string/ his post shows you two approac ...
- :app:compileDebugJavaWithJavac
org.gradle.initialization.ReportedException: org.gradle.internal.exceptions.LocationAwareException: ...