Mybatis 批量操作

批量插入

批量操作使用 foreach 标签插入元素是毫无疑问的,但是不同的数据库对于批量插入的语法可能存在差异。

单条插入的语法 Oracle 和MySQL是一致的,但是Oracle的多条插入语句明显和其他数据库不同。

INSERT INTO tableName(column1,column2....) values('v1','v2'...);

当然某些情况下,我们需要从一个表复制数据,然后把数据插入到一个已存在的表中。

  1. 我们可以从一个表中复制所有的列插入到另一个已存在的表中:

    INSERT INTO table2 SELECT * FROM table1;
    
  2. 只复制希望的列插入到另一个已存在的表中:

    INSERT INTO table2 (column_name(s))
    SELECT column_name(s) FROM table1;
    
1. Oracle
Oracle 批量插入语法

语法一:

 insert into <tableName>[(<table_column1>,<table_column2>...)] 
	 select [<column_value1>,<column_value2>...] from dual
     [ union [ALL] select [<column_value1>,<column_value2>...] from dual ]...

语法二:

insert all
into <tableName>[(<table_column1>,<table_column2>...)] values([<column_value1>,<column_value2>...]) 
[into <tableName>[(<table_column1>,<table_column2>...)] values([<column_value1>,<column_value2>...])]...
select 1 from dual;

引用博客: ORACLE 批量插入(Insert)详解

Mybatis 批量插入

知道在Oracle 批量插入的语法后,转化为对应的mybatis语法即可。

java 实体类

//lombok 自动生成getter/setter 方法
@Data
public User{
	private String userName;
	private String userCode;
	private String email;
}

Mapper

@Mapper
public UserMapper{	
	int insertUsers(List<User> users);
}

List<User> users  = new ArrayList<>();
// 向users 添加数据 
int inserts = userMapper.insertUsers(users);
方式1

使用 INSERT ALL

<insert id="insertUsers">
	INSERT ALL
	<foreach collection="users" item="user">
		INTO TEST.TEST_USER
		(USER_NAME,USER_CODE,USER_EMAIL)
		VALUES
		(#{user.userName},#{user.userCode},#{user.email})
	</foreach>
	SELECT 1 FROM DUAL
</insert>
方式2

没有 values 、没有 select 1 from dual ,同时separator="UNION ALL"

<insert id="insertUsers">
	INSERT INTO TEST.TEST_USER
	(USER_NAME,USER_CODE,USER_EMAIL)
	<foreach collection="users" item="user" separator="UNION ALL">
		SELECT #{user.userName},#{user.userCode},#{user.email} FROM DUAL
	</foreach>
</insert>
方式3
<insert id="insertUsers">
  BEGIN  
    <foreach collection="list" item="item" index="index" separator="">  
        insert into TEST.TEST_USER
        (USER_NAME,USER_CODE,USER_EMAIL) 
        VALUES  
        (#{user.userName},#{user.userCode},#{user.email});  
    </foreach>  
    COMMIT;  
    END;  
</insert>
2. Mysql
<insert id="insertUsers">
	INSERT INTO user(USER_NAME,USER_CODE,USER_EMAIL) VALUES
	<foreach collection="users" item="user" seperator=",">
		(#{user.userName},#{user.userCode},#{user.email})
	</foreach>
</insert>

SQLserver的批量插入和mysql 一致

批量删除

批量删除语句差异较小

DELETE FROM USER WHERE CODE IN 
<foreach collection="users" item="user" open="(" close=")" seperator=",">
	#{user.userCode}
</foreach>

批量更新

Oracle
<update id="updateUsers" >
   <foreach collection="users" item="user" index="index" open="begin" close=";end;" separator=";">
	UPDATE TEST.TEST_USER 
	  <set>
            <if test="user.email!= null">
                USER_EMAIL= #{user.email},
            </if>
            <if test="user.userName!= null">
                USER_NAME= #{user.userName}
            </if>
        </set>
        where USER_CODE = #{user.userCode}
	</foreach>
</update>

原文:
mybatis oracle:批量操作(增删改查)

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值