1. 程式人生 > >Struts2+Spring+Hibernate step by step 06 整合Hibernate

Struts2+Spring+Hibernate step by step 06 整合Hibernate

emp 2.3 是否 ssh整合 配置 pla sets 映射類 veh

註:該系列教程。部分內容來自王健老師編寫ssh整合開發教程

Hibernate是一款優秀的ORM(Object Relation Mapping-對象關系映射圖)工具。與Struts、Spring項目並稱java領域的三大優秀框架之中的一個。

Hibernate主要是從表到java類(對象)的映射。

該章節代碼承接前面所述代碼。

第一步:整合Hibernate全部的包復制到WEB-INF/lib文件夾下:

技術分享圖片

圖-1

第二步:在com/xuzheng/model文件夾下,建立users表的映射類文件User.java例如以下:

提示:書寫Hibernate類的映射文件。一個類文件映射一個數據表,因為眼下我們在ssh數據庫中僅僅有一個表。所以僅僅建立一個文件就能夠了。

技術分享圖片

圖-2

第三步:書寫Hibernate的映射文件。Hibernate的映射文件以.hbm.xml結尾例如以下:

提示:建議將映射文件和類放在同一個文件夾下

技術分享圖片

圖-3

User.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.xuzheng.model.User" table="users"> <id name="id" column="id" type="string"> <generator class="uuid"></generator> </id> <property name="name" column="name"></property> <property name="pwd" column="pwd"></property> </class> </hibernate-mapping>

說明:

1、以<!DOCTYPE開頭的文檔類型定義

2、<class></class>中定義這User類與users表相應

3、<generator></generator>為聲明主鍵

4、<property></property>聲明其它屬性

第四步:改動applicationContext.xml文件,配置Hibernate例如以下:

	<!-- 1、 凝視之前Spring的事務管理-->	
	<!--  
	<bean id="transactionManager" 
		  class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
		<property name="dataSource" ref="dataSource"></property>
	</bean>
	-->
	<!--2、聲明Hibernate的sessionFactory  -->
	<bean id="sessionFactory" 
		  class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
		  <!-- 2.1|註入DataSource -->
		  <property name="dataSource" ref="dataSource"></property>
		  <property name="hibernateProperties">
		  	<props>
		  		<!-- 2.2、聲明Hibernate的屬性 -->
		  		<prop key="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</prop>
		  		<prop key="hibernate.show_sql">true</prop>
		  		<prop key="hibernate.current_session_context_class">thread</prop>
		  	</props>
		  </property>
		  <property name="mappingResources">
		  	<list>
		  		<!--2.3、配置hbm.xml配置文件  -->
		  		<value>com/xuzheng/model/user.hbm.xml</value>
		  	</list>
		  </property>
	</bean>
		
	<!--3、聲明Hibernate的transactionManager  -->
	<bean id="transactionManager" 
		  class="org.springframework.orm.hibernate3.HibernateTransactionManager">
		<property name="sessionFactory" ref="sessionFactory"></property>
	</bean>
提示:依照1~3進行改動和配置


第五步:配置好以後。公布項目啟動程序。直到能正常啟動項目為止。若不能正常啟動,應該檢查文件是否有錯。


第六步:改動OneDaoImpl.java,改動成為使用Hibernate的HQL語句進行查詢,例如以下:

package com.xuzheng.dao.impl;
import java.sql.Types;
import java.util.List;
import java.util.Map;
import javax.sql.DataSource;

import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.SqlParameter;
import org.springframework.jdbc.object.SqlFunction;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;

import com.xuzheng.dao.IOneDao;
import com.xuzheng.model.User;
public class OneDaoImpl extends HibernateDaoSupport implements IOneDao{
	//1、對類加入繼承 HibernateDaoSupport
	//2、去掉原有註入的DataSource
	public Map login(Map map) {
		String name = (String) map.get("name");
		String pwd = (String) map.get("pwd");
		//3、聲明HQL語句,註意當中的:name
		String sql = "select count(1) from users where name=:name and pwd=:pwd";
		//4、使用Session查詢
		List temp = getSession().createQuery(sql).setString("name", name)
		.setString("pwd", pwd)
		.list();
		int i = Integer.parseInt(temp.get(0).toString());
		System.out.println("此username的用戶數量:"+i);
		if(i >= 1){
			map.put("result", "1");
		}
		return map;
	}
	//查詢全部用戶列表
	public List query() {
		//5、改寫query方法
		List list = getSession().createCriteria(User.class).list();
		return list;
	}
}
提示:依照1~5的順序來實現

第七步:改動applicationContext.xml文件裏的OneDao例如以下:

<bean id="oneDao" class="com.xuzheng.dao.impl.OneDaoImpl">
		<property name="sessionFactory" ref="sessionFactory"></property>
	</bean>

提示:將原來註入DataSource屬性。改動成註入sessionFactory
第八步:公布執行項目。看能否正常啟動和訪問。


源碼下載:

http://download.csdn.net/detail/u014548782/7218965



Struts2+Spring+Hibernate step by step 06 整合Hibernate