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

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

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

    簡介HibernateTemplate

    就類似JdbcTemplate一樣,HibernateTemplate封裝了Hibernate存儲時的一些細節,例如try...catch的例外處理等等,HibernateTemplate的使用在觀念上與JdbcTemplate是類似的,這邊簡單的介紹一下HibernateTemplate的使用。

      首先我們看一下Bean定義檔,這與前一個主題沒什麼太大的差別:

     代碼:

    <?xml version="1.0" encoding="UTF-8"?> 
    <!DOCTYPE beans PUBLIC "-//SPRING/DTD BEAN/EN""http://www.springframework.org/dtd/spring-beans.dtd"> 
    <beans> 
        <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> 
            <property name="driverClassName"> 
                <value>com.mysql.jdbc.Driver</value> 
            </property> 
            <property name="url"> 
                <value>jdbc:mysql://localhost:3306/TestDB</value> 
            </property> 
            <property name="username"> 
                <value>caterpillar</value> 
            </property> 
            <property name="password"> 
                <value>123456</value> 
            </property> 
        </bean> 
        
        <bean id="sessionFactory" class="org.springframework.orm.hibernate.LocalSessionFactoryBean" destroy-method="close"> 
            <property name="dataSource"> 
                <ref bean="dataSource"/> 
            </property> 
            <property name="mappingResources"> 
                <list> 
                    <value>User.hbm.xml</value> 
                </list> 
            </property> 
            <property name="hibernateProperties"> 
                <props> 
                    <prop key="hibernate.dialect"> 
                        net.sf.hibernate.dialect.MySQLDialect 
                    </prop> 
                    <prop key="hibernate.show_sql"> 
                        true 
                    </prop> 
                </props> 
            </property> 
        </bean> 
    
    
        <bean id="userDAO" class="onlyfun.caterpillar.UserDAO"> 
            <property name="sessionFactory"> 
                <ref bean="sessionFactory"/> 
            </property> 
        </bean> 
    </beans>

      在這邊UserDAO將繼承自HibernateDaoSupport類別,這可以幫我們省去一些管理sessionFactory、hibernateTemplate資源的工作,我們只要注入sessionFactory就好了,我們的DAO設計如下:

     代碼:

    UserDAO.java
    package onlyfun.caterpillar; 
    
    import net.sf.hibernate.*; 
    import org.springframework.orm.hibernate.*; 
    import org.springframework.orm.hibernate.support.*; 
    
    
    public class UserDAO extends HibernateDaoSupport { 
        public void insertUser(final User user) { 
            getHibernateTemplate().execute(new HibernateCallback() { 
                    publicObject doInHibernate(Session session) throws HibernateException { 
                        session.saveOrUpdate(user); 
                        returnnull; 
                    } 
                }); 
        } 
    }

      只要注入sessionFactory,之後調用getHibernateTemplate()就可以取得HibernateTemplate的實例,我們利用callback方法,實作HibernateCallback介面,在doInHibernate()中進行存儲操作。

      對於簡單的存儲操作,我們甚至可以直接使用HibernateTemplate所提供的find()、load()、saveOrUpdate()、delete()等方法,而不用使用callback,例如:

     代碼:

    UserDAO.java
    package onlyfun.caterpillar; 
    
    import org.springframework.orm.hibernate.support.*; 
    
    public class UserDAO extends HibernateDaoSupport { 
        public void insertUser(User user) { 
            getHibernateTemplate().saveOrUpdate(user); 
        } 
    }

      不用懷疑,程式就是如此簡單,所有的細節都被封裝起來了。

      HibernateTemplate中只能丟出unckecked例外,如果需要處理checked例外,則您可以使用AOP Interceptor來取代HibernateTemplate,從而取代callback方法,在參考手冊中有介紹如何配置,這邊複製過來以便參考:

     代碼:

    .... 
        <bean id="myHibernateInterceptor" 
            class="org.springframework.orm.hibernate.HibernateInterceptor"> 
            <property name="sessionFactory"> 
                <ref bean="mySessionFactory"/> 
            </property> 
        </bean> 
    
        <bean id="myProductDaoTarget" class="product.ProductDaoImpl"> 
            <property name="sessionFactory"> 
                <ref bean="mySessionFactory"/> 
            </property> 
        </bean> 
    
        <bean id="myProductDao" class="org.springframework.aop.framework.ProxyFactoryBean"> 
            <property name="proxyInterfaces"> 
                <value>product.ProductDao</value> 
            </property> 
            <property name="interceptorNames"> 
                <list> 
                    <value>myHibernateInterceptor</value> 
                    <value>myProductDaoTarget</value> 
                </list> 
            </property> 
        </bean> 
    ....

     代碼:

    ProductDaoImpl.java
    public class ProductDaoImpl extends HibernateDaoSupport implements ProductDao { 
    
        public List loadProductsByCategory(finalString category) throws MyException { 
            Session session = SessionFactoryUtils.getSession(getSessionFactory(), false); 
            try { 
                List result = session.find( 
                    "from test.Product product where product.category=?", 
                    category, Hibernate.STRING); 
                if (result == null) { 
                    thrownew MyException("invalid search result"); 
                } 
                return result; 
            } 
            catch (HibernateException ex) { 
                throw SessionFactoryUtils.convertHibernateAccessException(ex); 
            } 
        } 
    }

    posted on 2007-03-09 08:57 77 閱讀(1241) 評論(0)  編輯  收藏 所屬分類: ajax技術


    只有注冊用戶登錄后才能發表評論。


    網站導航:
    博客園   IT新聞   Chat2DB   C++博客   博問  
     
    <2007年3月>
    25262728123
    45678910
    11121314151617
    18192021222324
    25262728293031
    1234567

    導航

    統計

    常用鏈接

    留言簿(12)

    隨筆分類

    隨筆檔案

    文章分類

    文章檔案

    新聞檔案

    相冊

    API文檔

    java開發與研究

    にほん

    上海房產

    東京生活

    數據庫大全

    編程與開發

    美國開發生活

    走向管理

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 人人爽人人爽人人片av免费| 亚洲一级毛片在线播放| 思思久久99热免费精品6| 国产精品无码素人福利免费| 亚洲色大网站WWW永久网站| 成人毛片手机版免费看| 亚洲欧洲国产综合AV无码久久| 99在线精品视频观看免费| 亚洲av无码片在线观看| 好吊妞在线成人免费| 亚洲狠狠色丁香婷婷综合| 国产小视频在线免费| 国产精品亚洲精品日韩电影| 亚洲国产精品人人做人人爱| 五月天国产成人AV免费观看| 亚洲日韩国产精品第一页一区| 日本卡1卡2卡三卡免费| 久久丫精品国产亚洲av| 美女视频黄是免费的网址| 亚洲综合欧美色五月俺也去| 国产免费私拍一区二区三区| 国产精品成人啪精品视频免费| 亚洲国产成人一区二区三区| xxxx日本免费| 国产精品亚洲专区无码不卡| 亚洲色婷婷综合久久| 中文字幕免费在线观看| 亚洲色偷偷综合亚洲av78| 亚洲 国产 图片| 69视频在线观看高清免费| 亚洲综合中文字幕无线码| 又粗又硬又黄又爽的免费视频 | 狠狠色香婷婷久久亚洲精品| 国产成人无码a区在线观看视频免费 | 免费电视剧在线观看| 特a级免费高清黄色片| 久久91亚洲精品中文字幕| 国产在线国偷精品产拍免费| g0g0人体全免费高清大胆视频| 亚洲国产成人久久综合碰碰动漫3d | 亚洲嫩模在线观看|