Mybatis - 批量插入Batch操作
一. 批量操作
1.我们可以写一个配置类,代码里面就可以通过注解直接引入SqlSessionTemplate
:
@Configuration
public class MyConfig {
@Bean("sqlSessionTemplate")
public SqlSessionTemplate sqlSessionTemplate(SqlSessionFactory factory) {
// 使用上面配置的Factory ,并且设置Template为BATCH方式
SqlSessionTemplate template = new SqlSessionTemplate(factory, ExecutorType.BATCH);
return template;
}
}
2.代码编写部分:
@Service
public class RoomService {
@Autowired
private SqlSessionTemplate sqlSessionTemplate;
public void insertRoom() {
try {
// 加载数据
ArrayList<Room> rooms = ExcelUtil.loadData(PATH);
// 创建一个SqlSessionFactory
SqlSessionFactory sqlSessionFactory = sqlSessionTemplate.getSqlSessionFactory();
// 设置模式为批量,创建个Session
SqlSession sqlSession = sqlSessionFactory.openSession(sqlSessionTemplate.getExecutorType());
RoomMapper mapper = sqlSession.getMapper(RoomMapper.class);
for (Room room : rooms) {
mapper.insert(room);
}
// 提交
sqlSession.commit();
sqlSession.clearCache();
} catch (Exception e) {
e.printStackTrace();
}
}
}
3.程序会在commit
操作的时候,真正地执行SQL
。前面进行insert
的时候,效果如下:
备注,你可以配置下文件application.properties
,打印日志:
#配置日志输出
mybatis.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl