mybatis批量增、删、改(更新)操作oracle和mysql批量写法小记

摘要:
前言:自从使用mybatis以来,已经有好几年了。批量添加和删除mybatis也相对简单。只有批量更新是一个特殊的漏洞。特此记录。
前言:用mybatis也好几年了,mybatis在批量的增删操作也写起来也是比较简单的,只有批量更新这一块是特别坑,特此记录。
注:本文主要用来记录oracle和mysql数据库在使用mybatis的情况下批量增、删、改(更新)的常用写法
一、批量插入

1、oracle写法:

<insert parameterType="cc.eguid.Zaixcs">
        insert into b_dbgl_zaixcs (
zaixcsid, mingc, pingsyid, xinxid, fujid, 
jieg, pingfjg, pingf, zhuangt, shic,
startriq, endriq, pingfriq, datr, pingfr, beiz
)
        <foreach collection="list" item="item" index="index" separator="union all">
            (select #{item.zaixcsid,jdbcType=VARCHAR}, #{item.mingc,jdbcType=VARCHAR},
#{item.pingsyid,jdbcType=VARCHAR},#{item.xinxid,jdbcType=VARCHAR}, 
#{item.fujid,jdbcType=VARCHAR}, #{item.jieg,jdbcType=VARCHAR},
#{item.pingfjg,jdbcType=VARCHAR}, #{item.pingf,jdbcType=DECIMAL},
#{item.zhuangt,jdbcType=VARCHAR},#{item.shic,jdbcType=DECIMAL}, 
#{item.startriq,jdbcType=TIMESTAMP}, #{item.endriq,jdbcType=TIMESTAMP},
#{item.pingfriq,jdbcType=TIMESTAMP}, #{item.datr,jdbcType=VARCHAR},
#{item.pingfr,jdbcType=VARCHAR},#{item.beiz,jdbcType=VARCHAR}
             from dual)
        </foreach>
    </insert>

2、mysql写法:

 insert into B_SYS_FUJ (FUJ_ID, RELATE_ID, RELATE_TABLE_NAME, FUJ_LX, WENJLX,WENJM, FJMC, FUJ_PATH,CREATE_USER_ID, CREATE_USER, CREATE_TIME, RELATE_TABLE_ZIDUAN,CONTENTTYPE,ZHUANGT)
values
 <foreach collection="list" item="item" index="index" separator="," >   
(#{item.fujId,jdbcType=VARCHAR}, 
 #{item.relateId,jdbcType=VARCHAR},
 #{item.relateTableName,jdbcType=VARCHAR},
 #{item.fujLx,jdbcType=VARCHAR}, 
 #{item.wenjlx,jdbcType=VARCHAR},
 #{item.wenjm,jdbcType=VARCHAR},
 #{item.fjmc,jdbcType=VARCHAR},
 #{item.fujPath,jdbcType=VARCHAR},
 #{item.createUserId,jdbcType=VARCHAR},
 #{item.createUser,jdbcType=VARCHAR},
 #{item.createTime,jdbcType=TIMESTAMP},
 #{item.relateTableZiduan,jdbcType=VARCHAR},
 #{item.contentType,jdbcType=VARCHAR},
 #{item.zhuangt,jdbcType=VARCHAR}
 )
 </foreach> 

二、批量删除
注:批量删除操作oracle与mysql写法相同
当collection=”array“时,表名参数为数组;
当collection=”list“时,表名参数为集合;

1、删除数组数组

  <delete parameterType="int">
        delete from emp where empno in
        <foreach item="empnoItem" collection="array" open="(" separator="," close=")">
            #{empnoItem}
        </foreach>
    </delete>

2、删除list列表数据

 <delete parameterType="int">
        delete from emp where empno in
        <foreach item="item" collection="list" open="(" separator="," close=")">
            #{item}
        </foreach>
    </delete>

3、删除查询到的数据

