您的位置:首页 > 其它

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

2011-08-24 10:35 561 查看
使用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。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: