成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

為什么用Spring來管理Hibernate?

開發 后端
若使用Spring管理Hibernate,則默認的是自動提交事務。但是在此,需要注意的是:若使用Spring在配置文件中配置數據源而不使用hibernate.cfg.xml,則可以成功插入數據庫,因為HibernateTemple默認提供自動提交事務。詳細如下

為什么要用Hibernate框架?這個在《Hibernate介紹》博客中已經提到了。

既然用Hibernate框架訪問管理持久層,那為何又提到用Spring來管理以及整合Hibernate呢?

首先我們來看一下Hibernate進行操作的步驟。比如添加用戶的一個步驟。在上一篇博客中《八步詳解Hibernate的搭建及使用》詳細介紹到了Hibernate使用的步驟。以下的代碼來自上篇博客,在此為了解釋提出的問題,只做一個截圖,若想看完整代碼示例,可以參考《八步詳解Hibernate的搭建及使用

看截圖,可以看出,Hibernate操作的步驟如下:

  1. 獲得Configuration對象
  2. 創建SessionFactory
  3. 創建Session
  4. 打開事務
  5. 進行持久化操作。比如上面的添加用戶操作
  6. 提交事務
  7. 發生異常,回滾事務
  8. 關閉事務

使用Hibernate進行訪問持久層,每次都要進行這八個步驟。但是若使用Spring對Hibernate進行管理,又是怎么樣的呢?

首先,Spring對Hibernate提供了HibernateTemple類。這個模版類對session進行封裝。并且Spring會默認為自動提交事務。所在在dao層直接寫入this.save(Object)即可。

在實踐中,遇到了一個問題,無法插入數據庫,經過一番折騰,多次實驗,驗證,總結一下原因,結果如下:

注意:所有的操作都必須在事務中進行。若單純的使用Hibernate,則事務需要手動開啟提交關閉操作。當然也可以在Hibernate配置文件中,自動提交。

若使用Spring管理Hibernate,則默認的是自動提交事務。但是在此,需要注意的是:若使用Spring在配置文件中配置數據源而不使用hibernate.cfg.xml,則可以成功插入數據庫,因為HibernateTemple默認提供自動提交事務。在Spring的配置文件配置數據源如下:使用此數據源需要的jar如下:commons-dbcp.jar,commons-pool.jar,msbase.jar,mssqlserver.jar, msutil.jar,sqljdbc4.jar;

  1. <bean id="dataSource"  class="org.apache.commons.dbcp.BasicDataSource">  
  2.     <property name="driverClassName" value="com.microsoft.jdbc.sqlserver.SQLServerDriver"></property>  
  3.     <property name="url" value="jdbc:sqlserver://192.168.24.176:1433;database=test"></property>  
  4.     <property name="username" value="sa"></property>  
  5.     <property name="password" value="123"></property>  
  6. </bean>  
  7. <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">  
  8.     <property name="dataSource" ref="dataSource"></property>      
  9.     <!-- hibernate屬性配置 -->  
  10.     <property name="hibernateProperties">  
  11.         <props>  
  12.             <prop key="hibernate.dialect">org.hibernate.dialect.SQLServerDialect</prop>  
  13.             <prop key="hibernate.hbm2ddl.auto">update</prop>  
  14.         </props>  
  15.     </property>  
  16. !--         如果采用傳統的hbm.xml的方式,可以采用如下方式來簡化注冊hbm.xml的步驟,并且class為LocalSessionFactoryBean -->  
  17.     <property name="mappingLocations">  
  18.         <list>  
  19.             <value>classpath:User.hbm.xml</value>  
  20.         </list>  
  21.     </property>  
  22. </bean> 

若Spring中不是直接配置數據源,而是使用hibernate.cfg.xml,則是無法若直接this.save(Object),則無法插入數據庫中,但是可以保存中緩存中。因為所有的操作都是在事務中執行的,而hibernate.cfg.xml數據源則默認是不是自動提交的。解決的辦法如下:可以在hibernate.cfg.xml中填寫:

<property name="hibernate.connection.autocommit">true</property>

以下Spring使用hibernate.cfg.xml數據源

  1. <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">  
  2.      <property name="configLocation">  
  3.             <value>classpath:hibernate.cfg.xml</value>  
  4.         </property>  
  5.     <property name="mappingLocations">  
  6.             <list>  
  7.                 <value>classpath:User.hbm.xml</value>  
  8.             </list>  
  9.     </property>  
  10.     </bean>  

