MyEclipse下Spring+Hibernate整合

目前,SSH(Struts+Spring+Hibernate)是Web開發的一種經常使用框架組合,Struts實現了MVC,Hibernate實現了關係對象映射,Spring實現了基於Bean的配置管理。本文使用 MyEclipse實現Spring+Hibernate的整合。java

軟件和框架使用版本:mysql

MyEclipse:8.0web

Spring:2.5spring

Hibernate:3.2sql

MySQL:5.1數據庫

1.建立數據庫鏈接apache

1)首先在MyEclipse下切換Perspective至MyEclipse Database Explorer,在左側DB Browser中右鍵點擊,在對話框中選擇「New」,建立數據庫鏈接MySQL。數據庫鏈接的配置如圖1所示,須要填寫URL、用戶名、密碼、驅動等信息。session

圖 1app

2)數據庫鏈接配置成功後,左側DB Browser中會顯示該鏈接,右鍵點擊該鏈接,在對話框中選擇「Open connection」,顯示數據庫中的詳細信息,如圖2所示。在數據庫中已有一user表,在下面將使用Spring+Hibernate實現對該表的操做。框架

 

圖 2

2.新建Web工程,並配置Spring

1)切換Perspective至MyEclipse Java Enterprise,新建Web工程ssh,如圖3所示。若是在隨後的工做中還需整合Struts 2,則J2EE Specification Level應選擇Java EE 5.0,此處暫選用默認配置J2EE 1.4。 

 圖 3

2)右鍵點擊該工程,在對話框中選擇「MyEclipse->Add Spring Capabilities...」,添加Spring,並進行相關配置,如圖4所示,採用默認配置便可。

圖 4

3.配置Hibernate

1)右鍵點擊該工程,在對話框中選擇「MyEclipse->Add Hibernate Capabilities...」,添加Hibernate,並進行相關配置,如圖五、圖六、圖七、圖八、圖9所示。

因爲須要使用Spring配置Hibernate,所以選中全部的Library。

 

圖 5

選擇Spring的配置文件applicationContext.xml進行配置。

 

圖 6

選擇已有的Spring配置文件,並使用Spring配置Hibernate中的SessionFactory,SessionFactory的bean id爲sessionFactory。

圖 7

配置數據源DataSource的bean id爲dataSource,且其配置信息採用數據庫鏈接MySQL。

圖 8

不另寫SessionFactory類,而採用Spring爲Hibernate已設計的SessionFactory類。

圖 9

4.數據庫逆向工程

1)切換Perspective至MyEclipse Hibernate,右鍵點擊數據表user,在對話框中選擇「Hibernate Reverse Engineering...」,對user表的關係對象映射進行配置,如圖10所示,其中第一個紅框用於選擇Java源文件目錄,第二個紅框用於選擇是否建立關係對象映射文件,以hbm.xml結尾,第三個紅框用於選擇是否建立數據對象類,第四個紅框用於選擇是否建立數據訪問對象類,均選擇是,其餘採用默認配置便可。

 

圖 10

4.分析和測試

按上述步驟配置後就能夠在工程中實現Spring和Hibernate的整合,以及user表的關係對象映射,工程目錄如圖11所示,其中src目錄下的applicationContext.xml是Spring和Hibernate的核心配置文件,pojo包中的三個文件是與user表對應的數據對象類User.java、數據訪問對象類UserDAO.java、關係對象映射文件User.hbm.xml。

 

圖 11

applicationContext.xml內容以下所示:

  
  
  
  
  1. <?xml version="1.0" encoding="UTF-8"?> 
  2. <beans 
  3.     xmlns="http://www.springframework.org/schema/beans" 
  4.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
  5.     xmlns:p="http://www.springframework.org/schema/p" 
  6.     xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd"> 
  7.  
  8.  
  9.     <bean id="dataSource" 
  10.         class="org.apache.commons.dbcp.BasicDataSource"> 
  11.         <property name="driverClassName" 
  12.             value="com.mysql.jdbc.Driver"> 
  13.         </property> 
  14.         <property name="url" value="jdbc:mysql://localhost:3306/web"></property> 
  15.         <property name="username" value="root"></property> 
  16.         <property name="password" value="root"></property> 
  17.     </bean> 
  18.     <bean id="sessionFactory" 
  19.         class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> 
  20.         <property name="dataSource"> 
  21.             <ref bean="dataSource" /> 
  22.         </property> 
  23.         <property name="hibernateProperties"> 
  24.             <props> 
  25.                 <prop key="hibernate.dialect"> 
  26.                     org.hibernate.dialect.MySQLDialect  
  27.                 </prop> 
  28.             </props> 
  29.         </property> 
  30.         <property name="mappingResources"> 
  31.             <list> 
  32.                 <value>pojo/User.hbm.xml</value></list> 
  33.         </property></bean> 
  34.     <bean id="UserDAO" class="pojo.UserDAO"> 
  35.         <property name="sessionFactory"> 
  36.             <ref bean="sessionFactory" /> 
  37.         </property> 
  38.     </bean></beans> 

