零、传统拼接SQL语句的弊端
传统上利用Mybatis进行批量操作的方式本质来说是拼接SQL语句,然后交给底层执行,如之前博文而言。
其实这种方式是存在弊端的:
1. SQL语句可能会过长,DB的引擎可能不支持。
2. MyBatis拼接耗费资源不说还容易写错。
一、新思路
使用JDBC底层的batch进行批量操作
1. 先添加如下xml,注册一个batchSession
2. 使用注入
/** 注入批处理SqlSessionTemplate */ @Autowired private SqlSessionTemplate batchSqlSessionTemplate; //这里的Transactionl一定要加,底层实现是命中SQL和Statement,必须使用的是同一个Connection /** * 批量 insert * @param models * @return */ @Transactional public int batchcInsert(Listmodels){ int result = 0; BaseMapper modelMapper = (BaseMapper ) batchSqlSessionTemplate.getMapper(mapperClass); for (Model model:models) { result += modelMapper.insert(model); } return result; } //这里的Transactionl一定要加,底层实现是命中SQL和Statement,必须使用的是同一个Connection /** * 批量update * @param models * @return */ @Transactional public int batchcUpdate(List models){ BaseMapper modelMapper = (BaseMapper ) batchSqlSessionTemplate.getMapper(mapperClass); int result = 0; for (Model model:models) { result += modelMapper.update(model); } return result; } // 批量删除delete