使用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。