Struts2+Hibernate+Spring 整合示例==》Spring整合Struts2简单示例==》Spring整合Hibernate简单示例

来源:互联网 发布:果冻录音软件怎么样 编辑:程序博客网 时间:2024/05/29 17:19

Struts2+Hibernate+Spring

整合

 

Struts2+Hibernate+Spring 整合示例

[-]

  1. Struts2HibernateSpring 整合示例
    1. Spring整合Struts2Hibernate原理概述
    2. 项目结构
    3. webxml配置文件
    4. applicationContextxml配置
    5. strutsxml配置
    6. RegistActionjava代码清单
    7. personDaojava 代码清单
    8. personDaoHibernatejava代码清单
    9. Personjava代码清单
    10. Personhbmxml配置
    11. Servicejava代码清单
    12. ServiceImpljava代码清单
    13. 运行结果

Struts2+Hibernate+Spring 整合示例

Spring整合Struts2、Hibernate原理概述:

        从用户角度来看,用户发出HTTP请求,当MVC框架的控制器组件拦截到用户请求时,将调用系统的业务逻辑组件,业务逻辑组件则调用系统的DAO组件,而DAO组件则依赖于SessionFactory和DataSource等底层组件实现数据库访问。

        从系统实现角度看,Ioc容器先创建SessionFactory和DataSource等底层组件,然后将这些底层组件注入给DAO组件,提供一个完整的DAO组件,并将此DAO组件注入给业务逻辑组件,从而提供一个完整的业务逻辑组件,而业务逻辑组件又被注入给控制器组件,控制器组件负责拦截用户请求,并将处理结果呈现给用户——这一系列的衔接,都由spring的IoC容器提供实现。

        简单来说,Spring通过IoC容器上管(Struts2)Action的创建并依赖注入给控制器,下管(hibernate)SessionFactory的创建并依赖注入给DAO组件,是一个巨大的工厂。(个人理解)

源代码下载:Regist_S2SH.rar

1.项目结构:

2.web.xml配置文件:

