关注微信公众号 太平洋学习网 扫描二维码
最新消息:关注【太平洋学习网】微信公众号,可以获取全套资料,【全套Java基础27天】【JavaEE就业视频4个月】【Android就业视频4个月】

ssm框架mybatis批量删除数据示例详解

Javaweb 太平洋学习网 浏览 评论

在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<id>);

在UserMapper.xml文件中,我们就可以通过foreach来遍历我们的ids数组,然后进行删除,这样就不会每次for循环的时候开启数据库连接了。

<delete id="deleteAll" parameterType="int">
  delete from USER u where u.ID in
  <foreach item="id" collection="array" open="(" separator="," close=")">
    #{id}
  </foreach>
</delete>

注释说明:

UserMapper.xml中的collection属性:

  1. 当collection=“array”时,表名参数为数组

  2. 当collection=“list”时,表名参数为集合

item="id":

  表示ids数组中的每一个元素,#{id}表示取这个数组的每一个元素值

USER:

  表示user用户表

来源网站:太平洋学习网,转载请注明出处:http://www.tpyyes.com/a/javaweb/2017/1116/384.html