在ssm框架的项目中,我们做mybatis批量删除数据的时候,要尽量避免在service层使用for循环来批量删除数据,如下是这种for循环批量情况(如UserServiceImpl实现类)。@Transactional
public int batchDeleteUser(int[] ids) {
try {
for(Long userId:ids){
//一条一条的删除
userMapper.deleteByPrimaryKey(userId);
}
} catch (Exception e) {
//批量删除事务回滚
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
return -1;
}
return 1;
}
为什么要用mybatis批量删除数据而不使用for循环来单个删除数据呢?这是因为每次for循环操作数据库都要开启一次事务,严重的影响了数据库的操作性能,于是我们就可以直接在mybatis mapper配置文件中使用mybatis批量删除的方法,可以有效的提高mysql操作性能。
我们把UserServiceImpl类经过改造之后,变成如下这样,去掉了for循环。@Transactional
public int batchDeleteUser(int[] ids) {
try{
//批量删除
userMapper.deleteAll(ids);
}catch (Exception e){
//批量删除事务回滚
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
return -1;
}
return 1;
}
这个时候UserMapper.java里面的接口方法是这样的,表示批量删除数据,如下。//id存储在了Array数组中了
void deleteAll(int[] ids);
//假如id存储在List集合中
//void deleteAll(List);
在UserMapper.xml文件中,我们就可以通过foreach来遍历我们的ids数组,然后进行删除,这样就不会每次for循环的时候开启数据库连接了。
delete from USER u where u.ID in
#{id}
注释说明:
UserMapper.xml中的collection属性:当collection=“array”时,表名参数为数组
当collection=“list”时,表名参数为集合
item="id":
表示ids数组中的每一个元素,#{id}表示取这个数组的每一个元素值
USER:
表示user用户表
来源网站:太平洋学习网,转载请注明出处:http://www.tpyyes.com/a/javaweb/384.html