[html] view plain copy
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"  
  3.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  4.     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee   
  5.     http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">  
  6.     <welcome-file-list>  
  7.         <welcome-file>index.jsp</welcome-file>  
  8.     </welcome-file-list>  
  9.     <!-- 使用ContextLoaderListener初始化Spring容器 -->  
  10.     <listener>  
  11.         <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>  
  12.     </listener>  
  13.     <!-- 定义Struts 2的FilterDispathcer的Filter -->  
  14.     <filter>  
  15.         <filter-name>struts2</filter-name>  
  16.         <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>  
  17.     </filter>  
  18.     <!-- FilterDispatcher用来初始化Struts 2并且处理所有的WEB请求。 -->  
  19.     <filter-mapping>  
  20.         <filter-name>struts2</filter-name>  
  21.         <url-pattern>/*</url-pattern>  
  22.     </filter-mapping>  
  23. </web-app>  

3.applicationContext.xml配置

[html] view plain copy
  1. <?xml version="1.0" encoding="GBK"?>  
  2. <!-- 指定Spring配置文件的Schema信息 -->  
  3. <beans xmlns="http://www.springframework.org/schema/beans"  
  4.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  5.     xmlns:aop="http://www.springframework.org/schema/aop"  
  6.     xmlns:tx="http://www.springframework.org/schema/tx"  
  7.     xsi:schemaLocation="http://www.springframework.org/schema/beans   
  8.     http://www.springframework.org/schema/beans/spring-beans-3.0.xsd  
  9.     http://www.springframework.org/schema/tx   
  10.     http://www.springframework.org/schema/tx/spring-tx-3.0.xsd  
  11.     http://www.springframework.org/schema/aop   
  12.     http://www.springframework.org/schema/aop/spring-aop-3.0.xsd">  
  13.     <!-- 定义数据源Bean,使用C3P0数据源实现 -->  
  14.     <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"  
  15.         destroy-method="close">  
  16.         <!-- 指定连接数据库的驱动 -->  
  17.         <property name="driverClass" value="com.mysql.jdbc.Driver"/>  
  18.         <!-- 指定连接数据库的URL -->  
  19.         <property name="jdbcUrl" value="jdbc:mysql://localhost/javaee"/>  
  20.         <!-- 指定连接数据库的用户名 -->  
  21.         <property name="user" value="root"/>  
  22.         <!-- 指定连接数据库的密码 -->  
  23.         <property name="password" value="1120"/>  
  24.         <!-- 指定连接数据库连接池的最大连接数 -->  
  25.         <property name="maxPoolSize" value="40"/>  
  26.         <!-- 指定连接数据库连接池的最小连接数 -->  
  27.         <property name="minPoolSize" value="1"/>  
  28.         <!-- 指定连接数据库连接池的初始化连接数 -->  
  29.         <property name="initialPoolSize" value="1"/>  
  30.         <!-- 指定连接数据库连接池的连接的最大空闲时间 -->  
  31.         <property name="maxIdleTime" value="20"/>  
  32.     </bean>  
  33.     <!-- 定义Hibernate的SessionFactory -->  
  34.     <bean id="sessionFactory"  
  35.         class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">  
  36.         <!-- 依赖注入数据源,注入正是上面定义的dataSource -->  
  37.         <property name="dataSource" ref="dataSource"/>  
  38.         <!-- mappingResouces属性用来列出全部映射文件 -->  
  39.         <property name="mappingResources">  
  40.             <list>  
  41.                 <!-- 以下用来列出Hibernate映射文件 -->  
  42.                 <value>com/xqh/model/Person.hbm.xml</value>  
  43.             </list>  
  44.         </property>  
  45.         <!-- 定义Hibernate的SessionFactory的属性 -->  
  46.         <property name="hibernateProperties">  
  47.             <!-- 配置Hibernate属性 -->  
  48.             <value>  
  49.             hibernate.dialect=org.hibernate.dialect.MySQLInnoDBDialect  
  50.             hibernate.hbm2ddl.auto=update  
  51.             hibernate.show_sql=true  
  52.             hibernate.format_sql=true;  
  53.             </value>  
  54.         </property>  
  55.     </bean>  
  56.     <!-- 定义DAO Bean-->  
  57.     <bean id="personDao" class=  
  58.     "com.xqh.dao.impl.PersonDaoHibernate">  
  59.         <!-- 注入持久化操作所需的SessionFactory -->  
  60.         <property name="sessionFactory" ref="sessionFactory"/>  
  61.     </bean>  
  62.     <!-- 配置一个业务逻辑组件 -->  
  63.     <bean id="service" class=  
  64.     "com.xqh.service.impl.ServiceImpl">  
  65.         <!-- 注入持久化访问所需的DAO组件 -->  
  66.         <property name="personDao" ref="personDao"/>  
  67.     </bean>  
  68.   
  69.   
  70.     <!-- 配置Hibernate的局部事务管理器,使用HibernateTransactionManager类 -->  
  71.     <!-- 该类实现PlatformTransactionManager接口,是针对Hibernate的特定实现-->  
  72.     <bean id="transactionManager"   
  73.         class="org.springframework.orm.hibernate3.HibernateTransactionManager">  
  74.         <!-- 配置HibernateTransactionManager时需要依注入SessionFactory的引用 -->  
  75.         <property name="sessionFactory" ref="sessionFactory"/>  
  76.     </bean>  
  77.     <!-- 配置事务增强处理,指定事务管理器 -->  
  78.     <tx:advice id="txAdvice" transaction-manager="transactionManager">  
  79.         <!-- 用于配置详细的事务语义 -->  
  80.         <tx:attributes>  
  81.             <!-- 所有以'get'开头的方法是read-only的 -->  
  82.             <tx:method name="get*" read-only="true"/>  
  83.             <!-- 其他方法使用默认的事务设置 -->  
  84.             <tx:method name="*"/>  
  85.         </tx:attributes>  
  86.     </tx:advice>  
  87.     <aop:config>  
  88.         <!-- 配置一个切入点 -->  
  89.         <aop:pointcut id="pointcut"  
  90.             expression="bean(service)"/>  
  91.         <!-- 指定在pointcut切入点应用txAdvice事务增强处理 -->  
  92.         <aop:advisor advice-ref="txAdvice"   
  93.             pointcut-ref="pointcut"/>  
  94.     </aop:config>  
  95.   
  96. </beans>  

4.struts.xml配置:

[html] view plain copy
  1. <?xml version="1.0" encoding="GBK"?>  
  2. <!-- 指定Struts 2配置文件的DTD信息 -->  
  3. <!DOCTYPE struts PUBLIC  
  4.     "-//Apache Software Foundation//DTD Struts Configuration 2.1.7//EN"  
  5.     "http://struts.apache.org/dtds/struts-2.1.7.dtd">  
  6. <!-- Struts 2配置文件的根元素 -->  
  7. <struts>  
  8.     <!-- 配置了系列常量 -->  
  9.     <constant name="struts.i18n.encoding" value="GBK"/>     
  10.     <constant name="struts.devMode" value="true"/>      
  11.     <package name="xqh" extends="struts-default">  
  12.         <!-- 定义处理用户请求的Action,指定该Action的实现类-->  
  13.         <action name="registPro"   
  14.             class="com.xqh.action.RegistAction">  
  15.             <!-- 为两个逻辑视图配置视图页面 -->  
  16.             <result name="error">/error.jsp</result>  
  17.             <result name="success">/welcome.jsp</result>  
  18.         </action>  
  19.         <!-- 让用户直接访问该应用时列出所有视图页面 -->  
  20.         <action name="*">  
  21.             <result>/{1}.jsp</result>  
  22.         </action>  
  23.     </package>  
  24. </struts>  

5.RegistAction.java代码清单:

[java] view plain copy
  1. package com.xqh.action;  
  2.   
  3. import com.opensymphony.xwork2.Action;  
  4. import com.xqh.model.Person;  
  5. import com.xqh.service.Service;  
  6.   
  7. public class RegistAction  
  8.     implements Action  
  9. {  
  10.     //下面是用于封装用户请求参数的属性  
  11.     private Person person;  
  12.     //用于封装处理结果的属性  
  13.     private String tip;  
  14.     //系统所用的业务逻辑组件  
  15.     private Service service;  
  16.     //设置注入业务逻辑组件所必需的setter方法  
  17.     public void setService(Service service)  
  18.     {  
  19.         this.service = service;  
  20.     }  
  21.   
  22.     //person属性的setter和getter方法  
  23.     public void setPerson(Person person)  
  24.     {  
  25.         this.person = person;  
  26.     }  
  27.     public Person getPerson()  
  28.     {  
  29.         return this.person;  
  30.     }  
  31.   
  32.     //tip属性的setter和getter方法  
  33.     public void setTip(String tip)  
  34.     {  
  35.         this.tip = tip;  
  36.     }  
  37.     public String getTip()  
  38.     {  
  39.         return this.tip;  
  40.     }  
  41.   
  42.     //处理用户请求的execute方法  
  43.     public String execute()  
  44.         throws Exception  
  45.     {  
  46.         //调用业务逻辑组件的regist方法来处理请求  
  47.         if (service.regist(person))  
  48.         {  
  49.             setTip("哈哈,注册成功!");  
  50.             return SUCCESS;  
  51.         }  
  52.         else  
  53.         {  
  54.             return ERROR;  
  55.         }  
  56.     }  
  57. }  

6.personDao.java 代码清单:

[java] view plain copy
  1. package com.xqh.dao;  
  2.   
  3.   
  4. import java.util.List;  
  5.   
  6. import com.xqh.model.Person;  
  7.   
  8. public interface PersonDao   
  9. {  
  10.     /** 
  11.      * 加载Person实例 
  12.      * @param id 需要加载的Person实例的主键值 
  13.      * @return 返回加载的Person实例 
  14.      */   
  15.     Person get(Integer id);  
  16.        
  17.     /** 
  18.      * 保存Person实例 
  19.      * @param person 需要保存的Person实例 
  20.      * @return 刚刚保存的Person实例的标识属性值 
  21.      */   
  22.     Integer save(Person person);  
  23.       
  24.     /** 
  25.      * 修改Person实例 
  26.      * @param person 需要修改的Person实例 
  27.      */  
  28.     void update(Person person);  
  29.       
  30.     /** 
  31.      * 删除Person实例 
  32.      * @param id 需要删除的Person实例的标识属性值 
  33.      */  
  34.     void delete(Integer id);  
  35.       
  36.     /** 
  37.      * 删除Person实例 
  38.      * @param person 需要删除的Person实例 
  39.      */  
  40.     void delete(Person person);  
  41.       
  42.     /** 
  43.      * 根据用户名查找Person 
  44.      * @param name 查询的人名 
  45.      * @return 指定用户名对应的全部Person 
  46.      */  
  47.     List<Person> findByName(String name);  
  48.       
  49.     /** 
  50.      * 查询全部Person实例 
  51.      * @return 全部Person实例 
  52.      */  
  53.     public List<Person> findAllPerson();  
  54. }  