<delete parameterType="string">
delete from QIYDFBZ where BIAOZBID in(
SELECT biaozbid
FROM
B_DBGL_QIYDFBZ 
CONNECT BY PRIOR FENXID = FUJID start WITH BIAOZBID = #{biaozbid,jdbcType=VARCHAR} )
</delete>

三、批量更新

1、oracle写法:

注:这样的写法虽然可以更新,但是更新操作返回值是-1,并没有返回更新的行数
<update parameterType="com.itssky.aqjg.entity.dbgl.Zaixcs">
begin
 <foreach collection="list" item="item" index="index" separator=";">
update B_DBGL_ZAIXCS
<trim prefix="set" suffixOverrides=",">
<if test="item.mingc != null and item.mingc !=''">
MINGC= #{item.mingc,jdbcType=VARCHAR},
</if>
<if test="item.pingf != null and item.pingf !=''">
PINGF=#{item.pingf,jdbcType=DECIMAL},
</if>
<if test="item.zhuangt != null and item.zhuangt !=''">
ZHUANGT=#{item.zhuangt,jdbcType=VARCHAR},
</if>
<if test="item.shic != null and item.shic !=''">
SHIC=#{item.shic,jdbcType=DECIMAL},
</if>
<if test="item.startriq != null and item.startriq !=''">
STARTRIQ=#{item.startriq,jdbcType=TIMESTAMP},
</if>
</trim>
where ZAIXCSID = #{item.zaixcsid,jdbcType=VARCHAR}
</foreach>
;end;
</update>

2、mysql写法:

注:mysql数据库连接需要加上&allowMultiQueries=true
例如:jdbc:mysql://192.168.1.236:3306/test?useUnicode=true&amp;characterEncoding=UTF-8&allowMultiQueries=true

<update  parameterType="java.util.List">
<foreach collection="list" item="item" index="index" open="" close="" separator=";">
update ZAIXCS
<trim prefix="set" suffixOverrides=",">
<if test="item.mingc != null and item.mingc !=''">
MINGC= #{item.mingc,jdbcType=VARCHAR},
</if>
<if test="item.shic != null and item.shic !=''">
SHIC=#{item.shic,jdbcType=DECIMAL},
</if>
<if test="item.startriq != null and item.startriq !=''">
STARTRIQ=#{item.startriq,jdbcType=TIMESTAMP},
</if>
<if test="item.beiz != null and item.beiz !=''">
BEIZ=#{item.beiz,jdbcType=VARCHAR},
</if>
</trim>
where ZAIXCSID = #{item.zaixcsid,jdbcType=VARCHAR}
</foreach>  
    </update>







免责声明:文章转载自《mybatis批量增、删、改(更新)操作oracle和mysql批量写法小记》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Centos6.5硬盘故障修复CentOS7 安装 OpenCV 的一些问题解决办法下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Oracle --&amp;gt; Vertica 数据类型转换规则

需求:在Vertica数据库上建表,表结构来源于原Oracle数据库,故需要转换成Vertica数据库库表结构。   实际转换操作需要评估源库用到的所有数据类型和数据本身特性。 下面是总结的某场景下的替换规则,仅供参考。 1.时间类型: DATE   =>   TIMESTAMP   2.数字类型:NUMBER(   =>   NUMERIC...

MyBatis中的mapper中的&amp;lt;sql/&amp;gt;标签介绍

mapper中的标签的详细定义如图: insert、update、delete、select这四个标签在mybatis操作与配置文件中以说到,这里就不说了。 1、sql标签: sql标签是mapper节点的标签。 sql标签的属性:  id属性  databaseId属性  lang属性sql标签的子标签:   include、trim、where、se...

mysql 5.7安装教程

一、mysql下载地址  https://downloads.mysql.com/archives/installer/ 说在前面的话   我为什么已经尝试和使用过同类型产品的很多MySQL版本,还要书写这篇博客呢?基于mysql-installer-web-community-5.7.18.1.msi   是因为,最近在做数据分析相关的研究工作。   ...

mybatis源码分析(5)-----拦截器的实现原理(动态代理+责任链)

写在前面   MyBatsi 的拦截器模式是基于代理的代理模式。并且myBatis 的插件开发也是以拦截器的形式集成到myBatis 当中。   MyBatis 的拦截器已经插件是在org.apache.ibatis.plugin包下面。   MyBatis拦截器可以拦截的类,Executor(执行器),ParameterHandler(参数处理器),R...

mysql常用的聚合函数

GROUP BY(聚合)函数本章论述了用于一组数值操作的 group (集合)函数。除非另作说明, group 函数会忽略 NULL 值。 假如你在一个不包含 ROUP BY子句的语句中使用一个 group函数 ,它相当于对所有行进行分组。 AVG([DISTINCT] expr) 返回expr 的平均值。 DISTINCT 选项可用于返回 expr的不同...

Oracle学习笔记—归档模式

什么是归档模式 Oracle数据库有联机重做日志,这个日志是记录对数据库所做的修改,比如插入,删除,更新数据等,对这些操作都会记录在联机重做日志里。一般数据库至少要有2个联机重做日志组。当一个联机重做日志组被写满的时候,就会发生日志切换,这时联机重做日志组2成为当前使用的日志,当联机重做日志组2写满的时候,又会发生日志切换,去写联机重做日志组1,就这样反复...