微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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:批量操作(增删改查)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