以上,介紹了Spring來管理Hibernate的好處在于,不用手動創建SessionFactory,Session,不用手動開啟提交關閉事務,這一切完全都是由Spring來管理。并且Spring還提供了HibernateTemple的工具,使一切操作簡單方便。

dao層在Spring配置文件中配置如下:

  1. <<span style="font-size:12px;">bean id="userDao" class="com.UserDao.UserDaoImpl">  
  2.     <property name="sessionFactory" ref="sessionFactory"></property>  
  3. </bean></span> 

則在dao層的代碼如下:

  1. package com.UserDao;  
  2. import org.springframework.orm.hibernate3.HibernateTemplate;  
  3. import com.user.User;  
  4.  
  5. public class UserDaoImpl extends HibernateTemplate implements UserDao {  
  6. @Override 
  7.     public void insert(User user) {  
  8.         this.save(user);      
  9.     }  

這只是其中的關鍵的代碼,至于完整的小demo,已經上傳。

正如上述所說,一切操作盡在事務中,事務這個概念想必大家不陌生吧,一般情況,事務應該在業務邏輯層,而不是在dao層應用。并且Spring對事務有很好的封裝,自己有一套事務管理的封裝,使業務邏輯與事務管理分離,進一步達到解耦作用。下一篇博客,我們繼續會講解Spring管理Hibernate中的事務管理。

原文鏈接:http://blog.csdn.net/llhhyy1989/article/details/7430086

【編輯推薦】

  1. Java并行編程:從并行任務集獲取反饋
  2. Hibernate復合主鍵映射
  3. Hibernate事務與并發問題處理
  4. 讓Hibernate顯示SQL語句的綁定參數值
  5. Hibernate延遲加載剖析與代理模式應用
責任編輯:林師授 來源: llhhyy1989的博客
相關推薦

2021-12-30 19:36:48

GoDubboJava

2022-01-07 14:05:33

DubboGoJava

2021-08-10 18:54:48

射頻系統SMA

2022-07-13 07:06:47

HTTPSHTTP協議

2020-07-20 14:09:36

Python編程語言注釋符

2023-10-10 08:24:12

2023-02-13 15:03:33

JDKJavaHotSpot

2009-07-07 17:18:57

Facelets介紹JSP與Facelet

2024-12-25 15:32:29

2025-01-06 08:28:45

C語言操作系統程序

2020-12-25 09:07:38

EclipseCode工具

2022-06-26 00:24:57

C語言操作系統語言

2023-11-02 08:20:54

SocketZygoteAndroid

2021-04-18 12:37:46

bspwmLinux窗口管理器

2024-01-25 10:23:22

對象存儲存儲數據

2021-04-06 15:38:01

手機國產蘋果

2020-05-11 09:00:57

Redis監控Zabbix

2020-06-16 09:17:33

ESRedis監控

2022-02-16 22:37:00

流式SQLSQL數據庫

2018-02-09 09:36:25

DubboSpring Clou支付
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 欧美偷偷操| 精品国产精品国产偷麻豆 | 久久综合九九 | 国产在线高清 | 色男人的天堂 | 日本人麻豆 | 精品入口麻豆88视频 | 91不卡| 欧美精品一区二区免费 | 伊人伊人伊人 | 国精久久| 91在线视频免费观看 | 成人h动漫精品一区二区器材 | 黄色一级视频 | 91 视频网站 | 国产一级免费在线观看 | 啪视频在线 | 亚洲欧美精品在线观看 | 日韩中文字幕在线观看视频 | 久久久精品一区二区三区 | 中日av| 欧美视频免费在线 | 亚洲三级av| 久久91av| 久久精品一 | 久久黄视频 | 婷婷五月色综合香五月 | 亚洲高清免费观看 | 香蕉久久a毛片 | 亚洲欧美综合精品久久成人 | 91最新在线视频 | 亚洲视频手机在线 | 日韩一区二区三区在线播放 | 国产一区二区欧美 | 免费一区二区三区 | 欧美极品少妇xxxxⅹ免费视频 | 不卡一二三区 | 免费精品 | 日韩精品一区二区在线 | 中文字幕亚洲视频 | 久草视|