這篇文章將為大家詳細(xì)講解有關(guān)為什么用Spring來管理Hibernate,文章內(nèi)容質(zhì)量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關(guān)知識有一定的了解。
成都創(chuàng)新互聯(lián)是專業(yè)的湘陰網(wǎng)站建設(shè)公司,湘陰接單;提供網(wǎng)站設(shè)計、成都做網(wǎng)站,網(wǎng)頁設(shè)計,網(wǎng)站設(shè)計,建網(wǎng)站,PHP網(wǎng)站建設(shè)等專業(yè)做網(wǎng)站服務(wù);采用PHP框架,可快速的進(jìn)行湘陰網(wǎng)站開發(fā)網(wǎng)頁制作和功能擴(kuò)展;專業(yè)做搜索引擎喜愛的網(wǎng)站,專業(yè)的做網(wǎng)站團(tuán)隊,希望更多企業(yè)前來合作!
為什么要用Hibernate框架?
既然用Hibernate框架訪問管理持久層,那為何又提到用Spring來管理以及整合Hibernate呢?
首先我們來看一下Hibernate進(jìn)行操作的步驟。比如添加用戶的一個步驟。在此為了解釋提出的問題
看截圖,可以看出,Hibernate操作的步驟如下:
獲得Configuration對象
創(chuàng)建SessionFactory
創(chuàng)建Session
打開事務(wù)
進(jìn)行持久化操作。比如上面的添加用戶操作
提交事務(wù)
發(fā)生異常,回滾事務(wù)
關(guān)閉事務(wù)
使用Hibernate進(jìn)行訪問持久層,每次都要進(jìn)行這八個步驟。但是若使用Spring對Hibernate進(jìn)行管理,又是怎么樣的呢?
首先,Spring對Hibernate提供了HibernateTemple類。這個模版類對session進(jìn)行封裝。并且Spring會默認(rèn)為自動提交事務(wù)。所在在dao層直接寫入this.save(Object)即可。
在實(shí)踐中,遇到了一個問題,無法插入數(shù)據(jù)庫,經(jīng)過一番折騰,多次實(shí)驗(yàn),驗(yàn)證,總結(jié)一下原因,結(jié)果如下:
注意:所有的操作都必須在事務(wù)中進(jìn)行。若單純的使用Hibernate,則事務(wù)需要手動開啟提交關(guān)閉操作。當(dāng)然也可以在Hibernate配置文件中,自動提交。
若使用Spring管理Hibernate,則默認(rèn)的是自動提交事務(wù)。但是在此,需要注意的是:若使用Spring在配置文件中配置數(shù)據(jù)源而不使用hibernate.cfg.xml,則可以成功插入數(shù)據(jù)庫,因?yàn)镠ibernateTemple默認(rèn)提供自動提交事務(wù)。在Spring的配置文件配置數(shù)據(jù)源如下:使用此數(shù)據(jù)源需要的jar如下:commons-dbcp.jar,commons-pool.jar,msbase.jar,mssqlserver.jar, msutil.jar,sqljdbc4.jar;
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"> <property name="driverClassName" value="com.microsoft.jdbc.sqlserver.SQLServerDriver"></property> <property name="url" value="jdbc:sqlserver://192.168.24.176:1433;database=test"></property> <property name="username" value="sa"></property> <property name="password" value="123"></property> </bean> <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> <property name="dataSource" ref="dataSource"></property> <!-- hibernate屬性配置 --> <property name="hibernateProperties"> <props> <prop key="hibernate.dialect">org.hibernate.dialect.SQLServerDialect</prop> <prop key="hibernate.hbm2ddl.auto">update</prop> </props> </property> !-- 如果采用傳統(tǒng)的hbm.xml的方式,可以采用如下方式來簡化注冊hbm.xml的步驟,并且class為LocalSessionFactoryBean --> <property name="mappingLocations"> <list> <value>classpath:User.hbm.xml</value> </list> </property> </bean>
若Spring中不是直接配置數(shù)據(jù)源,而是使用hibernate.cfg.xml,則是無法若直接this.save(Object),則無法插入數(shù)據(jù)庫中,但是可以保存中緩存中。因?yàn)樗械牟僮鞫际窃谑聞?wù)中執(zhí)行的,而hibernate.cfg.xml數(shù)據(jù)源則默認(rèn)是不是自動提交的。解決的辦法如下:可以在hibernate.cfg.xml中填寫:
<property name="hibernate.connection.autocommit">true</property>
以下Spring使用hibernate.cfg.xml數(shù)據(jù)源
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> <property name="configLocation"> <value>classpath:hibernate.cfg.xml</value> </property> <property name="mappingLocations"> <list> <value>classpath:User.hbm.xml</value> </list> </property> </bean>
以上,介紹了Spring來管理Hibernate的好處在于,不用手動創(chuàng)建SessionFactory,Session,不用手動開啟提交關(guān)閉事務(wù),這一切完全都是由Spring來管理。并且Spring還提供了HibernateTemple的工具,使一切操作簡單方便。
dao層在Spring配置文件中配置如下:
<<span style="font-size:12px;">bean id="userDao" class="com.UserDao.UserDaoImpl"> <property name="sessionFactory" ref="sessionFactory"></property> </bean></span>
則在dao層的代碼如下:
package com.UserDao; import org.springframework.orm.hibernate3.HibernateTemplate; import com.user.User; public class UserDaoImpl extends HibernateTemplate implements UserDao { @Override public void insert(User user) { this.save(user); } }
這只是其中的關(guān)鍵的代碼。
關(guān)于為什么用Spring來管理Hibernate就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學(xué)到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
文章題目:為什么用Spring來管理Hibernate
當(dāng)前網(wǎng)址:http://vcdvsql.cn/article8/gjieip.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站營銷、微信小程序、手機(jī)網(wǎng)站建設(shè)、、網(wǎng)站建設(shè)、微信公眾號
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)