Spring整合Hibernate.docx_第1頁(yè)
Spring整合Hibernate.docx_第2頁(yè)
Spring整合Hibernate.docx_第3頁(yè)
Spring整合Hibernate.docx_第4頁(yè)
Spring整合Hibernate.docx_第5頁(yè)
已閱讀5頁(yè),還剩18頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

Spring3 整合Hibernate3 4 Java3 Arranged By KnownoSpring3整合Hibernate3實(shí)現(xiàn)簡(jiǎn)單的增刪改查(XML): 以前我們的代碼中是通過(guò)hibernate配置文件 hibernate.cfg.xml中設(shè)置和數(shù)據(jù)庫(kù)連接有關(guān)的信息:jdbc. .現(xiàn)在可以將這些配置全部放在spring中來(lái)進(jìn)行管理. 在我們整合過(guò)程之前的hibernate.cfg.xml可以不存在了.1. Spring中配置數(shù)據(jù)源的方法: 實(shí)例化一個(gè)類對(duì)象,后面有dao操作有關(guān)的代碼,可以直接飲用這個(gè)dataSource,和連接池有關(guān)的參數(shù). 以上的寫法, value的值都是固定的,硬編碼在配置文件中,如果不想修改配置文件.創(chuàng)建一個(gè)獨(dú)立的和數(shù)據(jù)源配置有關(guān)的屬性文件.占位符的形式來(lái)配置數(shù)據(jù)源,好處如果數(shù)據(jù)庫(kù)有關(guān)的配置信息發(fā)生改變不需要修改源文件: PropertyPlaceholderConfigurer classpath:perties2. 將其注入到XXDao中: 可通過(guò)注解或者是xml形式: Dao中操作過(guò)程中用到數(shù)據(jù)源,去找誰(shuí)? Srpingpublic class UserDaoImpl implements UserDao private DataSource dataSource;public DataSource getDataSource() return dataSource;Resource(name=dataSource) 這里引用datasource是spring中配置好一個(gè)bean的信息.public void setDataSource(DataSource dataSource) this.dataSource = dataSource;以上是注解的寫法,如果改成xml格式? 以上也只是得到一個(gè)和連接有關(guān)的DataSource而已,.實(shí)具體執(zhí)行的sql代碼還是要我們自己寫?正長(zhǎng)情況這些東西一定是hibernate幫我們做的.在srping中如何整合hibernate呢?以前的操作:1得到一個(gè)Configuration =讀取hibernate全局的配置文件2.得到一個(gè)sessionFactorySpring3整合hibernate3重點(diǎn)就是需要初始化SessionFactory這個(gè)bean,需要在Spring的配置文件中進(jìn)行配置,同時(shí)讓Spring來(lái)管理SessionFactroy,Session,Transaction等,實(shí)現(xiàn)實(shí)例:有了上面配置的datasource后就可以將其注入給SessionFactory了: com/etc/entity/Users.hbm.xml org.hibernate.dialect.MySQLDialecttruetrueupdate1. 新建web Project,增加支持Spring的完整包;spring-tx-3.2.15.RELEASE.jarspring-orm-3.2.15.RELEASE.jarspring-jdbc-3.2.15.RELEASE.jarspring-expression-3.2.15.RELEASE.jarspring-core-3.2.15.RELEASE.jarspring-context-support-3.2.15.RELEASE.jarspring-context-3.2.15.RELEASE.jarspring-beans-3.2.15.RELEASE.jarspring-aop-3.2.15.RELEASE.jar2. 增加Hibernate支持包(參考之前的筆記和項(xiàng)目):3. 其他支持包:commons-dbcp-1.2.2.jarcommons-pool-1.4.jarlog4j-1.2.17.jarslf4j-log4j12-1.5.8.jarmysql-connector-java-5.1.5-bin.jar增加外部jar支持的原則是,寧可少,根據(jù)錯(cuò)誤提示增加缺失的包進(jìn)來(lái);也不要一下子加太多.不能重復(fù)添加同名的jar。4. 添加(copy)perties文件到src目錄下:(可以取少量配置)# direct log messages to stdout #log4j.appender.stdout=org.apache.log4j.ConsoleAppenderlog4j.appender.stdout.Target=System.outlog4j.appender.stdout.layout=org.apache.log4j.PatternLayoutlog4j.appender.stdout.layout.ConversionPattern=%dABSOLUTE %5p %c1:%L - %m%n# direct messages to file hibernate.log #log4j.appender.file=org.apache.log4j.FileAppender#log4j.appender.file.File=hibernate.log#log4j.appender.file.layout=org.apache.log4j.PatternLayout#log4j.appender.file.layout.ConversionPattern=%dABSOLUTE %5p %c1:%L - %m%n# set log levels - for more verbose logging change info to debug #log4j.rootLogger=warn, stdout#.hibernate=info#.hibernate=debug# log HQL query parser activity#.hibernate.hql.ast.AST=debug# log just the SQL#.hibernate.SQL=debug# log JDBC bind parameters #.hibernate.type=info#.hibernate.type=debug# log schema export/update #.hibernate.tool.hbm2ddl=debug# log HQL parse trees#.hibernate.hql=debug# log cache activity #.hibernate.cache=debug# log transaction activity#.hibernate.transaction=debug# log JDBC resource acquisition#.hibernate.jdbc=debug# enable the following line if you want to track down connection # leakages when using DriverManagerConnectionProvider #.hibernate.connection.DriverManagerConnectionProvider=trace5. 新建(copy)perties文件,該文件可以在applicationContext.xml中進(jìn)行讀取:jdbc.driverClassName=com.mysql.jdbc.Driverjdbc.url=jdbc:mysql:/localhost:3306/testdbjdbc.username=rootjdbc.password=6. 建立實(shí)體類:/* * 實(shí)體類 * author knowno * */public class Users implements Serializable private int id;private String name;public int getId() return id;public void setId(int id) this.id = id;public String getName() return name;public void setName(String name) = name;7. 映射文件:Dao的部分,以后都按照這個(gè)標(biāo)準(zhǔn)走,一接口,一對(duì)應(yīng)的實(shí)現(xiàn)類;8. Dao接口:package com.etc.dao;import java.util.List;import com.etc.entity.Users;public interface UserDao public void add(Users u);public void update(Users u);public List query();public void del(Users u);9. Dao的實(shí)現(xiàn)類 :import org.springframework.orm.hibernate3.support.HibernateDaoSupport;在spring的jar中.在HibernateDaoSupport中有一個(gè)HibernateTemplate hibernateTemplate這個(gè)屬性去查看他的源碼,發(fā)現(xiàn)這個(gè)類中有很多方法和hibernate中的sessioin接口下的方法非常相似.在使用hibernateTemplate的時(shí)候,要注意需要提供一個(gè)SessioNFactory給他./* * Dao實(shí)現(xiàn)類 * author knowno * */public class UserDaoImpl extends HibernateDaoSupport implements UserDao public void add(Users u) System.out.println(user add);getHibernateTemplate().save(u);public void update(Users u) System.out.println(user update);super.getHibernateTemplate().update(u);public List query() System.out.println(user query);Query query = getSession().createQuery(from Users);return query.list();public void del(Users u) System.out.println(user delete);super.getHibernateTemplate().delete(u);10. 簡(jiǎn)單的實(shí)現(xiàn)dao的業(yè)務(wù)類:/* * 服務(wù)類 * author knowno * */public class UserService private UserDao ud;public UserDao getUd() return ud;public void setUd(UserDao ud) this.ud = ud;public void addUser(Users u) ud.add(u);public void updateUser(Users u) ud.update(u);public List queryUser() return ud.query();public void delete(Users u) ud.del(u);11. 增加applicationContext.xml(copy)文件到src目錄下:classpath:pertiescom/etc/entity/Users.hbm.xmlorg.hibernate.dialect.MySQLDialecttruetrueupdate測(cè)試類:public class TestQuery public static void main(String args) BeanFactory bf = new ClassPathXmlApplicationContext(applicationContext.xml);UserService us = (UserService) bf.getBean(us);/* * Users u = new Users(); u.setName(yyyyyy); us.addUser(u); */List list = us.queryUser();for (Users users : list) System.out.println(users.getId() + , + users.getName();Spring3整哈Hibernate3事務(wù):編程式事務(wù)管理Spring 的編程式事務(wù)管理概述在 Spring 出現(xiàn)以前,編程式事務(wù)管理對(duì)基于 POJO 的應(yīng)用來(lái)說(shuō)是唯一選擇。用過(guò) Hibernate 的人都知道,我們需要在代碼中顯式調(diào)用beginTransaction()、commit()、rollback()等事務(wù)管理相關(guān)的方法,這就是編程式事務(wù)管理。通過(guò) Spring 提供的事務(wù)管理 API,我們可以在代碼中靈活控制事務(wù)的執(zhí)行。在底層,Spring 仍然將事務(wù)操作委托給底層的持久化框架來(lái)執(zhí)行。Spring 的聲明式事務(wù)管理概述Spring 的聲明式事務(wù)管理在底層是建立在 AOP 的基礎(chǔ)之上的。其本質(zhì)是對(duì)方法前后進(jìn)行攔截,然后在目標(biāo)方法開始之前創(chuàng)建或者加入一個(gè)事務(wù),在執(zhí)行完目標(biāo)方法之后根據(jù)執(zhí)行情況提交或者回滾事務(wù)。聲明式事務(wù)最大的優(yōu)點(diǎn)就是不需要通過(guò)編程的方式管理事務(wù),這樣就不需要在業(yè)務(wù)邏輯代碼中摻雜事務(wù)管理的代碼,只需在配置文件中做相關(guān)的事務(wù)規(guī)則聲明(或通過(guò)等價(jià)的基于標(biāo)注的方式),便可以將事務(wù)規(guī)則應(yīng)用到業(yè)務(wù)邏輯中。因?yàn)槭聞?wù)管理本身就是一個(gè)典型的橫切邏輯,正是 AOP 的用武之地。Spring 開發(fā)團(tuán)隊(duì)也意識(shí)到了這一點(diǎn),為聲明式事務(wù)提供了簡(jiǎn)單而強(qiáng)大的支持。聲明式事務(wù)管理曾經(jīng)是 EJB 引以為傲的一個(gè)亮點(diǎn),如今 Spring 讓 POJO 在事務(wù)管理方面也擁有了和 EJB 一樣的待遇,讓開發(fā)人員在 EJB 容器之外也用上了強(qiáng)大的聲明式事務(wù)管理功能,這主要得益于 Spring 依賴注入容器和 Spring AOP 的支持。依賴注入容器為聲明式事務(wù)管理提供了基礎(chǔ)設(shè)施,使得 Bean 對(duì)于 Spring 框架而言是可管理的;而 Spring AOP 則是聲明式事務(wù)管理的直接實(shí)現(xiàn)者,這一點(diǎn)通過(guò)清單8可以看出來(lái)。通常情況下,筆者強(qiáng)烈建議在開發(fā)中使用聲明式事務(wù),不僅因?yàn)槠浜?jiǎn)單,更主要是因?yàn)檫@樣使得純業(yè)務(wù)代碼不被污染,極大方便后期的代碼維護(hù)。和編程式事務(wù)相比,聲明式事務(wù)唯一不足地方是,后者的最細(xì)粒度只能作用到方法級(jí)別,無(wú)法做到像編程式事務(wù)那樣可以作用到代碼塊級(jí)別。但是即便有這樣的需求,也存在很多變通的方法,比如,可以將需要進(jìn)行事務(wù)管理的代碼塊獨(dú)立為方法等等。因?yàn)閟pring 中的事務(wù)是基于aop的所以,事務(wù)需要加入和aop有關(guān)的包:配置文件需要加入的命名空間:xmlns:tx=/schema/txxsi:schemaLocation=”/schema/tx /schema/tx/spring-tx-3.0.xsd配置好的 applicationContext.xml文件格式如下:首先需要在appliationContext.xml中配置一個(gè)事務(wù)管理器bean,該bean為HibernateTransactionManager類型,當(dāng)然也可以使用DataSourceTransactionManager,該bean需要注入一個(gè)sessionFactory的bean.既可以通過(guò)sessionFactory獲取到dataSource的其他信息等. 然后告訴spring,我們使用spring來(lái)管理事務(wù)操作。如果是annotation的話:接下來(lái)就是在需要進(jìn)行事務(wù)管理的方法上加入一個(gè)注解transactional,既該方法需要進(jìn)行事務(wù)管理,spring就會(huì)對(duì)這個(gè)方法進(jìn)行事務(wù)管理操作咯.通常的事務(wù)操作都是放在service層的.Transactional 設(shè)置如下:l 事務(wù)傳播設(shè)置是 PROPAGATION_REQUIRED 使用現(xiàn)有事務(wù),沒(méi)有則啟動(dòng)新事務(wù)l 事務(wù)隔離級(jí)別是 ISOLATION_DEFAULTl 事務(wù)是 讀/寫 falsel 事務(wù)超時(shí)默認(rèn)是依賴于事務(wù)系統(tǒng)的,或者事務(wù)超時(shí)沒(méi)有被支持。任何 RuntimeException 將觸發(fā)事務(wù)回滾,但是任何 checked Exception 將不觸發(fā)事務(wù)回滾屬性類型描述傳播性propagation枚舉型:Propagation可選的傳播性設(shè)置隔離性isolation枚舉型:Isolation可選的隔離性級(jí)別(默認(rèn)值:ISOLATION_DEFAULT)只讀性readOnly布爾型讀寫型事務(wù) vs. 只讀型事務(wù)超時(shí)timeoutint型(以秒為單位)事務(wù)超時(shí)回滾異常類(rollbackFor)一組 Class 類的實(shí)例,必須是Throwable 的子類一組異常類,遇到時(shí) 必須 進(jìn)行回滾。默認(rèn)情況下checked exceptions不進(jìn)行回滾,僅unchecked exceptions(即RuntimeException的子類)才進(jìn)行事務(wù)回滾?;貪L異常類名(rollbackForClassname)一組 Class 類的名字,必須是Throwable的子類一組異常類名,遇到時(shí) 必須 進(jìn)行回滾不回滾異常類(noRollbackFor)一組 Class 類的實(shí)例,必須是Throwable 的子類一組異常類,遇到時(shí) 必須不 回滾。不回滾異常類名(noRollbackForClassname)一組 Class 類的名字,必須是Throwable 的子類一組異常類,遇到時(shí) 必須不 回滾1、 Propagation key屬性確定代理應(yīng)該給哪個(gè)方法增加事務(wù)行為。這樣的屬性最重要的部份是傳播行為。有以下選項(xiàng)可供使用:PROPAGATION_REQUIRED-支持當(dāng)前事務(wù),如果當(dāng)前沒(méi)有事務(wù),就新建一個(gè)事務(wù)。這是最常見(jiàn)的選擇。 PROPAGATION_SUPPORTS-支持當(dāng)前事務(wù),如果當(dāng)前沒(méi)有事務(wù),就以非事務(wù)方式執(zhí)行。 PROPAGATION_MANDATORY-支持當(dāng)前事務(wù),如果當(dāng)前沒(méi)有事務(wù),就拋出異常。 PROPAGATION_REQ

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論