myabtis批量新增

foreach标签拼接的insert语句不是批量新增

相信很多项目中myabtis的新增sql语句是使用foreach标签拼接,如下写法,但千万要注意这并不批量新增
实际上这是一个大的SQL,如果遍历的集合太大, 新增时会导致性能问题.

<insert id="insertBatch" parameterType="com.example.Category" useGeneratedKeys="true" keyProperty="id">
        INSERT INTO category (created_at, name, description)
        VALUES
        <foreach collection="entities" item="entity" separator=",">
            (#{entity.createdAt}, #{entity.name}, #{entity.description})
        </foreach>
</insert>

那么如何在mybatis中使用批量新增呢?

  1. 在Mapper xml文件中编写sql语句
<insert id="insertName">
  insert into names (name) values (#{value})
</insert>
  1. 通过sqlSessionFactory创建支持批量新增的SqlSession, 由该SqlSession获取Mapper执行新增
List<String> names = new ArrayList<String>();
names.add("Fred");
names.add("Barney");
names.add("Betty");
names.add("Wilma");

SqlSession sqlSession = sqlSessionFactory.openSession(ExecutorType.BATCH);
try {
  NameMapper mapper = sqlSession.getMapper(NameMapper.class);
  for (String name : names) {
    mapper.insertName(name);
  }
  sqlSession.commit();
} finally {
  sqlSession.close();
}

详情见myabtis github官网相关链接

  • https://github.com/mybatis/mybatis-3/issues/484
  • https://github.com/mybatis/mybatis-3/wiki/FAQ#how-do-i-code-a-batch-insert
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值