前言:用mybatis也好几年了,mybatis在批量的增删操作也写起来也是比较简单的,只有批量更新这一块是特别坑,特此记录。

注:本文主要用来记录oracle和mysql数据库在使用mybatis的情况下批量增、删、改(更新)的常用写法

一、批量插入

1、oracle写法:

<insert id="insertZaixcsList" 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 id="batchDeleteEmpArr" parameterType="int">

        delete from emp where empno in

        <foreach item="empnoItem" collection="array" open="(" separator="," close=")">

            #{empnoItem}

        </foreach>

    </delete>

2、删除list列表数据

<delete id="batchDeleteEmpList" parameterType="int">

        delete from emp where empno in

        <foreach item="item" collection="list" open="(" separator="," close=")">

            #{item}

        </foreach>

    </delete>

3、删除查询到的数据

<delete id="deleteByParent" 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 id="updateBatch" 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 id="batchUpdate"  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批量写法小记的更多相关文章

  1. 怎样从C#中打开数据库并进行 增 删 改 查 操作

    首先 在C#中引用数据库的操作! (因为我们用的是SQLserver数据库,所以是SqlClient) using System.Data.SqlClient; 1:要实现对数据库的操作,我们必须先登 ...

  2. MVC EF 增 删 改 查

    using System;using System.Collections.Generic;using System.Linq;using System.Web;//using System.Data ...

  3. 好用的SQL TVP~~独家赠送[增-删-改-查]的例子

    以前总是追求新东西,发现基础才是最重要的,今年主要的目标是精通SQL查询和SQL性能优化.  本系列主要是针对T-SQL的总结. [T-SQL基础]01.单表查询-几道sql查询题 [T-SQL基础] ...

  4. 第18课-数据库开发及ado.net 连接数据库.增.删.改向表中插入数据并且返回自动编号.SQLDataReade读取数据

    第18课-数据库开发及ado.net 连接数据库.增.删.改向表中插入数据并且返回自动编号.SQLDataReade读取数据 ADO.NET 为什么要学习? 我们要搭建一个平台(Web/Winform ...

  5. C# ADO.NET (sql语句连接方式)(增,删,改)

    using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.We ...

  6. iOS sqlite3 的基本使用(增 删 改 查)

    iOS sqlite3 的基本使用(增 删 改 查) 这篇博客不会讲述太多sql语言,目的重在实现sqlite3的一些基本操作. 例:增 删 改 查 如果想了解更多的sql语言可以利用强大的互联网. ...

  7. ADO.NET 增 删 改 查

    ADO.NET:(数据访问技术)就是将C#和MSSQL连接起来的一个纽带 可以通过ADO.NET将内存中的临时数据写入到数据库中 也可以将数据库中的数据提取到内存中供程序调用 ADO.NET所有数据访 ...

  8. django ajax增 删 改 查

    具于django ajax实现增 删 改 查功能 代码示例: 代码: urls.py from django.conf.urls import url from django.contrib impo ...

  9. StringBuilder修改字符串内容,增,删,改,插

    package seday01;/** * 字符串不变对象特性只针对字符串重用,并没有考虑修改操作的性能.因此String不适合频繁修改内容. * 若有频繁修改操作,使用StringBuilder来完 ...

随机推荐

  1. 你想要的都在这里,ASP.NET Core MVC四种枚举绑定方式

    前言 本节我们来讲讲在ASP.NET Core MVC又为我们提供了哪些方便,之前我们探讨过在ASP.NET MVC中下拉框绑定方式,这节我们来再来重点看看枚举绑定的方式,充分实现你所能想到的场景,满 ...

  2. bootstrap快速入门笔记(二)-栅格系统,响应式类

    一,栅格系统大致有以下: 1,行row必须包含在 .container (固定宽度)或 .container-fluid (100% 宽度)中,一行有12列 2.“列(column)”在水平方向创建一 ...

  3. 好久没发贴了,最近捣鼓了个基于node的图片压缩小网站解析。

    看了下,距离上次发帖都是去年10月份的事,忙于工作的我很少跑博客园里面来玩了. 做这个小网站的初衷是 https://tinypng.com/ 这个网站有时候访问很慢,然后自己去研究了下图片压缩. 网 ...

  4. FrameBuffer系列 之 简单编程

    一.Linux的帧缓冲设备 帧缓冲(framebuffer)是 Linux为显示设备提供的一个接口,把显存抽象后的一种设备,他允许上层应用程序在图形模式下直接对显示缓冲区进行读写操作.这种操作是抽象的 ...

  5. fstream 学习

    #include <fstream> 引用:http://blog.csdn.net/qiang60125/article/details/5949750(fstream 常用方法详解) ...

  6. mysql数据库面试总结

    数据库优化 建表优化 1)数据库范式 l 第一范式(1NF):强调的是列的原子性,即列不能够再分成其他几列. 如电话列可进行拆分---家庭电话.公司电话 l 第二范式(2NF):首先是 1NF,另外包 ...

  7. 使用CSS和JQuery实现表格单元格内容超出时部分隐藏,隐藏部分以...显示

    1.使用CSS实现,给此单元格添加一个Class: width:130px; display:block; overflow:hidden; word-break:keep-all; white-sp ...

  8. NancyFx 2.0的开源框架的使用-Forms

    同样的像前面2篇博文一样,每个项目的开始基本都是建个空的Web项目 在NuGet库中安装以下几个NuGet包 Nancy Nancy.Authentication.Forms Nancy.Hostin ...

  9. PL/SQL + Oracle客户端 配置记录

    oracle一直都没怎么用. oracle pl/sql也是在别人帮助下完成配置. 这次电脑重装后,自己搞定总结了下怎么配置. 1.下载Oracle 客户端. 安装的版本是win64_11gR2_cl ...

  10. Linux下Oracle的启动和关闭

    默认情况下,Linux下Oracle是不会随系统自动启动的. 1.启动Oracle 1.以oracle账户登录到CentOS,或者切换到oracle用户权限 # su – oracle  2.然后输入 ...