7.personDaoHibernate.java代码清单:

[java] view plain copy
  1. package com.xqh.dao.impl;  
  2.   
  3. import org.springframework.orm.hibernate3.support.HibernateDaoSupport;  
  4.   
  5. import com.xqh.dao.PersonDao;  
  6. import com.xqh.model.Person;  
  7.   
  8. import java.util.*;  
  9.   
  10. public class PersonDaoHibernate  
  11.     extends HibernateDaoSupport implements PersonDao  
  12. {  
  13.     /** 
  14.      * 加载Person实例 
  15.      * @param id 需要加载的Person实例的标识属性值 
  16.      * @return 指定id对应的Person实例 
  17.      */   
  18.     public Person get(Integer id)  
  19.     {  
  20.         return getHibernateTemplate()  
  21.             .get(Person.class, id);   
  22.     }  
  23.       
  24.     /** 
  25.      * 保存Person实例 
  26.      * @param person 需要保存的Person实例 
  27.      * @return 刚刚保存的Person实例的标识属性值 
  28.      */     
  29.     public Integer save(Person person)  
  30.     {  
  31.         return (Integer)getHibernateTemplate()  
  32.             .save(person);  
  33.     }  
  34.       
  35.     /** 
  36.      * 修改Person实例 
  37.      * @param person 需要修改的Person实例 
  38.      */  
  39.     public void update(Person person)  
  40.     {  
  41.         getHibernateTemplate().update(person);  
  42.     }  
  43.       
  44.     /** 
  45.      * 删除Person实例 
  46.      * @param id 需要删除的Person实例的标识属性值 
  47.      */  
  48.     public void delete(Integer id)  
  49.     {  
  50.         getHibernateTemplate().delete(get(id));  
  51.     }  
  52.       
  53.     /** 
  54.      * 删除Person实例 
  55.      * @param person 需要删除的Person实例 
  56.      */  
  57.     public void delete(Person person)  
  58.     {  
  59.         getHibernateTemplate().delete(person);  
  60.     }  
  61.       
  62.     /** 
  63.      * 根据用户名查找Person 
  64.      * @param name 查询的人名 
  65.      * @return 指定用户名对应的全部Person 
  66.      */  
  67.     @SuppressWarnings("unchecked")  
  68.     public List<Person> findByName(String name)  
  69.     {  
  70.         return (List<Person>)getHibernateTemplate()  
  71.             .find("from Person p where p.name like ?" , name);  
  72.     }  
  73.       
  74.     /** 
  75.      * 查询全部Person实例 
  76.      * @return 全部Person实例 
  77.      */  
  78.     @SuppressWarnings("unchecked")  
  79.     public List<Person> findAllPerson()  
  80.     {  
  81.         return (List<Person>)getHibernateTemplate()  
  82.             .find("from Person");  
  83.     }  
  84. }  

