`
aaron_ch
  • 浏览: 177297 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

Spring用回调HibernateCallBack方法

    博客分类:
  • Java
阅读更多

Spring用回调HibernateCallBack方法实现持久层一些功能,当这些功能不能满足需求时,
我们也可以自已来重写HibernateCallBack,例:
public class UsersDAO extends HibernateDaoSupport {
......
public List getUsers() {
return getHibernateTemplate().executeFind(new HibernateCallback() {
public Object doInHibernate(Session s) throws HibernateException,
SQLException {
Query query = s.createQuery("From Users AS user ORDER BY user.username DESC");
List list = query.list();
return list;
}
});
}
......
}
但是这样的代码很难让人理解,可以将其打包
package com.notepad.comm;
import java.sql.SQLException;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.springframework.orm.hibernate3.HibernateCallback;
public class HQLCallBackUtil implements HibernateCallback {
private String hql;

public HQLCallBackUtil(){

}

public HQLCallBackUtil(String hql){
this.hql=hql;
}
public String getHql() {
return hql;
}
public void setHql(String hql) {
this.hql = hql;
}
public Object doInHibernate(Session s) throws HibernateException,
SQLException {
if (hql == null || hql.equals("")) {
throw new HibernateException("Can't execute NULL hql!");
}
return s.createQuery(hql).list();
}
}
然后可以通过如下代码进行调用
public class UsersDAO extends HibernateDaoSupport {
......
public List getUsers() {
HQLCallBackUtil callBack=new HQLCallBackUtil();
callBack.setHql("From Users AS user ORDER BY user.username DESC");
return this.getHibernateTemplate().executeFind(callBack);
}
......
}
这样是不是感觉简单很多呢!

<2>利用回调函数处理

    public List getApList() ...{
        return (List)this.getHibernateTemplate().execute(new HibernateCallback() ...{

        public Object doInHibernate(Session session) throws HibernateException, SQLException ...{
             String[] ids = ...{"1","2","3"};
             String   hql=  "from Appinfo where id   in   (:ids)";
             Query query = session.createQuery(hql);
             List list = query.setParameterList("ids", ids).list();
            return list;
         }
         });
     }
(2)删除数据,参数为数组,利用回调函数

    public void delInArray() ...{
        this.getHibernateTemplate().execute(new HibernateCallback() ...{

        public Object doInHibernate(Session session) throws HibernateException, SQLException ...{
             String[] ids = ...{"1","2","3"};
             String   hql=  "delete Appinfo where id   in   (:ids)";
             Query query = session.createQuery(hql);
             query.setParameterList("ids", ids).executeUpdate();
            return null;
         }   
         });   

 

分享到:
评论

相关推荐

    Spring对DAO的支持.doc

    - **HibernateCallback**:定义了一个回调接口,允许在事务内部执行自定义的Hibernate操作。 通过使用HibernateTemplate,开发者可以专注于业务逻辑,而无需关注底层的SessionFactory和Session管理。 总结来说,...

    Spring整合hibernate

    例如,你可以通过实现HibernateCallback接口的doInHibernate方法,传入一个回调函数,执行特定的Hibernate操作。此外,HibernateTemplate会自动处理HibernateException,并将其转化为Spring的DataAccessException,...

    Spring3.0新特性

    - **事件监听器的改进**:GenericApplicationListeners 现在只接收特定类型的事件,所有回调接口(如 TransactionCallback 和 HibernateCallback)都声明了一个泛型结果值。 - **任务执行器的增强**:Spring 的 ...

    Struts2,hibernate,Spring分页方法

    `getHibernateTemplate().executeFind()`方法允许我们在回调方法中像操作原生Hibernate一样设置分页参数。 接下来,为了更好地管理分页信息,我们可以创建一个名为`PaginationInfo`的类,该类通常包含以下属性: - ...

    Spring整合Hibernate 详解.doc

    通过实现这个接口,可以在执行特定数据库操作前后的回调函数中进行额外的工作,如事务控制、日志记录等。 6.5.6 使用IoC容器组装各种组件 Spring的IoC容器是其核心特性之一,它负责管理应用中的对象及其依赖关系。...

    spring+hibernate详解

    通过`HibernateTemplate`的`execute`方法传入一个实现了`HibernateCallback`接口的对象,可以在回调方法中执行任意的Hibernate操作。 ```java public class PersonDaoImpl extends HibernateDaoSupport implements ...

    spring hibernatetemplate

    使用`TransactionTemplate`,你可以确保所有操作都在同一个事务内,即使在回调方法中包含了多个数据访问操作,事务也会在回调方法完成后统一提交或回滚,根据事务的隔离级别和传播行为。 以下是一个使用`...

    Spring学习笔记

    HibernateCallback提供了回调接口,用于执行Hibernate会话操作;HibernateDaoSupport是为数据访问对象提供的支持基类。 15. Struts2与Spring、Hibernate整合: 整合Struts2、Spring和Hibernate可以构建一个Web层、...

    Struts+Spring+Hibernate之选课系统

    Spring还支持使用回调机制(如HibernateCallback)处理特殊查询和分页。 Hibernate的核心在于对象关系映射,它允许我们将Java对象直接映射到数据库表。开发者需要正确配置实体类(Entity)和数据访问对象(DAO),...

    struts2+spring+hibernate分页显示完整代码

    `queryForPage` 方法通过`getHibernateTemplate().executeFind()`方法执行HQL查询,并利用`HibernateCallback`接口回调来设置查询的起始位置和最大结果数,从而实现分页。`getAllRowCount` 方法则直接返回HQL查询后...

    Hibernate+Struts+Spring 实现的通用分页查询

    `queryPage`方法通过`HibernateCallback`回调机制,在Hibernate的Session中执行HQL查询,获取数据并填充到`PageModel`对象中。这样做的好处是将数据库操作与业务逻辑解耦,同时利用Spring的事务管理能力。 在实际...

    MyEclipse的整合Struts+Spring+Hibernate简单例子开发

    - 在`com.lnic.dao`包中创建`UserDao`接口,定义获取用户信息的方法`getName(String id)`,以及其实现类`UserDaoImpl`,继承`HibernateDaoSupport`,使用Hibernate回调方法处理数据库操作。 - 配置`hibernate.cfg....

    Hibernate+Spring+Struts2整合开发中的一个分页显示方案参考.pdf

    在`queryForPage`方法中,通过`HibernateTemplate`的`executeFind`方法,我们可以传递一个`HibernateCallback`实例,该回调内部创建`Query`对象并设置分页参数`setFirstResult`和`setMaxResults`。`getAllRowCount`...

    getHibernateTemplate

    5. **回调机制**:当`getHibernateTemplate()`的标准方法无法满足特定需求时,可以使用`HibernateCallback`接口进行自定义操作。这允许你在Hibernate的Session内部执行任意操作,同时仍然享受到Spring提供的事务和...

    HibernateS整合pring

    此外,`HibernateTemplate`还支持`HibernateCallback`接口,允许开发者在回调方法`doInHibernate(Session session)`中使用原生的Hibernate API,以应对更复杂的数据访问需求。这种方法确保了灵活性,即使在Spring的...

    HibernateSpringStruts2整合开发中的一个分页显示方案.doc

    `queryForPage`利用`HibernateTemplate`的`executeFind`方法,通过回调接口`HibernateCallback`在Hibernate Session中执行查询并设置分页参数。`getAllRowCount`则直接通过`getHibernateTemplate().find(hql).size()...

    真是一个很好的分页例子

    `queryForPage`方法利用了Spring的`HibernateTemplate`,通过回调机制执行`HibernateCallback`,在回调的内部创建`Query`对象,设置分页参数`setFirstResult`和`setMaxResults`,然后执行查询并返回结果。...

    HbernateTemplate的使用.pdf

    开发者可以在实现`doInHibernate(Session session)`方法后,通过`HibernateTemplate.execute(HibernateCallback&lt;T&gt; action)`方法执行回调。 2. **命名SQL查询** 命名SQL查询允许预先在配置文件中定义SQL语句,然后...

    HibernateTemplate源代码

    // 执行回调操作 try { return action.doInHibernate(session); } catch (HibernateException ex) { // 处理Hibernate异常 throw convertHibernateAccessException(ex); } } ``` - **getSessionFactory**...

Global site tag (gtag.js) - Google Analytics