日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

为什么要用Hibernate框架? 把SessionFactory,Session,Transcational封装成包含crud的工具类并且处理了事务,那不是用不着spring了?...

發(fā)布時間:2025/3/17 编程问答 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 为什么要用Hibernate框架? 把SessionFactory,Session,Transcational封装成包含crud的工具类并且处理了事务,那不是用不着spring了?... 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
既然用Hibernate框架訪問管理持久層,那為何又提到用Spring來管理以及整合Hibernate呢?把SessionFactory,Session,Transcational封裝成包含crud的工具類并且處理了事務(wù),那不是用不著spring了?Hibernate操作的步驟如下:1. 獲得Configuration對象2. 創(chuàng)建SessionFactory3. 創(chuàng)建Session4. 打開事務(wù)5. 進行持久化操作。比如上面的添加用戶操作6. 提交事務(wù)7. 發(fā)生異常,回滾事務(wù)8. 關(guān)閉事務(wù)使用Hibernate進行訪問持久層,每次都要進行這八個步驟。但是若使用Spring對Hibernate進行管理,又是怎么樣的呢?首先,Spring對Hibernate提供了HibernateTemple類。這個模版類對session進行封裝。并且Spring會默認為自動提交事務(wù)。所在在dao層直接寫入this.save(Object)即可。在實踐中,遇到了一個問題,無法插入數(shù)據(jù)庫,經(jīng)過一番折騰,多次實驗,驗證,總結(jié)一下原因,結(jié)果如下:注意:所有的操作都必須在事務(wù)中進行。若單純的使用Hibernate,則事務(wù)需要手動開啟提交關(guān)閉操作。當然也可以在Hibernate配置文件中,自動提交。若 使用Spring管理Hibernate,則默認的是自動提交事務(wù)。但是在此,需要注意的是:若使用Spring在配置文件中配置數(shù)據(jù)源而不使用 hibernate.cfg.xml,則可以成功插入數(shù)據(jù)庫,因為HibernateTemple默認提供自動提交事務(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ù)庫 中,但是可以保存中緩存中。因為所有的操作都是在事務(wù)中執(zhí)行的,而hibernate.cfg.xml數(shù)據(jù)源則默認是不是自動提交的。解決的辦法如下:可 以在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配置文件中配置如下:<bean id="userDao" class="com.UserDao.UserDaoImpl"><property name="sessionFactory" ref="sessionFactory"></property></bean>則在dao層的代碼如下:package com.UserDao; import org.springframework.orm.hibernate3.HibernateTemplate; import com.user.User;public class UserDaoImpl extends HibernateTemplate implements UserDao { @Overridepublic void insert(User user) {this.save(user); } }這只是其中的關(guān)鍵的代碼,至于完整的小demo,已經(jīng)上傳。正如上述所說,一切操作盡在事務(wù)中,事務(wù)這個概念想必大家不陌生吧,一般情況,事務(wù)應(yīng)該在業(yè)務(wù)邏輯層,而不是在dao層應(yīng)用。并且Spring對事務(wù)有很好的封裝,自己有一套事務(wù)管理的封裝,使業(yè)務(wù)邏輯與事務(wù)管理分離,進一步達到解耦作用。 上面內(nèi)容摘自csdn一個筆者的帖子, 帖子非常好,但是達不到完美就。下面的一內(nèi)容是補充。如果把SessionFactory,Session,Transcational封裝成包含crud的工具類并且處理了事務(wù),那不是用不著spring了? 如果你又這樣的疑問, 說明你一定是個愛思考喜歡鉆研喜愛技術(shù)的朋友。答案是可以的, 不過這點大名鼎鼎的spring早已為我們提供封裝好的HibernateTemplate類(org.springframework.orm.hibernate3.HibernateTemplate;)。 目的是說明可以不使用spring作為容器來管理Hibernate那么事務(wù)就需要你自己來處理了按mvc的模式dao不處理事物那么就要麻煩了,可以把操作hibernate處理crud的那八步封裝到工具類中比如HibrenateUtil,事物在這里進行處理,但是還是沒有在service層處理事物,當然spring是個很強大的框架,好處遠不止這些^-^。

轉(zhuǎn)載于:https://www.cnblogs.com/YingYue/p/3855484.html

總結(jié)

以上是生活随笔為你收集整理的为什么要用Hibernate框架? 把SessionFactory,Session,Transcational封装成包含crud的工具类并且处理了事务,那不是用不着spring了?...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。