1、通过foreach 在sql里面批量操作数据 示例如下
<insert id="insertForeach4Batch">
insert into t_user (user_name, real_name,
sex, mobile,email,note,
position_id)
values
<foreach collection="list" separator="," item="user">
(
#{user.userName,jdbcType=VARCHAR},
#{user.realName,jdbcType=VARCHAR},
#{user.sex,jdbcType=TINYINT},
#{user.mobile,jdbcType=VARCHAR},
#{user.email,jdbcType=VARCHAR},
#{user.note,jdbcType=VARCHAR},
#{user.position.id,jdbcType=INTEGER}
)
</foreach>
</insert>
2、 mybatis 批量 提交数据库
mybatis的执行器有三种类型:
- ExecutorType.SIMPLE
这个类型不做特殊的事情,它只为每个语句创建一个PreparedStatement。
- ExecutorType.REUSE
这种类型将重复使用PreparedStatements。
- ExecutorType.BATCH
这个类型批量更新,且必要地区别开其中的select 语句,确保动作易于理解。
@Test
// 批量更新
public void testBatchExcutor() {
// 2.获取sqlSession
SqlSession sqlSession = sqlSessionFactory.openSession(ExecutorType.BATCH, true);
// 3.获取对应mapper
TUserMapper mapper = sqlSession.getMapper(TUserMapper.class);
TUser user = new TUser();
user.setUserName("mark");
user.setRealName("毛毛");
user.setEmail("xxoo@163.com");
user.setMobile("18695988747");
user.setNote("mark's note");
user.setSex((byte) 1);
TPosition positon1 = new TPosition();
positon1.setId(1);
user.setPosition(positon1);
System.out.println(mapper.insertSelective(user));
TUser user1 = new TUser();
user1.setId(3);
user1.setUserName("cindy");
user1.setRealName("王美丽");
user1.setEmail("xxoo@163.com");
user1.setMobile("18695988747");
user1.setNote("cindy's note");
user1.setSex((byte) 2);
user.setPosition(positon1);
System.out.println(mapper.updateIfAndSetOper(user1));
sqlSession.commit();
System.out.println("----------------");
}