当前位置: 首页 > news >正文

mybatis中批量插入以及更新

1:批量插入

批量插入就是在预编译的时候,将代码进行拼接,然后在数据库执行

 1 <insert id="batchInsert" parameterType="java.util.List">
 2         insert into table_name
 3         (column1,column2,column3,column4,column5,column6,column7,
 4         column8,column9,column10,column11,column12)
 5         values
 6         <foreach collection="list" item="item" index="index"
 7             separator=",">
 8             (#{item.column1},#{item.column2},#{item.column3},#{item.column4},
 9             #{item.column5},#{item.column6},#{item.column7},#{item.column8},#{item.column9},
10             #{item.column10},#{item.column11},#{item.column12} )
11         </foreach>
12     </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,然后在分批次处理

 1 <select id="queryIsExist" parameterType="java.util.List"
 2         resultType="ExistDepositDto">
 3         select column1 as column1 , column2 as column2   from
 4         table_name where column3 in
 5         <foreach collection="list" index="index" item="item" open="("
 6             separator="," close=")">#{item.column3}</foreach>
 7         and column4 in
 8         <foreach collection="list" index="index" item="item" open="("
 9             separator="," close=")">#{item.column4 }
10             </foreach>
11          
12     </select>            

这里的如此是list,list里面是javabean对象,其实可以使用set结合的方式,这样可以去重,但是没有找到

正确的拼接方式,就使用list<Object>作为入参的方式,

在数据库中预编译后的效果是:

select column1, column2,column3 from table_name where

column1 in ('','','') and column2 in('','','') and column3 in('','','')

这样取出来的范围比较大,然后在拿数据与取出来的数据进行比较,相同说明表里存在,不同说明不存在。

转载于:https://www.cnblogs.com/warrior4236/p/7018980.html

相关文章:

  • robots.txt的语法和写法详解
  • STL 标准模板库
  • Servlet 详解
  • I/O流
  • 菜鸟学习Redis(二)——Redis集群
  • 行为模式--代理Proxy模式(Java)
  • python 类的特殊成员
  • 修改敏感字
  • Java内部类
  • $.ajax中的eval及dataType
  • https 安全验证问题
  • 平安科技移动开发二队技术周报(第八期)
  • ORA-00054: resource busy and acquire with NOWAIT specified or timeout expired
  • codevs 2074 营救 WW
  • 范式1F2F3F
  • JS 中的深拷贝与浅拷贝
  • -------------------- 第二讲-------- 第一节------在此给出链表的基本操作
  • [ JavaScript ] 数据结构与算法 —— 链表
  • Android 控件背景颜色处理
  • Intervention/image 图片处理扩展包的安装和使用
  • Javascript编码规范
  • JS+CSS实现数字滚动
  • Octave 入门
  • PV统计优化设计
  • python大佬养成计划----difflib模块
  • Redis中的lru算法实现
  • SegmentFault 2015 Top Rank
  • storm drpc实例
  • Sublime Text 2/3 绑定Eclipse快捷键
  • vue+element后台管理系统,从后端获取路由表,并正常渲染
  • 百度小程序遇到的问题
  • 诡异!React stopPropagation失灵
  • 理清楚Vue的结构
  • 我与Jetbrains的这些年
  • 应用生命周期终极 DevOps 工具包
  • 在weex里面使用chart图表
  • MPAndroidChart 教程:Y轴 YAxis
  • PostgreSQL之连接数修改
  • ​【原创】基于SSM的酒店预约管理系统(酒店管理系统毕业设计)
  • ​LeetCode解法汇总2583. 二叉树中的第 K 大层和
  • ​低代码平台的核心价值与优势
  • (10)ATF MMU转换表
  • (27)4.8 习题课
  • (Matlab)使用竞争神经网络实现数据聚类
  • (附源码)springboot宠物医疗服务网站 毕业设计688413
  • (附源码)基于SSM多源异构数据关联技术构建智能校园-计算机毕设 64366
  • (转)Android中使用ormlite实现持久化(一)--HelloOrmLite
  • (转)C#调用WebService 基础
  • (转)JAVA中的堆栈
  • ****** 二十三 ******、软设笔记【数据库】-数据操作-常用关系操作、关系运算
  • ***linux下安装xampp,XAMPP目录结构(阿里云安装xampp)
  • .L0CK3D来袭:如何保护您的数据免受致命攻击
  • .NET 4.0中使用内存映射文件实现进程通讯
  • .NET/C# 判断某个类是否是泛型类型或泛型接口的子类型
  • .Net程序帮助文档制作