8.Person.java代码清单:

[java] view plain copy
  1. package com.xqh.model;  
  2.   
  3. public class Person  
  4. {  
  5.     private Integer id;  
  6.     private String name;  
  7.     private int age;  
  8.       
  9.     //无参数的构造器  
  10.     public Person()  
  11.     {  
  12.     }  
  13.     //初始化全部属性的构造器  
  14.     public Person(String name , int age)  
  15.     {  
  16.         this.name = name;  
  17.         this.age = age;  
  18.     }  
  19.       
  20.     //id属性的setter和getter方法  
  21.     public void setId(Integer id)  
  22.     {  
  23.         this.id = id;  
  24.     }  
  25.     public Integer getId()  
  26.     {  
  27.         return this.id;  
  28.     }  
  29.       
  30.     //name属性的setter和getter方法  
  31.     public void setName(String name)  
  32.     {  
  33.         this.name = name;  
  34.     }  
  35.     public String getName()  
  36.     {  
  37.         return this.name;  
  38.     }   //age属性的setter和getter方法  
  39.     public void setAge(int age)  
  40.     {  
  41.         this.age = age;  
  42.     }  
  43.     public int getAge()  
  44.     {  
  45.         return this.age;  
  46.     }  
  47. }  

9.Person.hbm.xml配置:

[html] view plain copy
  1. <?xml version="1.0" encoding="GBK"?>  
  2. <!DOCTYPE hibernate-mapping PUBLIC   
  3.     "-//Hibernate/Hibernate Mapping DTD 3.0//EN"  
  4.     "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">  
  5. <hibernate-mapping package="com.xqh.model">  
  6.     <class name="Person" table="tb_person">  
  7.         <!-- 映射标识属性 -->  
  8.         <id name="id" column="Id"  
  9.             type="int">  
  10.             <!-- 指定主键生成器策略 -->  
  11.             <generator class="increment"/>  
  12.         </id>  
  13.         <!-- 映射普通属性 -->  
  14.         <property name="name" type="string"/>  
  15.         <property name="age" type="int"/>  
  16.     </class>  
  17. </hibernate-mapping>  

10.Service.java代码清单:

[java] view plain copy
  1. package com.xqh.service;  
  2.   
  3. import com.xqh.model.Person;  
  4.   
  5. public interface Service   
  6. {  
  7.     //注册用户  
  8.     boolean regist(Person person);  
  9. }  

11.ServiceImpl.java代码清单:

[java] view plain copy
  1. package com.xqh.service.impl;  
  2.   
  3. import com.xqh.dao.PersonDao;  
  4. import com.xqh.model.Person;  
  5. import com.xqh.service.Service;  
  6.   
  7. public class ServiceImpl  
  8.     implements Service  
  9. {  
  10.     private PersonDao personDao;  
  11.     //依赖注入DAO组件所需的setter方法  
  12.     public void setPersonDao(PersonDao personDao)  
  13.     {  
  14.         this.personDao = personDao;  
  15.     }  
  16.     //注册用户  
  17.     public boolean regist(Person person)  
  18.     {  
  19.         //调用DAO组件的方法来实现业务逻辑  
  20.         int result = personDao.save(person);  
  21.         if (result > 0)  
  22.         {  
  23.             return true;  
  24.         }  
  25.         return false;  
  26.     }  
  27. }  

12.运行结果:

Spring整合Struts2简单示例