其中,bean dataSource實現數據庫鏈接配置,bean sessionFactory實現Hibernate的SessionFactory,並使用bean dataSource的鏈接配置,bean UserDAO實現User數據對象訪問,並使用bean sessionFactory建立會話。

User.java代碼部分以下:

  
  
  
  
  1. public class User implements java.io.Serializable {  
  2.  
  3.     // Fields  
  4.  
  5.     private Integer id;  
  6.     private String password;  
  7.     private String name;  
  8.     private String school;  
  9.  
  10.     // Constructors  
  11.  
  12.     /** default constructor */ 
  13.     public User() {  
  14.     }  
  15.  
  16.     /** full constructor */ 
  17.     public User(String password, String name, String school) {  
  18.         this.password = password;  
  19.         this.name = name;  
  20.         this.school = school;  
  21.     }  
  22.  
  23.     // Property accessors
  24. ....
  25. } 

其中,對User對象類進行了定義,包括與user表字段對應的屬性值、構造函數、Get/Set函數等。

UserDAO.java代碼部分以下所示:

  
  
  
  
  1. public class UserDAO extends HibernateDaoSupport {  
  2.     private static final Log log = LogFactory.getLog(UserDAO.class);  
  3.     // property constants  
  4.     public static final String PASSWORD = "password";  
  5.     public static final String NAME = "name";  
  6.     public static final String SCHOOL = "school";  
  7.  
  8.     protected void initDao() {  
  9.         // do nothing  
  10.     }  
  11.  
  12.     public void save(User transientInstance) {  
  13.         log.debug("saving User instance");  
  14.         try {  
  15.             getHibernateTemplate().save(transientInstance);  
  16.             log.debug("save successful");  
  17.         } catch (RuntimeException re) {  
  18.             log.error("save failed", re);  
  19.             throw re;  
  20.         }  
  21.     }
  22. ...

該類繼承了Spring的HibernateDaoSupport類,調用對象實例自己的getHibernateTemplate獲取HibernateTemplate對象,進而調用其save、delete等方法實現數據的增長、刪改等操做。

User.hbm.xml內容以下所示:

  
  
  
  
  1. <?xml version="1.0" encoding="utf-8"?> 
  2. <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"  
  3. "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> 
  4. <!--   
  5.     Mapping file autogenerated by MyEclipse Persistence Tools  
  6. --> 
  7. <hibernate-mapping> 
  8.     <class name="pojo.User" table="user" catalog="web"> 
  9.         <id name="id" type="java.lang.Integer"> 
  10.             <column name="id" /> 
  11.             <generator class="identity" /> 
  12.         </id> 
  13.         <property name="password" type="java.lang.String"> 
  14.             <column name="password" length="10" not-null="true" /> 
  15.         </property> 
  16.         <property name="name" type="java.lang.String"> 
  17.             <column name="name" length="10" not-null="true" /> 
  18.         </property> 
  19.         <property name="school" type="java.lang.String"> 
  20.             <column name="school" length="30" not-null="true" /> 
  21.         </property> 
  22.     </class> 
  23. </hibernate-mapping> 

其中定義了user表和User類的關係對象映射。

在UserDAO中編寫一個主函數實現向user表中寫入數據,以下所示:

  
  
  
  
  1. public static void main(String args[])  
  2. {  
  3.     //從src/applicationContext.xml裝載BeanFactory  
  4.     Resource res =new FileSystemResource("src/applicationContext.xml");       
  5.     BeanFactory factory = new XmlBeanFactory(res);  
  6.     //從BeanFactory獲取UserDAO  
  7.     UserDAO userDAO = (UserDAO) factory.getBean("UserDAO");  
  8.     //添加新User  
  9.     User user = new User("123","Tom","Tsinghua");  
  10.     userDAO.save(user);       

執行後,查看user表,若是該表已新增一條記錄,說明配置成功。

 

圖 12

相關文章
相關標籤/搜索