<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    期待更好更穩(wěn)定的開源FrameWork的出現(xiàn),讓我們一起努力吧!  
    日歷
    <2007年6月>
    272829303112
    3456789
    10111213141516
    17181920212223
    24252627282930
    1234567
    統(tǒng)計(jì)
    • 隨筆 - 78
    • 文章 - 1
    • 評(píng)論 - 29
    • 引用 - 0

    導(dǎo)航

    常用鏈接

    留言簿(1)

    隨筆分類

    隨筆檔案(42)

    文章檔案(37)

    相冊(cè)

    搜索

    •  

    積分與排名

    • 積分 - 45522
    • 排名 - 1064

    最新隨筆

    最新評(píng)論

    閱讀排行榜

    評(píng)論排行榜

     
     相信使用過Spring + Hibernate開發(fā)過的人,在寫DAO的時(shí)候都使用過Spring的HibernateDaoSupport類,然后在實(shí)現(xiàn)的時(shí)候就可以很輕松的使用getHibernateTemplate()方法之后就可以調(diào)用save()、delete()、update()等Hibernate的Session的操作,很簡(jiǎn)單。比如:
      
      getHibernateTemplate().save(user);
      
      這樣一句話在我們沒有Spring的時(shí)候就必須使用如下的代碼才能完成:
      
      Session session = HibernateUtil.getSession();
      Transaction tx = session.beginTransaction();
      session.save(user);
      tx.commit();
      HibernateUtil.colseSession();
      這里還省去了異常處理,同時(shí)使用了HibernateUtil類來簡(jiǎn)化從SessionFactory獲取Session,以及關(guān)閉Session等處理。
      
      但是我們?cè)谑褂肏ibernate的時(shí)候不一定會(huì)使用Spring,所以我們可以模仿Spring的處理方式,做一個(gè)Hibernate的模板,使用模板模式來簡(jiǎn)化我們的開發(fā),其主要的目的就是為了簡(jiǎn)化開發(fā),使代碼達(dá)到最大話的重用。
      
      1.我們現(xiàn)來實(shí)現(xiàn)一個(gè)Hibernate模板:
      
      package kick.hibernate;
      
      import net.sf.hibernate.HibernateException;
      import net.sf.hibernate.Session;
      import net.sf.hibernate.Transaction;
      
      public class HibernateTemplate{
      public static Object run(HibernateCallback callback) throws HibernateException{
      Session session = null;
      Transaction tx = null;
      try {
      session = HibernateSessionutil.currentSession();
      tx = session.beginTransaction();
      Object result = callback.execute(session);
      tx.commit();
      session.flush();
      return result;
      } catch (HibernateException e) {
      tx.rollback();
      return null;
      } finally {
      HibernateSessionutil.closeSession();
      }
      }
      這里類很簡(jiǎn)單,就是使用一個(gè)實(shí)現(xiàn)HibernateCallBack接口的一個(gè)回掉類,在調(diào)用的時(shí)候根據(jù)具體的需求實(shí)現(xiàn)HibernateCallBack類。
      
      2.回掉接口HibernateCallBack:
      package kick.hibernate;
      
      import net.sf.hibernate.HibernateException;
      import net.sf.hibernate.Session;
      
      public interface HibernateCallBack {
      Object execute(Session session)throws HibernateException;
      }
      
      好了,到此為止我們就可以使用這個(gè)模板了,可以用如下的方式使用:
      HibernateTemplate.run(new HibernateCallback() {
      public Object execute(Session session) throws HibernateException {
      session.save(user);
      return null;
      }
      });
      
      看看,是不是省去了很多代碼?^_^
      
      不過這還沒有達(dá)到想Spring里面那樣簡(jiǎn)單,不要著急,“面包會(huì)有的”呵呵,我們會(huì)達(dá)到的。
      
      3.實(shí)現(xiàn)我們自己的HibernateSupport類:
      
      從上面的代碼可以看出,我們要自己實(shí)現(xiàn)HibernateCallback接口,而每次我們實(shí)現(xiàn)的時(shí)候又重復(fù)代碼了。因此我們?cè)俪橄螅v這些實(shí)現(xiàn)放到我們的HibernateSupport類里面去。看看我們上面的代碼就知道我們實(shí)現(xiàn)HibernateCallback接口的目的就是為了調(diào)用session.save()方法,即session的方法。代碼如下:
      
      package kick.hibernate;
      
      import java.io.Serializable;
      
      import net.sf.hibernate.HibernateException;
      import net.sf.hibernate.Session;
      
      public class HibernateSupport{
      
      public Object save(final Object object) throws HibernateException{
      return HibernateTemplate.run(new HibernateCallBack(){
      
      public Object execute(Session session) throws HibernateException {
      session.save(object);
      return null;
      }
      
      });
      }
      public Object save(final Object object,final Serializable id) throws HibernateException{
      return HibernateTemplate.run(new HibernateCallBack(){
      
      public Object execute() throws HibernateException {
      session.save(object,id);
      return null;
      }
      
      });
      }
      
      public Object saveOrUpdate(final Object object) throws HibernateException{
      return HibernateTemplate.run(new HibernateCallBack(){
      
      public Object execute(Session session) throws HibernateException {
      session.saveOrUpdate(object);
      return null;
      }
      
      });
      }
      ……………………………………………………………………………………
      ……………………………………………………………………………………
      ……………………………………………………………………………………
      
      調(diào)用一些其他的session的方法。
      
      }
      
      4.抽象RootDao:
      
      該類為抽象類,在實(shí)現(xiàn)自己的DAO類的時(shí)候繼承該類。該類的有一個(gè)HibernateSupport的對(duì)象,在子類中使用getHibernateTemplate()方法就可以得到該對(duì)象,然后調(diào)用它對(duì)應(yīng)的方法。實(shí)現(xiàn)代碼如下:
      
      package kick.hibernate.dao;
      
      import net.sf.hibernate.Session;
      import kick.hibernate.HibernateTemplateImpl;
      
      public abstract class RootDao {
      private HibernateSupport temp = null;
      
      /**
      * @return Returns the temp.
      */
      public HibernateTemplateImpl getHibernateTemplate(Session session) {
      return new HibernateSupport();
      }
      }
      
      5.使用例子:
      
      定義一個(gè)自己的DAO類,實(shí)現(xiàn)代碼如下:
      
      public class UserDaoImpl extends RootDao implements UserDaoInterface{
      public void saveUser(User user) throws KickException {
      getHibernateTemplate().saveOrUpdate(user);
      }
      ……………………………………………………………………………………
      實(shí)現(xiàn)其他的方法
      ……………………………………………………………………………………
      }
      看到?jīng)]有?紅色的代碼,就實(shí)現(xiàn)了Spring的HibernateSupport了吧?^_^

    posted on 2007-06-16 16:50 BlueSky_itwangxinli 閱讀(242) 評(píng)論(0)  編輯  收藏

    只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


    網(wǎng)站導(dǎo)航:
     
     
    Copyright © BlueSky_itwangxinli Powered by: 博客園 模板提供:滬江博客
    主站蜘蛛池模板: 亚洲精品国产自在久久| 日韩精品无码免费视频| 亚洲国产精品VA在线观看麻豆| 成人免费毛片视频| 99在线观看精品免费99| GOGOGO高清免费看韩国| 亚洲AV无码国产一区二区三区| 亚洲五月丁香综合视频| 久久精品国产亚洲AV香蕉| 亚洲色欲久久久综合网东京热| 少妇亚洲免费精品| 国产精品自在自线免费观看| 一二三四在线播放免费观看中文版视频 | 2020久久精品国产免费| 中文字幕无码一区二区免费| 一级午夜a毛片免费视频| 欧洲亚洲国产精华液| 中中文字幕亚洲无线码| 亚洲精品亚洲人成在线观看麻豆 | 立即播放免费毛片一级| 亚洲欧洲专线一区| 亚洲国产最大av| 亚洲激情视频网站| 亚洲视频在线免费播放| 亚洲电影一区二区| 亚洲精品免费在线观看| 亚洲AV无码久久精品色欲| 亚洲人成色7777在线观看| 久久亚洲中文字幕精品一区 | 免费福利在线观看| 男人免费视频一区二区在线观看| 亚洲爆乳大丰满无码专区| 亚洲精品乱码久久久久蜜桃| 亚洲一区二区三区在线观看网站| 国产色在线|亚洲| 亚洲熟妇少妇任你躁在线观看| 日韩亚洲产在线观看| 亚洲欧好州第一的日产suv| 亚洲国产aⅴ成人精品无吗| 亚洲av综合日韩| 香蕉国产在线观看免费|