新聞中心
1.介紹

目前成都創(chuàng)新互聯(lián)已為上1000家的企業(yè)提供了網(wǎng)站建設(shè)、域名、網(wǎng)站空間、成都網(wǎng)站托管、企業(yè)網(wǎng)站設(shè)計(jì)、黃龍網(wǎng)站維護(hù)等服務(wù),公司將堅(jiān)持客戶導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長,共同發(fā)展。
最近我參與了北美一家銀行的審計(jì)系統(tǒng)的后臺軟件設(shè)計(jì)和開發(fā)工作,除了使用Web Service以外,我們集成了Spring和Hibernate,通過Spring的HibernateTemplate實(shí)現(xiàn)了對數(shù)據(jù)庫數(shù)據(jù)的存取。眾所周知Hibernate是一種廣泛應(yīng)用的一種強(qiáng)大的數(shù)據(jù)持久層技術(shù), 另一方面Spring作為支持IOC的依賴注入框架,其優(yōu)點(diǎn)是能夠非常好地集成大多數(shù)主流技術(shù)。 本文我們將討論如何集成 Spring 和Hibernate.
2.Spring和Hibernate基礎(chǔ)
在我們實(shí)際進(jìn)入集成這兩個(gè)技術(shù)之前,讓我們理解這種集成需求,大家都知道Hibernate是一種位于應(yīng)用和數(shù)據(jù)庫之間的強(qiáng)大的ORM 工具。 它可使應(yīng)用以獨(dú)立平臺的方式從各種數(shù)據(jù)庫訪問數(shù)據(jù),對應(yīng)用來說沒有必要依賴于低級DBC 細(xì)節(jié)如管理連接, 處理statements 和result sets. 所有訪問特定數(shù)據(jù)源的細(xì)節(jié)很容易在Xml文件中配置,另一個(gè)好處是Hibernate和J2SE和J2EE應(yīng)用兼容得很好。
使用Hibernate 問題之一是使用Hibernate Framework訪問數(shù)據(jù)庫的客戶應(yīng)用必須依賴Hibernate APIs如Configuration, SessionFactory and Session. 這些個(gè)對象在應(yīng)用代碼中持續(xù)擴(kuò)散。而且應(yīng)用代碼必須用手工維護(hù)和管理這些對象。但是在Spring的環(huán)境,業(yè)務(wù)對象通過IOC的幫助下是能夠通過配置完成的,簡單地說,一個(gè)對象狀態(tài)能夠從應(yīng)用代碼中分離。意思是現(xiàn)在使用Hibernate 對象作為Spring Beans是可能的,他們能夠得到Spring提供的所有方便。
3.集成Sample
我們沒有打算研究Spring包里集成的各種API,我們想通過實(shí)例源碼來學(xué)習(xí)和理解這些APIs. 下列部分包括了集成Spring-Hiberante 的每個(gè)步驟并附有詳細(xì)的解釋。
3.1.創(chuàng)立數(shù)據(jù)庫
下面的應(yīng)用使用Oracle數(shù)據(jù)庫。 安裝后, 先用管理員身份登錄和創(chuàng)建用戶schema,username and password,再以用戶身份登錄后去SQL command 或SQL Script運(yùn)行以下SQL statement :create table Activitylog(id varchar(10), name varchar(20), taskcode varchar(3), tasktime timestamp);現(xiàn)在一個(gè)空表已創(chuàng)立。
3.2.ActivityLog類
現(xiàn)在讓我們創(chuàng)建叫做Activitylog POJO代碼用于存儲從Activitylog表取出的數(shù)據(jù),此類的設(shè)計(jì)使表'Activitylog'的列名將被映射到Java類Activitylog適當(dāng)類型的變量名。 可使用ant工具或plug-in產(chǎn)生,Activitylog類完整的代碼列舉如下:
- package com.xxx.audit.pojo;
- public class Activitylog {
- private String id;
- private String name;
- private String taskcode;
- private Timestamp tasktime;
- public Activitylog () {
- }
- public String getId(){
- return id;
- }
- public void setId(String id){
- this.id = id;
- }
- public String getName(){
- return name;
- }
- public void setName(String name){
- this.name = name;
- }
- public String getTaskcode(){
- return taskcode;
- }
- public void setTaskcode(String taskcode){
- this.taskcode = taskcode;
- }
- public Timestamp getTasktime(){
- return tasktime;
- }
- public void setTasktime(Timestamp tasktime){
- this.tasktime = tasktime;
- }
- public String toString(){
- return "Id = " + id + ", Name = " + name + ", Taskcode = "
- + taskcode + ", Tasktime = " + tasktime;
- }
- }
3.3.創(chuàng)建Hibernate Mapping 文件
我們已經(jīng)在數(shù)據(jù)庫中創(chuàng)建了'Activitylog' 表和一個(gè)在應(yīng)用層相應(yīng)的Java類 class,我們需要?jiǎng)?chuàng)建Hibernate Mapping文件去把'Activitylog' 表映射到'Activitylog' Java 類,'Activitylog' 表的列名映射到'Activitylog' Java 類的變量,可使用ant工具或plug-in產(chǎn)生,讓我們看看Hibernate Mapping文件:
- Activitylog.hbm.xml
- version="1.0"?>
- "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
-
name="com.xxxx.audit.pojo.activitylog" table=" activitylog "> -
name="id" column="Id"> -
class="assigned"/> -
name="name"> -
name="Name"/> -
name="taskcode"> -
name="Taskcode"/> -
name="tasktime"> -
name="Tasktime"/>
注意映射文件是一個(gè)Xml文件并且它的名字是Activitylog.hbm.xml. 文件名中'hbm' 代表它是Hibernate映射文件。 class 標(biāo)記定義了數(shù)據(jù)庫表和Java類之間的映射。 'name' 屬性必須指向一個(gè)全路徑的Java類名,反之表屬性必須指向數(shù)據(jù)庫表,接下來的標(biāo)記定義了列名和對應(yīng)java變量之間的映射,'id' 標(biāo)記作為主鍵定義了一行的標(biāo)識,property標(biāo)記有一個(gè)屬性叫'name' 指向Java變量名, 接下來的是它映射的數(shù)據(jù)庫表的列名。
3.4.創(chuàng)立Spring配置文件
這部分處理配置各種Spring需要的信息。 在Spring全部的業(yè)務(wù)對象在Xml文件中配置,配置的業(yè)務(wù)對象叫做 Spring Beans.這些Spring Beans可通過IOC維護(hù),讓我們定義一個(gè)data source如下:
- spring-hibernate.xml
- version="1.0" encoding="UTF-8"?>
xmlns="http://www.springframework.org/schema/beans" - xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://www.springframework.org/schema/beans
- http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">
id="myDataSource" class="org.apache.commons.dbcp.BasicDataSource" > -
name="driverClassName" value="oracle.jdbc.driver.OracleDriver"/> -
name="url" value="jdbc:oracle:thin:@localhost:1521:XE"/> -
name="username" value="root"/> -
name="password" value="root"/> - ?
上面bean定義了一個(gè)類型'org.apache.commons.dbcp.BasicDataSource'的data-source. 更重要的是, 它定義了各種訪問數(shù)據(jù)庫所需要的連接屬性。
4.總結(jié)
本文討論了Spring 和Hibernate的集成。 既討論了需求也討論了它帶來的好處。 通過一個(gè)詳細(xì)的實(shí)例一步步清晰地演示了集成工作。
當(dāng)前名稱:當(dāng)Spring遇到Hibernate的時(shí)候
網(wǎng)頁路徑:http://fisionsoft.com.cn/article/dpihipj.html


咨詢
建站咨詢
