您好,登錄后才能下訂單哦!
如何進行Spring和Hibernate的集成,針對這個問題,這篇文章詳細介紹了相對應的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。
1.介紹
最近我參與了北美一家銀行的審計系統的后臺軟件設計和開發工作,除了使用Web Service以外,我們集成了Spring和Hibernate,通過Spring的HibernateTemplate實現了對數據庫數據的存取。眾所周知Hibernate是一種廣泛應用的一種強大的數據持久層技術, 另一方面Spring作為支持IOC的依賴注入框架,其優點是能夠非常好地集成大多數主流技術。 本文我們將討論如何集成 Spring 和Hibernate.
2.Spring和Hibernate基礎
在我們實際進入集成這兩個技術之前,讓我們理解這種集成需求,大家都知道Hibernate是一種位于應用和數據庫之間的強大的ORM 工具。 它可使應用以獨立平臺的方式從各種數據庫訪問數據,對應用來說沒有必要依賴于低級DBC 細節如管理連接, 處理statements 和result sets. 所有訪問特定數據源的細節很容易在Xml文件中配置,另一個好處是Hibernate和J2SE和J2EE應用兼容得很好。
使用Hibernate 問題之一是使用Hibernate Framework訪問數據庫的客戶應用必須依賴Hibernate APIs如Configuration, SessionFactory and Session. 這些個對象在應用代碼中持續擴散。而且應用代碼必須用手工維護和管理這些對象。但是在Spring的環境,業務對象通過IOC的幫助下是能夠通過配置完成的,簡單地說,一個對象狀態能夠從應用代碼中分離。意思是現在使用Hibernate 對象作為Spring Beans是可能的,他們能夠得到Spring提供的所有方便。
3.集成Sample
我們沒有打算研究Spring包里集成的各種API,我們想通過實例源碼來學習和理解這些APIs. 下列部分包括了集成Spring-Hiberante 的每個步驟并附有詳細的解釋。
3.1.創立數據庫
下面的應用使用Oracle數據庫。 安裝后, 先用管理員身份登錄和創建用戶schema,username and password,再以用戶身份登錄后去SQL command 或SQL Script運行以下SQL statement :create table Activitylog(id varchar(10), name varchar(20), taskcode varchar(3), tasktime timestamp);現在一個空表已創立。
3.2.ActivityLog類
現在讓我們創建叫做Activitylog POJO代碼用于存儲從Activitylog表取出的數據,此類的設計使表'Activitylog'的列名將被映射到Java類Activitylog適當類型的變量名。 可使用ant工具或plug-in產生,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.創建Hibernate Mapping 文件
我們已經在數據庫中創建了'Activitylog' 表和一個在應用層相應的Java類 class,我們需要創建Hibernate Mapping文件去把'Activitylog' 表映射到'Activitylog' Java 類,'Activitylog' 表的列名映射到'Activitylog' Java 類的變量,可使用ant工具或plug-in產生,讓我們看看Hibernate Mapping文件:
Activitylog.hbm.xml
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="com.xxxx.audit.pojo.activitylog" table=" activitylog ">
<id name="id" column="Id">
<generator class="assigned"/>
</id>
<property name="name">
<column name="Name"/>
</property>
<property name="taskcode">
<column name="Taskcode"/>
</property>
<property name="tasktime">
<column name="Tasktime"/>
</property>
</class>
</hibernate-mapping>
注意映射文件是一個Xml文件并且它的名字是Activitylog.hbm.xml. 文件名中'hbm' 代表它是Hibernate映射文件。 class 標記定義了數據庫表和Java類之間的映射。 'name' 屬性必須指向一個全路徑的Java類名,反之表屬性必須指向數據庫表,接下來的標記定義了列名和對應java變量之間的映射,'id' 標記作為主鍵定義了一行的標識,property標記有一個屬性叫'name' 指向Java變量名, 接下來的是它映射的數據庫表的列名。
3.4.創立Spring配置文件
這部分處理配置各種Spring需要的信息。 在Spring全部的業務對象在Xml文件中配置,配置的業務對象叫做 Spring Beans.這些Spring Beans可通過IOC維護,讓我們定義一個data source如下:
spring-hibernate.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans 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">
<bean id="myDataSource" class="org.apache.commons.dbcp.BasicDataSource" >
<property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"/>
<property name="url" value="jdbc:oracle:thin:@localhost:1521:XE"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</bean>
?
</beans>
上面bean定義了一個類型'org.apache.commons.dbcp.BasicDataSource'的data-source. 更重要的是, 它定義了各種訪問數據庫所需要的連接屬性。
關于如何進行Spring和Hibernate的集成問題的解答就分享到這里了,希望以上內容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注億速云行業資訊頻道了解更多相關知識。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。