今天我們進行SSH配置的最後一步Hibernate的集成。
四,集成Hibernate
4.1 集成Hibernate相關的:
a) 這裏我們採用的proxool連接池。
據說在Hibernate提供的三種連接池中,效率最好的一個。這裏我且聽信網絡大衆的話,等以後我有技術有能力了,一定會親自測試一下。
b) Hibernate映射採用Hibernate Annonations 技術。
還是在網上,翻了一堆資料後,發現annonations是最爲優雅,也是最爲省力,效率最高的
4.2 先創建一個數據庫。這裏我創建一個叫 miziData 的數據庫,並新建了一個叫User的表,這用來最後我們測試用。
/**//*==============================================================*/
/**//* DBMS name: MySQL5 */
/**//* Created on: 2009-04-27 22:50*/
/**//*==============================================================*/
SET FOREIGN_KEY_CHECKS=0;
DROP DATABASE IF EXISTS `miziData`;
CREATE DATABASE `miziData`
CHARACTER SET 'utf8'
COLLATE 'utf8_general_ci';
USE `miziData`;
/**//*==============================================================*/
/**//* Table: USER */
/**//*==============================================================*/
create table USER (
ID varchar(32) not null,
USERNAME varchar(32) null,
SEX int null,
AGE int null,
PASSWORD varchar(32) null,
CREATEDATE datetime null,
constraint PK_USER primary key (ID)
)
type = InnoDB;
4.3 配置proxool連接池信息,在src下面新建一個proxool.xml文件,並修改內容如下:
<?xml version="1.0" encoding="utf-8"?>
<!-- the proxool configuration can be embedded within your own application's.
Anything outside the "proxool" tag is ignored. -->
<something-else-entirely>
<proxool>
<!-- ### 連接池別名########### -->
<alias>DbPool</alias>
<!-- ### proxool只能管理自己產生的連接########### -->
<driver-url>jdbc:mysql://localhost:3306/miziData?characterEncoding=UTF-8</driver-url>
<!-- ###JDBC驅動程式########### -->
<driver-class>com.mysql.jdbc.Driver</driver-class>
<!-- ### 數據庫信息########### -->
<driver-properties>
<property name="user" value="root"/>
<property name="password" value="root"/>
</driver-properties>
<!-- ### proxool自動偵察各個連接狀態的時間間隔(毫秒),偵察到空閒的連接就馬上回收,超時的銷燬 ########### -->
<house-keeping-sleep-time>28000</house-keeping-sleep-time>
<!-- ### 空閒連接最少保持數########### -->
<prototype-count>10</prototype-count>
<!-- ### 最大/最小連接數########### -->
<maximum-connection-count>50</maximum-connection-count>
<minimum-connection-count>10</minimum-connection-count>
<!-- ### 最大/最小連接數########### -->
<maximum-active-time>3600000</maximum-active-time>
<!-- ### 如果發現了空閒的數據庫連接
house keeper 將會用這個語句來測試.這個語句最好非常快的被執行.
如果沒有定義,測試過程將會被忽略########### -->
<house-keeping-test-sql>select CURRENT_DATE</house-keeping-test-sql>
<!-- ### 如果爲true,在每個連接被測試前都會服務這個連接,如果一個連接失敗,那麼將被丟棄,
另一個連接將會被處理,如果所有連接都失敗,一個新的連接將會被建立。否則將會拋出一個SQLException異常########### -->
<test-before-use>true</test-before-use>
<!-- ### 如果爲true,那麼每個被執行的SQL語句將會在執行期被log記錄(DEBUG LEVEL).
你也可以註冊一個ConnectionListener (參看ProxoolFacade)得到這些信息########### -->
<trace>true</trace>
<!-- ### 日誌統計跟蹤類型 ########### -->
<statistics-log-level>DEBUG</statistics-log-level>
</proxool>
</something-else-entirely>
4.4 在Src下新建hibernate.xml,並修改內容如下:
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<!-- ### 定義Hibernate的連接加載類 ########### -->
<property name="hibernate.connection.provider_class">org.hibernate.connection.ProxoolConnectionProvider</property>
<!-- ### 連接池別名,注意要與proxool的別名一致 ########### -->
<property name="hibernate.proxool.pool_alias">DbPool</property>
<!-- ### 向Hibernate聲明連接池的配置文件位置,通常與proxool在同一位置,如果不同請注意路徑 ########### -->
<property name="hibernate.proxool.xml">proxool.xml</property>
<!-- ### 聲明SQL語句的方言 ##########-->
<property name="dialect">org.hibernate.dialect.MySQLDialect</property>
<!-- ### 解決hibernate和jdbc不能同時使用proxool的問題 ########## -->
<!-- ### <property name="hibernate.proxool.existing_pool">true</property> ###########-->
<!-- ### Echo all executed SQL to stdout ########## -->
<!-- ### 定義是否顯示Hibernate生成的SQL語言,一般在調試階段設爲true,完成後再改成false,這樣有利於調試 ##########-->
<property name="show_sql">true</property>
</session-factory>
</hibernate-configuration>
4.5 修改application.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"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">
<!-- ### AnnotationSessionFactoryBean是從LocalSessionFactoryBean類繼承過來的 ########## -->
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
<property name="configLocation" value="classpath:hibernate.xml" />
</bean>
<!--
* 這裏bean的ID對應的是 struts.xml action的class
****************-->
<bean id="Hello" class="test.action.Hello" scope="prototype"></bean>
</beans>
4.6 web.xml 加入 proxoolAdmn 監聽,內容如下,
<?xml version="1.0" encoding="UTF-8"?>
<web-app id="WebApp_ID" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<!-- ###################################### -->
<!-- ########## Struts2 ################## -->
<!-- ###################################### -->
<!--
* Struts2的主要的Filter,負責四個方面的功能:
* (1)執行Actions
* (2)清除ActionContext
* (3)維護靜態內容
* (4)清除request生命週期內的XWork的interceptors
* 另注:該過濾器應該過濾所有的請求URL。一般被設置爲/*
************ -->
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
</filter>
<!-- ### Proxool連接池監聽 ########### -->
<!-- @Version ver1.0 | 20090428 -->
<servlet>
<servlet-name>ProxoolAdmin</servlet-name>
<servlet-class>
org.logicalcobwebs.proxool.admin.servlet.AdminServlet
</servlet-class>
</servlet>
<!-- ###################################### -->
<!-- ########## Spring2 ################## -->
<!-- ###################################### -->
<!--
* [ <context-param></context-param ] =>用來設定web站臺的環境參數
* [ <param-name></param-name> ] (子元素)=> 用來指定參數的名稱
* [ <param-value></param-value> ] (子元素)=> 用來設定參數值
* ************
* 從類路徑下加載spring的配置文件, 多個配置文件可以用逗號和空格區分
* classpath: 關鍵字特指類路徑下加載
******************** -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext*.xml</param-value>
</context-param>
<!--
* [<listener></listener>]=>用來設定監聽接口
* [<listener-class></listener-class>](子元素)=>定義Listener的類名稱
* *******
* 負責啓動spring的監聽器
* 它將引用處的上下文參數獲得spring配置文件地址
* 指定Spring提供的ContextLoaderListener Web 容器監聽器,
* 該監聽器在web容器啓動時自動運行並且根據ContextLoaderListener參數
* 獲取Spring配置文件,並啓動Spring容器。
************** -->
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<servlet-mapping>
<servlet-name>ProxoolAdmin</servlet-name>
<url-pattern>/proxoolPool</url-pattern>
</servlet-mapping>
<display-name>miziStudy</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
</web-app>
4.7 導入相關包,這次關聯到的包很多,其中有包括hibernate,annotations,proxool等
我試過了 這些包 缺一不可。。。
4.8 測試proxool 數據連接池是否工作。啓動tomcat..成功後在瀏覽器中輸入http://localhost/miziStudy/proxoolPool
如果你得出的頁面和我一致,那麼數據庫連接成功。
可以這麼說吧,SSH(Spring2.5+Struts2+Hibernate3.4)的最簡配置到這裏已經結束了,但是這是永遠不夠了,還缺了好多東西沒有,比如web.xxml的filter,spring 的AOP,切片,hibernate的事務等等許多還沒有在這裏顯示出來,但是起碼我們配置成功了,接下來我會不斷用新的實例來豐富這個簡單的配置,大家拭目以待吧!!!其實偶自己是最期待的,因爲每個實例出來,就代表着我又進一步。。。。加油!!