mysql批量insert数据上限(mysql存储过程实例详解)
程序员文章站
2023-11-27 16:52:10
文章目录前言1.单条数据插入表:1.1mapper代码:1.2单元测试:2.多条数据插入表:2.1方法1:2.2方法2:2.3单元测试:结尾前言mybatis批量插入返回自增id这在很多场景下会用到,...
文章目录
- 前言
- 1.单条数据插入表:
- 1.1mapper代码:
- 1.2单元测试:
- 2.多条数据插入表:
- 2.1方法1:
- 2.2方法2:
- 2.3单元测试:
- 1.单条数据插入表:
- 结尾
前言
mybatis批量插入返回自增id这在很多场景下会用到,比方说请求过来以后返回结果后的回更用自增id处理,或者主表产生id后去做其他的子表的业务关联。
1.单条数据插入表:
1.1mapper代码:
重点是配置:
usegeneratedkeys=“true” keyproperty=“id”
<insert id="insertselective" parametertype="com.gaosi.user.gaosiuserjack.modle.userlocal" usegeneratedkeys="true" keyproperty="id" >
insert into tb_user_local
<trim prefix="(" suffix=")" suffixoverrides=",">
<if test="id != null">
id,
</if>
<if test="name != null">
name,
</if>
<if test="age != null">
age,
</if>
<if test="createtime != null">
create_time,
</if>
<if test="updatetime != null">
update_time,
</if>
</trim>
<trim prefix="values (" suffix=")" suffixoverrides=",">
<if test="id != null">
#{id,jdbctype=integer},
</if>
<if test="name != null">
#{name,jdbctype=varchar},
</if>
<if test="age != null">
#{age,jdbctype=integer},
</if>
<if test="createtime != null">
#{createtime,jdbctype=timestamp},
</if>
<if test="updatetime != null">
#{updatetime,jdbctype=timestamp},
</if>
</trim>
</insert>
1.2单元测试:
@test
public void insert1(){
userlocal userlocal=new userlocal();
userlocal.setname("单个姓名");
int result=userlocalmapper.insertselective(userlocal);
system.out.println(userlocal);
}
2.多条数据插入表:
2.1方法1:
<insert id="insertbatch2" parametertype="java.util.list" usegeneratedkeys="true" keyproperty="id">
insert into tb_user_local (name,create_time)
<foreach collection="list" item="item" index="index" separator="union all">
select
#{item.name},
now()
from dual
</foreach>
</insert>
2.2方法2:
<insert id="insertbatch" parametertype="java.util.list" usegeneratedkeys="true" keyproperty="id">
insert into
tb_user_local (name,create_time)
values
<foreach collection="list" item="item" index="index" separator=",">
(#{item.name},now())
</foreach>
</insert>
2.3单元测试:
@test
public void insertbatch(){
list<userlocal>list=new arraylist<>();
for (int i=0;i<3;i++){
userlocal userlocal=new userlocal();
userlocal.setname(i+"姓名");
list.add(userlocal);
}
int result=userlocalmapper.insertbatch2(list);
system.out.println(list);
}
结尾
这其中需要注意的就是mybatis的版本必须是3.3x以上的版本,不能使用on duplicate key update等语法,如果使用的话,多条的数据只会返回第一条的数据自增id。这就是我使用mybatis批量插入后的总结,非常的实用,希望能帮助到大家。