posts - 431,  comments - 344,  trackbacks - 0

          HibernateTemplate還提供一種更加靈活的方式來操作數據庫,通過這種方式可以完全使用Hibernate的操作方式。HibernateTemplate的靈活訪問方式是通過如下兩個方法完成:

          q      Object execute(HibernateCallback action)

          q      List execute(HibernateCallback action)

          這兩個方法都需要一個HibernateCallback的實例,HibernateCallback實例可在任何有效的Hibernate數據訪問中使用。程序開發者通過HibernateCallback,可以完全使用Hibernate靈活的方式來訪問數據庫,解決Spring封裝Hibernate后靈活性不足的缺陷。HibernateCallback是一個接口,該接口只有一個方法doInHibernate(org.hibernate.Session session),該方法只有一個參數Session。

          通常,程序中采用實現HibernateCallback的匿名內部類來獲取HibernateCallback的實例,方法doInHibernate的方法體就是Spring執行的持久化操作。具體代碼如下:

          public class PersonDaoImpl implements PersonDao

          {
           // 私有實例變量保存SessionFactory
           private SessionFactory sessionFactory;
           // 依賴注入必須的setter方法
           public void setSessionFactory(SessionFactory sessionFactory){
            this.sessionFactory = sessionFactory;
           }
           /**
            *
            * 通過人名查找所有匹配該名的Person實例
            *
            * @param name
            *            匹配的人名
            *
            * @return 匹配該任命的全部Person集合
            *
            */
           public List findPersonsByName(final String name){
            // 創建HibernateTemplate實例
            HibernateTemplate hibernateTemplate =new HibernateTemplate(this.sessionFactory);
                  // 返回HibernateTemplate的execute的結果
            return (List) hibernateTemplate.execute(
              // 創建匿名內部類
              new HibernateCallback(){
               public Object doInHibernate(Session session) throws HibernateException{
                // 使用條件查詢的方法返回
                List result = session.createCriteria(Person.class)
                 .add(Restrictions.like("name", name+"%").list();
                return result;
                               }
              });
              }
          }

          注意:方法doInHibernate方法內可以訪問Session,該Session對象是綁定到該線程的Session實例。該方法內的持久層操作,與不使用Spring時的持久層操作完全相同。這保證對于復雜的持久層訪問,依然可以使用Hibernate的訪問方式。
          posted on 2007-12-26 17:09 周銳 閱讀(2604) 評論(0)  編輯  收藏 所屬分類: Hibernate
          主站蜘蛛池模板: 全州县| 仲巴县| 高邑县| 漳州市| 大连市| 大田县| 通山县| 汨罗市| 罗平县| 江津市| 肃宁县| 黎川县| 闽侯县| 吉林市| 密云县| 咸阳市| 加查县| 南康市| 阿荣旗| 鲁甸县| 仁化县| 屯留县| 定日县| 嘉定区| 高淳县| 嘉鱼县| 孟连| 马鞍山市| 南投市| 石城县| 茂名市| 安康市| 昌黎县| 鄂托克前旗| 扎兰屯市| 镇康县| 泽库县| 夏河县| 永平县| 筠连县| 新郑市|