使用hibeinateTemplate进行批量删除的两种方法

来源:互联网 发布:淘宝达人头像怎么更换 编辑:程序博客网 时间:2024/05/17 00:56

        使用spring + hibernate框架中,一般使用hibernateTemplate对数据进行操作,但是使用hibernateTemplate进行批量删除没有hibernate那么方便,经过自己查找资料和尝试,有两种比较常用的方法。(自己也是初学框架,在这里献丑了!)

1.使用hibernateTemplate中的deleteAll方法,具体怎么做看代码吧(只贴核心部分)

Action类

private String[] ids ;

public String batchDelete() throws Exception{
  List<News> idlist = new ArrayList<News>() ;
  for(String id:ids){
       News news = new News() ;
       news.setId(Integer.parseInt(id)) ;
       idlist.add(news) ;
  }
  newsDAO.batchDelete(idlist) ;

}

public String[] getIds() {
  return ids;
 }

 public void setIds(String[] ids) {
  this.ids = ids;
 }

DAOImpl类

public void batchDelete(List<News> idlist) {
     hibernateTemplate.deleteAll(idlist) ;
 }

这种方法进行删除时,每删除一条会发送一条sql语句。

2.使用 HibernateCallback回调函数

Action类

   private String ids ;

   public String batchDelete() throws Exception{
       newsDAO.batchDelete(ids) ;
   }

  public String getIds() {
      return ids;
  }
  public void setIds(String ids) {
      this.ids = ids;
 }

DAOImpl类

public void batchDelete(final String ids) {
    ht.execute(new HibernateCallback(){
          public Object doInHibernate(Session session)    throws HibernateException, SQLException {
          String hql = "delete from News as news where news.id in("+ids+")" ;
          Query q = session.createQuery(hql) ;
          return q.executeUpdate() ;
   }
  });
 }

使用这种就不用将接收的id放在list集合里面,唯一的缺陷就是要回调,本人还是比较推荐第二种。注:在前台页面是使用的checkbox。