詳細解釋Spring與Hibernate的整合原理
首先我們來看單純的使用Hibernate時管理資料來源:
在類路徑下建立一個hibernate.cfg.xml
寫入資料來源的資訊:
<hibernate-configuration>
<session-factory>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password">toor</property>
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.url">jdbc:mysql:///test_hibernate_spring</property>
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
<property name="show_sql">true</property>
<property name="format_sql">true</property>
<property name="hbm2ddl.auto">update</property>
<!-- C3P0 連線池的配置 -->
<property name="connection.provider_class">
org.hibernate.connection.C3P0ConnectionProvider
</property >
<property name="hibernate.c3p0.min_size">5</property>
<property name="hibernate.c3p0.max_size">10</property>
<property name="hibernate.c3p0.max_statements">50</property>
<property name="hibernate.c3p0.timeout">3600</property>
<property name="hibernate.c3p0.idle_test_period">120</property>
<property name="hibernate.c3p0.acquire_increment">2</property>
<!--c3p0配置結束 -->
<!-- session要從當前執行緒中產生-->
<property name="current_session_context_class">thread</property>
<mapping resource="domain/Person.hbm.xml" />
</session-factory>
</hibernate-configuration>
如上是hibernate的最簡單的資料來源配置。此處不進行過多解釋。
hibernate的簡單使用:
Configuration configuration = new Configuration().configure();
SessionFactory sessionFactory = configuration.buildSessionFactory();
sessionFactory = configuration.buildSessionFactory();
//從當前執行緒中(ThreadLocal)中,把session提取出來如果沒有就使用openSession()
Session session = sessionFactory.getCurrentSession();
//hibernate的所以操作都必須在事務中
Transaction transaction = session.beginTransaction();
Person p = new Person();
p.setName("111111111111111");
p.setDescription("2222222222222");
session.save(p);
transaction.commit();
如上就是hibernate的簡單使用過程。現在我們來看Spring與和hibernate的整合:
spring與hibernate的整合目的就是為了讓 IOC 容器來管理 Hibernate 的核心介面SessionFactory以及讓 Hibernate 使用上 Spring 的宣告式事務來進行事務操作.
但在Spring整合Hibernate時。處理資料來源有兩種方法:
1)依然使用Hibernate的hibernate.cfg.xml來寫資料來源資訊,在spring配置檔案中使用DI把這個檔案注入給SessionFactory介面
2)摒棄掉hibernate.cfg.xml,而將所有的資料來源配置資訊寫在spring的配置檔案中.下面詳細介紹這兩種方法:
方法一:
hibernate的配置檔案hibernate.cfg.xml保持如上資訊不變並把hibernate.cfg.xml檔案注入給spring提供的LocalSessionFactoryBean:
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<!-- 匯入hibernate配置檔案-->
<property name="configLocation">
<value>classpath:hibernate.cfg.xml</value>
</property>
</bean>
spring中使用hibernate則不需要直接通過hinernate來完成,而是通過spring提供的HibernateTemplate類來完成
<bean id="hibernateTemplate" class="org.springframework.orm.hibernate3.HibernateTemplate">
<property name="sessionFactory">
<ref bean="sessionFactory"/>
</property>
</bean>
spring來管理事務:
<!-- 配置事務管理器 -->
<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory">
<ref bean="sessionFactory"/>
</property>
</bean>
<!-- 事務的註解解析器 -->
<tx:annotation-driven transaction-manager="transactionManager"/>
在程式碼中使用:
操作將由hibernateTemplate來完成
@Resource(name="hibernateTemplate")
private HibernateTemplate hibernateTemplate;
@Transactional
public void savePerson(){
Person person = new Person();
person.setUsername("666");
person.setPassword("6666");
hibernateTemplate.save(person);
}
方法二:
不需要hibernate.cfg.xml來完成Spring與hibernate的整合:
此時給類LocalSessionFactoryBean注入的不是configLocation這個檔案而是一個dateSource除此之外還注入資料庫的方言,hbm.xml檔案等資訊。至於其他的如hibernateTemplate的注入,配置事務管理器,事務的註解解析器 等於上述一摸一樣:
程式碼詳情:
<!--匯入c3p0的資訊在次xml檔案中就可以使用匯入檔案的資訊-->
<context:property-placeholder location="classpath:c3p0DB.properties"/>
<!-- 配置 C3P0 資料來源 -->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="user" value="${jdbc.user}"></property>
<property name="password" value="${jdbc.password}"></property>
<property name="jdbcUrl" value="${jdbc.jdbcUrl}"></property>
<property name="driverClass" value="${jdbc.driverClass}"></property>
<property name="initialPoolSize" value="${jdbc.initPoolSize}"></property>
<property name="maxPoolSize" value="${jdbc.maxPoolSize}"></property>
</bean>
<!--注入datasource給sessionFactory以及資料庫的方言和hbm.xml-->
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource">
<ref bean="dataSource" />
</property>
<!-- 匯入對映檔案所在的路徑 -->
<property name="mappingDirectoryLocations">
<list>
<value>classpath:domain <!--載入這個路徑下的所有.hbm.xml-->
</value>
</list>
</property>
<!-- Hibernate其他配置 方言 等-->
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</prop>
<prop key="hbm2ddl.auto">update</prop>
</props>
</property>
</bean>
我們看到上述程式碼中在匯入c3p0連線池資訊的時候我們使用了:
<context:property-placeholder location="classpath:c3p0DB.properties"/>
除了這種方法還有:
<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations">
<value>classpath:c3p0DB.properties</value>
</property>
</bean>
這兩種方法都可以完成把外部properties資料匯入進來.然後通過${key}來訪問此properties檔案中的值。
相關推薦
詳細解釋Spring與Hibernate的整合原理
首先我們來看單純的使用Hibernate時管理資料來源: 在類路徑下建立一個hibernate.cfg.xml 寫入資料來源的資訊: <hibernate-configuration> <session-factory>
Java進階學習第二十四天(Spring框架:事務管理、Spring與Hibernate整合)
一、事務控制 1、引入 使用者訪問 > Action > Service > Dao 如何保證: 在service中呼叫2次dao,其中一個dao執行失敗,整個操作要回滾 2、事務控制概述 ① 程式設計式事務控制:自己手動控制事務 Jdbc程式
spring與hibernate整合配置檔案含連線池
spring的整個配置內容,對於專案整合最好是分開 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
spring與hibernate整合之sessionfactory的三種方式
方式1:只加載SessionFactory <bean id="sessionFactory"class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> <propertyn
IDEA 下寫出第一個 SSH 整合框架練手專案( 一 ,Spring 與 Hibernate 整合)
IDEA 下寫出第一個 SSH 整合框架練手專案( 一 ) 最近幾周快速的學完了 SSH 框架,因為很快,所以幾乎沒記住什麼,又抄著視訊寫了一個專案,決定自己只看原始碼的再寫一遍。 1. 新建meavn專案 首先,新建一個Meavn 專案,File <---
Spring與Hibernate整合的相關問題和解決方案(整合方案一:dataSource交給Spring來管理)
整合的關鍵點:Hibernate的SessionFactory物件交給Spring去建立;Hibernate的事務交給Spring的宣告式事務管理;(Hibernate的操作是基於事務的操作);整合步驟: 配置資料來源(採用C3P0連線池)<bean id="data
詳細分析spring與struts2的整合原理
spring與struts2如何整合: 1). 整合目標 ? 使 IOC 容器來管理 Struts2 的 Action! 2). 如何進行整合 ? 1. 正常匯入入 Struts2與spring包之後 還需要一個額外的包: st
ssh整合思想 Spring與Hibernate的整合 項目在服務器啟動則自動創建數據庫表
dtd 啟動 mysql5 建立 color 思想 bean .hbm.xml lte Spring整合Hibernate Spring的Web項目中,web.xml文件會自動加載,以出現歡迎首頁。也可以在這個文件中對Spring的配置文件進行監聽,自啟動配置文件, 以及之
ssh整合思想 Spring與Hibernate和Struts2的action整合 調用action添加數據庫 使用HibernateTemplate的save(entity)方法
all 自動 註意 pool 監聽 聲明屬性 struts2 技術 utf-8 自動調用Spring的bean.xml配置文件 需要web.xml啟動文件 代碼如下: <?xml version="1.0" encoding="UTF-8"?> <web
spring與hibernate 的整合
spring與hibernate的整合 hibernate的所有初始化資訊都是建立在配置檔案中的。如: Configuration ---> SessionFactory ---> Session . 那麼,我們在spring中,就只用直接去操作sessionFactory所
Spring與Hibernate的整合
1.管理SessionFactory 使用Spring整合Hibernate時我們不需要hibernate.cfg.xml檔案。首先,在applicationContext.xml中配置資料來源(dataSource)bean和session工廠(sessionFacto
Spring與Struts2整合的執行原理.
TomCat 啟動 –>載入web.xml檔案; 在web.xml檔案中 配置了Spring的監聽器,這個實現的是ServletContextListener介面,那麼當Web容器啟動的時候,這個監聽器就會執行. <listener>
將osworkflow與spring和hibernate整合的基本介紹
1. 將osworkflow與spring和hibernate結合的原因 1)簡化對osworkflow的配置 2)利用hibernate框架的一些特性,如持久化,快取等 3)事務管理,osworkflow本身是不支援事務的,而事務是作為一個
Spring與Mybatis整合
base package div classpath conf data pac 是否 ner 一 概述 1.整合的目的 將Mapper映射器的創建任務交給Spring容器。 二 具體實現 1.創建sqlSessionFactory: <bean id="sql
spring與struts2整合出現錯誤HTTP Status 500 - Unable to instantiate Action
alt 問題 blog src nbsp 文件 spa XML color 在進行spring和struts2整合的時候因為大意遇到了一個問題,費了半天神終於找到了問題所在,故分享出來望廣大博友引以為戒!! 我們都知道在spring和struts2整合時,spring接管了
spring與quartz整合實現分布式動態創建,刪除,改變執行時間定時任務(mysql數據庫)
ces value 我們 job clu xsd collect 註解 common 背景:因為在項目中用到了定時任務,當時想到了spring的quartz,寫完發現費了很大功夫,光是整合就花了一上午,其中最大的問題就是版本問題,項目中用的是spring3.2.8的版本,查
spring與mybati整合方法
interface start face mapper con tro p s org lose (1)spring配置文件: <!-- 引入jdbc配置文件 --> <context:property-placeholder lo
Spring+SpringMVC+hibernate整合開發
exp mvc margin tar e30 fio ilb fc14 h264 被瘟謎謫逼戲溫次蔡蒙磊疤回http://shequ.docin.com/vpe32249 空私錘氖園掠覆痔瓜傅殖http://jz.docin.com/gqsn83067 境噬栽品新嗚趙德
SSM整合(2): spring 與 mybatis 整合
分享 eth point names space json cal 返回 autowired 在進行完spring與springmvc整合之後, 繼續 spring與mybatis的整合. 既然是操作數據庫, 那必然不能缺少了連接屬性 一. db.properties j
Question20180104 對比編譯器、解釋器與Javac編譯原理
即時編譯 inf ali pro 友好 pre 目標 缺點 java、 編譯器與Javac編譯原理 在前文我們知道了Java是一種編譯語言和解釋語言,它的源代碼經過編譯器Javac編譯為能夠被JVM識別的二進制語言,然後JVM將其解釋為能夠被平臺識別的機器語言。那麽什