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中使用批量新增
呢?
- 在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(); }
个人学习笔记,记录日常学习,便于查阅及加深,仅为方便个人使用。