1:数据批量处理方法有两种
第一种:传统的sqlsession的批量处理方法
第二种:ExecutorType.BATCH
接口代码如下:
//批量添加数据
public int addPersons(@Param("persons1") List<Person> persons);
public int addPerson1(Person person);
2:第一种传统的sqlsession的批量处理方法:
mapper配置:
<!-- 批量添加-->
<insert id="addPersons">
insert into person (username,email,gender) VALUES
<foreach collection="persons1" item="persons" separator=",">
(#{persons.username},#{persons.email},#{persons.gender})
</foreach>
</insert>
<!-- 批量添加依赖allowMultiQueries=true-->
<insert id="addPersons">
<foreach collection="persons1" item="persons" separator=";">
insert into person (username,email,gender)
VALUES
(#{persons.username},#{persons.email},#{persons.gender})
</foreach>
</insert>
代码实现:
void addPersons() {
System.out.println("--------getPersonsByIds方法开始---------");
SqlSession sqlSession = dbtools.getSession();
System.out.println(sqlSession.toString());
PersonMapper personMapper = sqlSession.getMapper(PersonMapper.class);
List<Person> list=new ArrayList<Person>();
list.add(new Person("AAA1", "a邮箱", "F"));
list.add(new Person("BBB1", "b邮箱", "F"));
list.add(new Person("CCC1", "c邮箱", "F"));
int a=personMapper.addPersons(list);
System.err.println(a);
for(Person p:list) {
System.out.println(p);
}
System.out.println("---------结束---------");
sqlSession.commit();
}
3:第二种ExecutorType.BATCH
// 配置默认的执行器。
// SIMPLE 就是普通的执行器;
// REUSE 执行器会重用预处理语句(prepared statements);
// BATCH 执行器将重用语句并执行批量更新。
mapper配置文件:
<insert id="addPerson1" parameterType="person">
insert into person (username,email,gender)
VALUES
(#{username},#{email},#{gender})
</insert>
代码实现:
void testBach() {
// 配置默认的执行器。
// SIMPLE 就是普通的执行器;
// REUSE 执行器会重用预处理语句(prepared statements);
// BATCH 执行器将重用语句并执行批量更新。
System.out.println("--------批处理方法开始,设置执行器类型---------");
//批处理
SqlSession sqlSession = dbtools.getSqlSessionFactory().openSession(ExecutorType.BATCH);
System.out.println(sqlSession.toString());
PersonMapper personMapper = sqlSession.getMapper(PersonMapper.class);
List<Person> list=new ArrayList<Person>();
list.add(new Person("AAAbach11", "a邮箱", "F"));
list.add(new Person("BBBbach11", "b邮箱", "F"));
list.add(new Person("CCCbach11", "c邮箱", "F"));
for(Person p:list) {
int a=personMapper.addPerson1(p);
System.out.println("返回值:"+a);
}
System.out.println("---------结束---------");
sqlSession.commit();
sqlSession.close();
}
通过两种不同当时均可实现数据批量处理,但是推荐使用ExecutorType.BATCH实现