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 ...
随机推荐
- Sublime text 入门学习资源篇及其基本使用方法
Sublime text 学习资源篇 史上最性感的编辑器-sublimetext,插件, 学习资源 官网 http://www.sublimetext.com/ 插件 https://packagec ...
- webpack - HtmlWebpackPlugin理解
该插件的两个主要作用: 为html文件中引入的外部资源如script.link动态添加每次compile后的hash,防止引用缓存的外部文件问题 可以生成创建html入口文件,比如单页面可以生成一个h ...
- springboot2.X 集成redis+消息发布订阅
需求场景:分布式项目中,每个子项目有各自的 user 数据库, 在综合管理系统中存放这所有用户信息, 为了保持综合管理系统用户的完整性, 子系统添加用户后将用户信息以json格式保存至redis,然后 ...
- jquery预加载的几种方式
实际编写前端页面时,有时候希望一打开某个页面就加载一些方法.下面是4种预加载方法. ①页面加载完之前执行,与嵌入的js加载方式一样(写jquery插件的时候使用) (function ($) { al ...
- “正在注册字体”问题解决
在win7下安装老软件,卡在"正在注册字体"了,检查发现是ocx注册有问题. 重写一个ocx注册的批处理就好了. 如: regsvr32 "C:\Program File ...
- MSVC 12: compiler error in boost/type_traits/common_type.hpp
来自: https://svn.boost.org/trac10/ticket/11885 MSVC 12: compiler error in boost/type_traits/common_ty ...
- windows多线程同步--临界区
推荐参考博客:秒杀多线程第五篇 经典线程同步 关键段CS 关于临界区的观念,一般操作系统书上面都有. 适用范围:它只能同步一个进程中的线程,不能跨进程同步.一般用它来做单个进程内的代码快同步,效率 ...
- MDX Cookbook 03 - MDX 查询中负数,零和空值 NULL 的格式化处理
FORMAT_STRING 属性在处理计算成员(通常是度量值成员)的时候会经常使用到,比如指定标准 Standard, 货币 Currency 或者 Percent 百分比格式.除此之外,还可以自定义 ...
- ZOJ 3827 Information Entropy 水
水 Information Entropy Time Limit: 2 Seconds Memory Limit: 65536 KB Special Judge Informati ...
- Matlab如何连接Oracle数据库及基本操作
语言和语法都是相通的,了解Oracle的连接和处理,对于其他的数据库也是类似的. 一 通过ODBC实现到oracle的连接 )控制面板->管理工具->ODBC数据源->在系统DSN中 ...