mybatis批量新增

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>

  2.通过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();
}

https://blog.csdn.net/u013202238/article/details/131444072

posted @ 2024-04-29 15:12  wq9  阅读(78)  评论(0)    收藏  举报