Mybatis的批量更新
Mybatis的批量插入这里有http://ljhzzyx.blog.163.com/blog/static/38380312201353536375/。目前想批量更新,如果update的值是相同的话,很简单,组织
update table set column='...' where id in (1,2,3)l
这样的sql就可以了。Mybatis中这样写就行
<update id="batchUpdateStudentWithMap" parameterType="java.util.Map" >
UPDATE STUDENT SET name = #{name} WHERE id IN
<foreach collection="idList" index="index" item="item" open="(" separator="," close=")">
#{item}
</foreach>
</update>
但是这样的需求很少,一般是有个集合,每个元素中的值是不一样的,然后需要一次性更新。一般的处理方式是使用for循环。这样的效率较低,当数据量大时,期望有种一次性插入的操作。如果使用的是mysql,有
insert into table (aa,bb,cc) values(xx,xx,xx),(oo,oo,oo) on duplicate key update
和
replace into table (aa,bb,cc) values(xxx,xxx,xxx),(ooo,ooo,ooo),(ccc,ccc,ccc)
两种方式可以处理。
当前数据库是oracle,可以使用case when来拼成一长串sql处理
UPDATE mytable
SET myfield = CASE id
WHEN 1 THEN 'value'
WHEN 2 THEN 'value'
WHEN 3 THEN 'value'
END
WHERE id IN (1,2,3)
实际上这种方式对于mysql也有效。
最开始的时候,想着写一系列并列的更新语句就可以了
<update id="updateBatch" parameterType="java.util.List">
<foreach collection="list" item="item" index="index" separator=";"
open="" close="">
update REGION_CODE set
CODE=#{item.Code,jdbcType=VARCHAR},
NAME=#{item.Name,jdbcType=VARCHAR}
where ID = #{item.id,jdbcType=DECIMAL}
</foreach>
</update>
这样直接报错,因为Mybatis映射文件中的sql语句不允许 ; 符号。按照可行的case when处理方式,Mybatis映射文件书写方式如下:
<update id="updateBatch" parameterType="java.util.List">
update REGION_CODE set
CODE=
<foreach collection="list" item="item" index="index" separator=" " open="case ID" close="end">
when #{item.id,jdbcType=DECIMAL} then #{item.Code,jdbcType=VARCHAR}
</foreach>
,NAME=
<foreach collection="list" item="item" index="index" separator=" " open="case ID" close="end">
when #{item.id,jdbcType=DECIMAL} then #{item.Name,jdbcType=VARCHAR}
</foreach>
where ID in
<foreach collection="list" index="index" item="item" separator="," open="(" close=")">
#{item.id,jdbcType=DECIMAL}
</foreach>
</update>
至此,批量更新功能完成。
总结:批量更新的时候,用;号结束不行。
http://ljhzzyx.blog.163.com/blog/static/38380312201482434852742/
相关推荐
Mybatis批量foreach merge into的用法,这是介绍Mybatis批量foreach merge into的用法的文档
mybatis批量添加的时候报错总结报错 parameter'_frch_item_0 not found
只提供代码,自己去下载相关jar包谢谢只提供代码,自己去下载相关jar包谢谢只提供代码,自己去下载相关jar包谢谢只提供代码,自己去下载相关jar包谢谢只提供代码,自己去下载相关jar包谢谢
主要介绍了Mybatis批量更新三种方式的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
mybatis 框架批量增删改代码 示例 含java与xml
MyBatis防止批量更新1
主要介绍了Mybatis批量更新报错的问题及解决办法,包括mybatis批量更新的两种方式,需要的的朋友参考下
MyBatis动态SQL,MyBatis批量插入(Oracle数据库)[收集].pdf
Mybatis Plus 自定义批量插入或批量更新(根据唯一索引)
主要介绍了详解mybatis 批量更新数据两种方法效率对比,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
Java实现Mybatis将数据批量插入到Oracle中
mybatis 批量插入 嵌套select
mybatis批量添加数据的方法1
MyBatis批量插入,效率经测试,1000条数据,批量插入和单条插入,执行效率至少快一倍,送上源码,供参考学习
使用方法请看博客https://blog.csdn.net/bandaotixiruiqiang/article/details/72478361#comments_12931827
Mybatis与JDBC批量插入MySQL数据库性能测试,资源包含文档、代码和数据库。
本文给大家分享MyBatis批量插入(insert)数据操作知识,非常不错,具有参考借鉴价值,感兴趣的朋友一起学习吧
测试在单元测试中
使用方法请看博客 https://blog.csdn.net/bandaotixiruiqiang/article/details/72478361#comments_12931827
一、引言Mybatis可以直接传入一个集合,通过标签将集合中的数据遍历出来实现批量新增不同的数据库批量新增有区别,如下实现两种方式的批量新增二、实现2.1映射文