隨筆 - 6  文章 - 129  trackbacks - 0
          <2025年6月>
          25262728293031
          1234567
          891011121314
          15161718192021
          22232425262728
          293012345

          常用鏈接

          留言簿(14)

          隨筆檔案(6)

          文章分類(467)

          文章檔案(423)

          相冊

          收藏夾(18)

          JAVA

          搜索

          •  

          積分與排名

          • 積分 - 827240
          • 排名 - 49

          最新評論

          閱讀排行榜

          評論排行榜

          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);

                     //返回HibernateTemplateexecute的結果

                             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-10-01 19:54 Ke 閱讀(3682) 評論(0)  編輯  收藏 所屬分類: hibernate
          主站蜘蛛池模板: 华亭县| 报价| 东海县| 南陵县| 郧西县| 化德县| 牟定县| 安达市| 石首市| 阳春市| 金昌市| 绥芬河市| 宁海县| 海口市| 磴口县| 辉南县| 黄山市| 永福县| 广元市| 夏津县| 兴山县| 闽清县| 吉木乃县| 阿拉善右旗| 云梦县| 喀喇沁旗| 曲水县| 乐平市| 平塘县| 铅山县| 屯门区| 道孚县| 平顺县| 兴义市| 土默特右旗| 错那县| 城步| 巢湖市| 武汉市| 惠东县| 乃东县|