目录(?)[-]

  1. Spring整合Struts2简单示例
    1. SpringIntegrateStruts2Demo项目结构
    2. LoginActionjava源代码
    3. MyServicejava源代码
    4. MyServiceImpljava源代码
    5. strutsxml配置文件
    6. applicationContextxml配置文件
      1. webxml配置文件
      2. loginjsp源代码
      3. errorjsp源代码
      4. welcomejsp源代码

    Spring整合Struts2简单示例

    1.SpringIntegrateStruts2Demo项目结构:


    2.LoginAction.java源代码:

    [java] view plain copy
    1. package com.xqh.action;  
    2.   
    3. import com.opensymphony.xwork2.ActionSupport;  
    4. import com.xqh.service.MyService;  
    5.   
    6. public class LoginAction extends ActionSupport{  
    7.       
    8.     //下面是用于封装用户请求参数的两个属性  
    9.     private String username;  
    10.     private String password;  
    11.     //用于封装处理结果的属性  
    12.     private String tip;  
    13.     //系统所用的业务逻辑组件  
    14.     private MyService ms;  
    15.     //设置注入业务逻辑组件所必需的setter方法  
    16.     public void setMs(MyService ms)  
    17.     {  
    18.         this.ms = ms;  
    19.     }  
    20.     //username属性的setter和getter方法  
    21.     public void setUsername(String username)  
    22.     {  
    23.         this.username = username;  
    24.     }  
    25.     public String getUsername()  
    26.     {  
    27.         return this.username;  
    28.     }  
    29.     //password属性所必需的setter和getter方法  
    30.     public void setPassword(String password)  
    31.     {  
    32.         this.password = password;  
    33.     }  
    34.     public String getPassword()  
    35.     {  
    36.         return this.password;  
    37.     }  
    38.     //tip属性的getter和setter方法  
    39.     public void setTip(String tip)  
    40.     {  
    41.         this.tip = tip;  
    42.     }  
    43.     public String getTip()  
    44.     {  
    45.         return this.tip;  
    46.     }  
    47.     //处理用户请求的execute方法  
    48.     public String execute() throws Exception  
    49.     {  
    50.         //调用业务逻辑组件的valid方法来  
    51.         //验证用户输入的用户名和密码是否正确  
    52.         if (ms.valid(getUsername(), getPassword()))  
    53.         {  
    54.             setTip("Spring与Struts2整合成功!");  
    55.             return SUCCESS;  
    56.         }  
    57.         else  
    58.         {  
    59.             return ERROR;  
    60.         }  
    61.     }  
    62. }  

    3.MyService.java源代码:

    [java] view plain copy
    1. package com.xqh.service;  
    2.   
    3. public interface MyService {  
    4.     public boolean valid(String username, String pass);  
    5. }  

    4.MyServiceImpl.java源代码:

    [java] view plain copy
    1. package com.xqh.service;  
    2.   
    3. public class MyServiceImpl implements MyService{  
    4.   
    5.     @Override  
    6.     public boolean valid(String username, String pass) {  
    7.         if (username.equals("xqh") && pass.equals("123"))  
    8.             return true;  
    9.         return false;  
    10.     }  
    11.       
    12. }  

    5.struts.xml配置文件:

    [html] view plain copy
    1. <?xml version="1.0" encoding="GBK"?>  
    2. <!-- 指定Struts2配置文件的DTD信息 -->  
    3. <!DOCTYPE struts PUBLIC  
    4.     "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"  
    5.     "http://struts.apache.org/dtds/struts-2.0.dtd">  
    6. <!-- Struts2配置文件的根元素 -->  
    7. <struts>  
    8.     <!-- 配置了系列常量 -->  
    9.     <constant name="struts.i18n.encoding" value="GBK"/>     
    10.     <package name="login" extends="struts-default">  
    11.         <!-- 定义处理用户请求的Action,该Action的class属性不是实际处理类  
    12.             , 而是Spring容器中的Bean实例-->  
    13.         <action name="login" class="loginAction">  
    14.             <!-- 为两个逻辑视图配置视图页面 -->  
    15.             <result name="error">/error.jsp</result>  
    16.             <result name="success">/welcome.jsp</result>  
    17.         </action>  
    18.         <!-- 让用户直接访问该应用时列出所有视图页面 -->  
    19.         <action name="">  
    20.             <result>.</result>  
    21.         </action>  
    22.     </package>  
    23. </struts>  

    6.applicationContext.xml配置文件:

    [html] view plain copy
    1. <?xml version="1.0" encoding="GBK"?>  
    2. <!-- 指定Spring配置文件的DTD信息 -->  
    3. <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN 2.0//EN"  
    4.     "http://www.springframework.org/dtd/spring-beans-2.0.dtd">  
    5. <!-- Spring配置文件的根元素 -->  
    6. <beans>  
    7.     <!-- 定义一个业务逻辑组件,实现类为com.xqh.service.MyServiceImpl -->  
    8.     <bean id="myService" class="com.xqh.service.MyServiceImpl"/>  
    9.     <!-- 让Spring管理的Action实例 -->  
    10.     <bean id="loginAction" class="com.xqh.action.LoginAction"  
    11.         scope="prototype">  
    12.         <!-- 依赖注入业务逻辑组件 -->  
    13.         <property name="ms" ref="myService"/>  
    14.     </bean>  
    15. </beans>  
    注意:当Spring容器管理Struts2的Action时,由于每个Action对应一次用户请求,且封装了该请求的请求百状态信息,所以不应该将Action配置成单例模式,因些必须指定scope属性,该属性值可指定为prototype和request两种

    7.web.xml配置文件:

    [html] view plain copy
    1. <?xml version="1.0" encoding="UTF-8"?>  
    2. <web-app version="2.5"   
    3.     xmlns="http://java.sun.com/xml/ns/javaee"   
    4.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"   
    5.     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee   
    6.     http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">  
    7.   <welcome-file-list>  
    8.     <welcome-file>login.jsp</welcome-file>  
    9.   </welcome-file-list>  
    10.   <!-- 使用ContextLoaderListener初始化Spring容器 -->  
    11.     <listener>  
    12.         <listener-class>org.springframework.web.context.ContextLoaderListener  
    13.         </listener-class>  
    14.     </listener>  
    15.     <!-- 定义Struts2的FilterDispathcer的Filter -->  
    16.     <filter>  
    17.         <filter-name>struts2</filter-name>  
    18.         <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>  
    19.     </filter>  
    20.     <!-- FilterDispatcher用来初始化Struts2并且处理所有的WEB请求。 -->  
    21.     <filter-mapping>  
    22.         <filter-name>struts2</filter-name>  
    23.         <url-pattern>/*</url-pattern>  
    24.     </filter-mapping>  
    25. </web-app>  

    8.login.jsp源代码:

    [html] view plain copy
    1. <%@ page language="java" import="java.util.*" pageEncoding="GB18030"%>  
    2. <%  
    3. String path = request.getContextPath();  
    4. String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";  
    5. %>  
    6.   
    7. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">  
    8. <html>  
    9.   <head>  
    10.     <base href="<%=basePath%>">  
    11.       
    12.     <title>登录页面</title>  
    13.     <meta http-equiv="pragma" content="no-cache">  
    14.     <meta http-equiv="cache-control" content="no-cache">  
    15.     <meta http-equiv="expires" content="0">      
    16.     <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">  
    17.     <meta http-equiv="description" content="This is my page">  
    18.     <!-- 
    19.     <link rel="stylesheet" type="text/css" href="styles.css"> 
    20.     -->  
    21.   </head>  
    22.     
    23.   <body>  
    24.     <form action="login.action" method="post">  
    25.     <table align="center">  
    26.     <caption><h3>用户登录</h3></caption>  
    27.         <tr>  
    28.             <td>用户名:<input type="text" name="username"/></td>  
    29.         </tr>  
    30.         <tr>  
    31.             <td>密  码:<input type="text" name="password"/></td>  
    32.         </tr>  
    33.         <tr align="center">  
    34.             <td colspan="2"><input type="submit" value="登录"/><input type="reset" value="重填" /></td>  
    35.         </tr>  
    36.     </table>  
    37. </form>  
    38.   </body>  
    39. </html>  

    9.error.jsp源代码:

    [html] view plain copy
    1. <%@ page language="java" import="java.util.*" pageEncoding="GB18030"%>  
    2. <%  
    3. String path = request.getContextPath();  
    4. String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";  
    5. %>  
    6.   
    7. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">  
    8. <html>  
    9.   <head>  
    10.     <base href="<%=basePath%>">  
    11.       
    12.     <title>错误页面</title>  
    13.     <meta http-equiv="pragma" content="no-cache">  
    14.     <meta http-equiv="cache-control" content="no-cache">  
    15.     <meta http-equiv="expires" content="0">      
    16.     <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">  
    17.     <meta http-equiv="description" content="This is my page">  
    18.     <!-- 
    19.     <link rel="stylesheet" type="text/css" href="styles.css"> 
    20.     -->  
    21.   </head>  
    22.     
    23.   <body>  
    24.     登录失败!  
    25.   </body>  
    26. </html>  

    10.welcome.jsp源代码:

    [html] view plain copy
    1. <%@ page language="java" import="java.util.*" pageEncoding="GB18030"%>  
    2. <%@ taglib prefix="s" uri="/struts-tags" %>  
    3. <%  
    4. String path = request.getContextPath();  
    5. String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";  
    6. %>  
    7.   
    8. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">  
    9. <html>  
    10.   <head>  
    11.     <base href="<%=basePath%>">  
    12.       
    13.     <title>成功页面</title>  
    14.     <meta http-equiv="pragma" content="no-cache">  
    15.     <meta http-equiv="cache-control" content="no-cache">  
    16.     <meta http-equiv="expires" content="0">      
    17.     <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">  
    18.     <meta http-equiv="description" content="This is my page">  
    19.     <!-- 
    20.     <link rel="stylesheet" type="text/css" href="styles.css"> 
    21.     -->  
    22.   </head>  
    23.     
    24.   <body>  
    25.     您已经登录!<br/>  
    26.         <s:property value="tip"/>  
    27.   </body>  
    28. </html>  

    Spring整合Hibernate简单示例

    目录(?)[-]

    1. Spring整合Hibernate简单示例
      1. SpringIntegrateHibernateDemo程序结构
      2. HibernateTestjava源代码
      3. Personjava源代码
      4. PersonDaojava源代码
      5. PersonDaoHibernatejava源代码
      6. beanxml配置文件
      7. Personhbmxml配置文件


    2.HibernateTest.java源代码:

    [java] view plain copy
    1. package com.xqh.test;  
    2.   
    3. import org.springframework.context.ApplicationContext;  
    4. import org.springframework.context.support.ClassPathXmlApplicationContext;  
    5.   
    6. public class HibernateTest {  
    7.     public static void main(String[] args)throws Exception  
    8.     {  
    9.         //创建Spring容器  
    10.         ApplicationContext ctx =   
    11.             new ClassPathXmlApplicationContext("bean.xml");  
    12.         //获取DAO组件  
    13.         PersonDao pdao = (PersonDao)ctx.getBean("personDao");  
    14.         //循环插入10条记录  
    15.         for (int i = 0 ; i < 10  ; i++ )  
    16.         {  
    17.             pdao.save(new Person(i + "" , i + 10));  
    18.         }  
    19.     }  
    20. }  

    3.Person.java源代码:

    [java] view plain copy
    1. package com.xqh.test;  
    2.   
    3. public class Person {  
    4.     private int id;  
    5.     private String name;  
    6.     private int age;  
    7.   
    8.     // 无参数的构造器  
    9.     public Person() {  
    10.     }  
    11.   
    12.     // 初始化全部属性的构造器  
    13.     public Person(String name, int age) {  
    14.         this.name = name;  
    15.         this.age = age;  
    16.     }  
    17.   
    18.     public int getId() {  
    19.         return id;  
    20.     }  
    21.   
    22.     public void setId(int id) {  
    23.         this.id = id;  
    24.     }  
    25.   
    26.     public String getName() {  
    27.         return name;  
    28.     }  
    29.   
    30.     public void setName(String name) {  
    31.         this.name = name;  
    32.     }  
    33.   
    34.     public int getAge() {  
    35.         return age;  
    36.     }  
    37.   
    38.     public void setAge(int age) {  
    39.         this.age = age;  
    40.     }  
    41.   
    42. }  

    4.PersonDao.java源代码:

    [java] view plain copy
    1. package com.xqh.test;  
    2.   
    3. import java.util.List;  
    4.   
    5. public interface PersonDao   
    6. {  
    7.     /** 
    8.      * 加载Person实例 
    9.      * @param id 需要加载的Person实例的主键值 
    10.      * @return 返回加载的Person实例 
    11.      */   
    12.     Person get(Integer id);  
    13.   
    14.     /** 
    15.      * 保存Person实例 
    16.      * @param person 需要保存的Person实例 
    17.      * @return 刚刚保存的Person实例的标识属性值 
    18.      */      
    19.     Integer save(Person person);  
    20.   
    21.     /** 
    22.      * 修改Person实例 
    23.      * @param person 需要修改的Person实例 
    24.      */  
    25.     void update(Person person);  
    26.   
    27.     /** 
    28.      * 删除Person实例 
    29.      * @param id 需要删除的Person实例的标识属性值 
    30.      */  
    31.     void delete(Integer id);  
    32.   
    33.     /** 
    34.      * 删除Person实例 
    35.      * @param person 需要删除的Person实例 
    36.      */  
    37.     void delete(Person person);  
    38.   
    39.     /** 
    40.      * 根据用户名查找Person 
    41.      * @param name 查询的人名 
    42.      * @return 指定用户名对应的全部Person 
    43.      */  
    44.     List<Person> findByName(String name);  
    45.   
    46.     /** 
    47.      * 查询全部Person实例 
    48.      * @return 全部Person实例 
    49.      */  
    50.     public List findAllPerson();  
    51. }  

    5.PersonDaoHibernate.java源代码:

    [java] view plain copy
    1. package com.xqh.test;  
    2.   
    3. import java.util.List;  
    4.   
    5. import org.springframework.orm.hibernate3.support.HibernateDaoSupport;  
    6.   
    7. public class PersonDaoHibernate extends HibernateDaoSupport implements PersonDao  
    8. {  
    9.     /** 
    10.      * 加载Person实例 
    11.      * @param id 需要加载的Person实例的标识属性值 
    12.      * @return 指定id对应的Person实例 
    13.      */   
    14.     public Person get(Integer id)  
    15.     {  
    16.         return (Person)getHibernateTemplate()  
    17.             .get(Person.class, id);   
    18.     }  
    19.   
    20.     /** 
    21.      * 保存Person实例 
    22.      * @param person 需要保存的Person实例 
    23.      * @return 刚刚保存的Person实例的标识属性值 
    24.      */     
    25.     public Integer save(Person person)  
    26.     {  
    27.         return (Integer)getHibernateTemplate()  
    28.             .save(person);  
    29.     }  
    30.   
    31.     /** 
    32.      * 修改Person实例 
    33.      * @param person 需要修改的Person实例 
    34.      */  
    35.     public void update(Person person)  
    36.     {  
    37.         getHibernateTemplate().update(person);  
    38.     }  
    39.   
    40.     /** 
    41.      * 删除Person实例 
    42.      * @param id 需要删除的Person实例的标识属性值 
    43.      */  
    44.     public void delete(Integer id)  
    45.     {  
    46.         getHibernateTemplate().delete(get(id));  
    47.     }  
    48.   
    49.     /** 
    50.      * 删除Person实例 
    51.      * @param person 需要删除的Person实例 
    52.      */  
    53.     public void delete(Person person)  
    54.     {  
    55.         getHibernateTemplate().delete(person);  
    56.     }  
    57.   
    58.     /** 
    59.      * 根据用户名查找Person 
    60.      * @param name 查询的人名 
    61.      * @return 指定用户名对应的全部Person 
    62.      */  
    63.     public List<Person> findByName(String name)  
    64.     {  
    65.         return (List<Person>)getHibernateTemplate()  
    66.             .find("from Person p where p.name like ?" , name);  
    67.     }  
    68.   
    69.     /** 
    70.      * 查询全部Person实例 
    71.      * @return 全部Person实例 
    72.      */  
    73.     public List findAllPerson()  
    74.     {  
    75.         return (List<Person>)getHibernateTemplate()  
    76.             .find("from Person");  
    77.     }  
    78. }  

    6.bean.xml配置文件:

    [html] view plain copy
    1. <?xml version="1.0" encoding="GBK"?>  
    2. <!-- 指定Spring配置文件的DTD信息 -->  
    3. <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN 2.0//EN"  
    4.     "http://www.springframework.org/dtd/spring-beans-2.0.dtd">  
    5. <!-- Spring配置文件的根元素 -->  
    6. <beans>  
    7.     <!-- 定义数据源Bean,使用C3P0数据源实现 -->  
    8.     <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"  
    9.         destroy-method="close">  
    10.         <!-- 指定连接数据库的驱动 -->  
    11.         <property name="driverClass" value="com.mysql.jdbc.Driver"/>  
    12.         <!-- 指定连接数据库的URL -->  
    13.         <property name="jdbcUrl" value="jdbc:mysql://localhost/db_test"/>  
    14.         <!-- 指定连接数据库的用户名 -->  
    15.         <property name="user" value="root"/>  
    16.         <!-- 指定连接数据库的密码 -->  
    17.         <property name="password" value="1120"/>  
    18.         <!-- 指定连接数据库连接池的最大连接数 -->  
    19.         <property name="maxPoolSize" value="40"/>  
    20.         <!-- 指定连接数据库连接池的最小连接数 -->  
    21.         <property name="minPoolSize" value="1"/>  
    22.         <!-- 指定连接数据库连接池的初始化连接数 -->  
    23.         <property name="initialPoolSize" value="1"/>  
    24.         <!-- 指定连接数据库连接池的连接的最大空闲时间 -->  
    25.         <property name="maxIdleTime" value="20"/>  
    26.     </bean>  
    27.     <!-- 定义Hibernate的SessionFactory -->  
    28.     <bean id="sessionFactory"  
    29.         class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">  
    30.         <!-- 依赖注入数据源,注入正是上面定义的dataSource -->  
    31.         <property name="dataSource" ref="dataSource"/>  
    32.         <!-- mappingResouces属性用来列出全部映射文件 -->  
    33.         <property name="mappingResources">  
    34.             <list>  
    35.                 <!-- 以下用来列出Hibernate映射文件 -->  
    36.                 <value>Person.hbm.xml</value>  
    37.             </list>  
    38.         </property>  
    39.         <!-- 定义Hibernate的SessionFactory的属性 -->  
    40.         <property name="hibernateProperties">  
    41.             <props>  
    42.                 <!-- 指定数据库方言 -->  
    43.                 <prop key="hibernate.dialect">  
    44.                     org.hibernate.dialect.MySQLInnoDBDialect</prop>  
    45.                 <!-- 是否根据需要每次自动创建数据库 -->  
    46.                 <prop key="hibernate.hbm2ddl.auto">update</prop>  
    47.                 <!-- 显示Hibernate持久化操作所生成的SQL -->  
    48.                 <prop key="hibernate.show_sql">true</prop>  
    49.                 <!-- 将SQL脚本进行格式化后再输出 -->  
    50.                 <prop key="hibernate.format_sql">true</prop>  
    51.             </props>  
    52.         </property>  
    53.     </bean>  
    54.     <!-- 定义DAO Bean-->  
    55.     <bean id="personDao" class="com.xqh.test.PersonDaoHibernate">  
    56.         <!-- 注入持久化操作所需的SessionFactory -->  
    57.         <property name="sessionFactory" ref="sessionFactory"/>  
    58.     </bean>  
    59. </beans>  

    7.Person.hbm.xml配置文件:

    [html] view plain copy
    1. <?xml version="1.0" encoding="GBK"?>  
    2. <!DOCTYPE hibernate-mapping  
    3.     PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"  
    4.     "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">  
    5. <hibernate-mapping package="com.xqh.test">  
    6.     <class name="Person" table="person">  
    7.         <!-- 映射标识属性 -->  
    8.         <id name="id" column="Id"  
    9.             type="int">  
    10.             <!-- 指定主键生成器策略 -->  
    11.             <generator class="identity"/>  
    12.         </id>  
    13.         <!-- 映射普通属性 -->  
    14.         <property name="name" type="string"/>  
    15.         <property name="age" type="int"/>  
    16.     </class>  
    17. </hibernate-mapping>  


    0 0
    原创粉丝点击