MyBatis:批量数据插入的两种方式

MyBatis批量数据插入

一、MyBatis对于批量插入的支持

  • 借助foreach标签使用insert into table values()
  • 借助MySQL数据库连接属性allowMultiQueries=true
1.1 PersonMapper
public int addPersons(@Param("persons") List<Person> persons);
1.2 PersonMapper.xml

根据MySQL的insert语句规则结合foreach去写SQL语句,collection中的是person对象,person。XX便可以取得属性值

<insert id="addPersons">
    insert into person(username,email,gender) VALUES
    <foreach collection="persons" item="person" separator=",">
      (#{person.username},#{person.email},#{person.gender})
    </foreach>
</insert>

<!--或者以下-->

<insert id="addPersons">
   <foreach collection="persons" item="person" separator=";">
      insert into person(username,email,gender) VALUES
     (#{person.username},#{person.email},#{person.gender})
    </foreach>
</insert>

二、基于SqlSession的Executor Type进行批量添加

因为利用foreach去拼接批量插入语句的时候,批量插入的数据量越多,拼接的语句越长,数据库引擎解析的时候会负担较大,所以数据量较大的时候可以利用Executor Type

通过查看API可知可以在Setting中设置,但是Setting是全局配置,如果全部语句都采用批处理就不合理的,所以需要在单个SQL语句中实现批处理,则接触单个sqlsession

mybatis3API:Settings配置

在这里插入图片描述

2.1 PersonMapper.xml
  <insert id="addPerson" parameterType="person">
    insert into person(username,email,gender) VALUES (#{username},#{email},#{gender})
  </insert>
2.2 test,在openSession中传入参数ExecutorType.BATCH
SqlSession sqlSession = this.getSqlSessionFactory().openSession(ExecutorType.BATCH);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值