【struts2+spring+hibernate】ssh框架整合开发

来源:互联网 发布:淘宝河南最大蛋糕 编辑:程序博客网 时间:2024/05/01 21:10

【struts2+spring+hibernate】ssh框架整合开发

标签: hibernatestrutsspring
1555人阅读 评论(0)收藏举报
分类:
作者同类文章X

    目录(?)[+]

    1. SSH框架整合
      1. Struts2SpringHibernate导包
      2. Struts2和Spring的整合
      3. Struts2和Spring的整合两种方式
        1. 1 Struts2自己管理Action方式一
        2. 2 Action交给Spring管理方式二
        3. 3 Web层获得Service
      4. Spring整合Hibernate
        1. 1 零障碍整合一
        2. 2 没有Hibernate配置文件的形式二
      5. HibernateTemplate的API

    SSH框架整合

    1 Struts2+Spring+Hibernate导包

    Struts2导入jar包:

      * struts2/apps/struts2-blank.war/WEB-INF/lib/*.jar

    导入与spring整合的jar

    * struts2/lib/struts2-spring-plugin-2.3.15.3.jar--- 整合Spring框架

    * struts2/lib/struts2-json-plugin-2.3.15.3.jar--- 整合AJAX

    * struts2/lib/struts2-convention-plugin-2.3.15.3.jar--- 使用Struts2注解开发.

     

    Spring导入jar包:

    Spring3.2 开发最基本jar包

    spring-beans-3.2.0.RELEASE.jar

    spring-context-3.2.0.RELEASE.jar

    spring-core-3.2.0.RELEASE.jar

    spring-expression-3.2.0.RELEASE.jar

    com.springsource.org.apache.commons.logging-1.1.1.jar

    com.springsource.org.apache.log4j-1.2.15.jar


    AOP开发

    spring-aop-3.2.0.RELEASE.jar

    spring-aspects-3.2.0.RELEASE.jar

    com.springsource.org.aopalliance-1.0.0.jar

    com.springsource.org.aspectj.weaver-1.6.8.RELEASE.jar


    Spring Jdbc开发

    spring-jdbc-3.2.0.RELEASE.jar

    spring-tx-3.2.0.RELEASE.jar


    Spring事务管理

    spring-tx-3.2.0.RELEASE.jar


    Spring整合其他ORM框架

    spring-orm-3.2.0.RELEASE.jar


    Spring在web中使用

    spring-web-3.2.0.RELEASE.jar


    Spring整合Junit测试

    spring-test-3.2.0.RELEASE.jar

     

    hibernate的jar包导入:

    * 核心包:hibernate3.jar

    * lib/required/*.jar

    * lib/jpa/*.jar

    * 引入hibernate整合日志系统的jar包:

    * 数据连接池:

    * 数据库驱动:

     

     二级缓存:(可选的.)

    * backport-util-concurrent.jar

    * commons-logging.jar

    * ehcache-1.5.0.jar



    2 配置文件

    2.1 web.xml

    [html] view plain copy
    print?
    1. <filter>  
    2.   
    3.   <filter-name>struts2</filter-name>  
    4.   
    5.   <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>  
    6.   
    7. </filter>  
    8.   
    9. <filter-mapping>  
    10.   
    11.   <filter-name>struts2</filter-name>  
    12.   
    13.   <url-pattern>/*</url-pattern>  
    14.   
    15. </filter-mapping>  
    16. <p><!-- 配置Spring的监听器 --></p><p><listener></p><p><!-- 监听器默认加载的是WEB-INF/applicationContext.xml --></p><p><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class></p><p></listener></p><p> </p><p><!-- 指定Spring框架的配置文件所在的位置 --></p><p><context-param></p><p><param-name>contextConfigLocation</param-name></p><p><param-value>classpath:applicationContext.xml</param-value></p><p></context-param></p>  


    2.2 struts.xml

    [html] view plain copy
    print?
    1. <struts>  
    2.   
    3.    
    4.   
    5.     <constant name="struts.devMode" value="true" />  
    6.   
    7.    
    8.   
    9.     <package name="default" namespace="/" extends="struts-default">  
    10.   
    11.       
    12.   
    13.     </package>  
    14.   
    15.    
    16.   
    17. </struts>  


    2.3 加入配置文件

    applicationContext.xml

    [html] view plain copy
    print?
    1. <?xml version="1.0" encoding="UTF-8"?>  
    2. <beans xmlns="http://www.springframework.org/schema/beans"  
    3.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
    4.     xmlns:context="http://www.springframework.org/schema/context"  
    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.xsd  
    9.     http://www.springframework.org/schema/context  
    10.     http://www.springframework.org/schema/context/spring-context.xsd  
    11.     http://www.springframework.org/schema/aop  
    12.     http://www.springframework.org/schema/aop/spring-aop.xsd  
    13.     http://www.springframework.org/schema/tx   
    14.     http://www.springframework.org/schema/tx/spring-tx.xsd">  
    15.       
    16.     <!-- 零障碍整合 在spring配置文件中引入hibernate的配置文件 -->  
    17.     <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">  
    18.         <property name="configLocation" value="classpath:hibernate.cfg.xml"/>  
    19.     </bean>  
    20.       
    21.     <!-- 配置Action -->  
    22.     <bean id="bookAction" class="com.sihai.action.BookAction" scope="prototype">  
    23.         <property name="bookService" ref="bookService"/>  
    24.     </bean>  
    25.       
    26.     <!-- Service的配置 -->  
    27.     <bean id="bookService" class="com.sihai.service.BookService">  
    28.         <property name="bookDao" ref="bookDao"/>  
    29.     </bean>  
    30.       
    31.     <!-- DAO的配置 -->  
    32.     <bean id="bookDao" class="com.sihai.dao.BookDao">  
    33.         <property name="sessionFactory" ref="sessionFactory"/>  
    34.     </bean>  
    35.       
    36.     <!-- 管理事务 -->  
    37.     <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">  
    38.         <property name="sessionFactory" ref="sessionFactory"/>  
    39.     </bean>  
    40.       
    41.     <!-- 注解开启事务 -->  
    42.     <tx:annotation-driven transaction-manager="transactionManager"/>  
    43. </beans>  


    Log4j.properties

    [java] view plain copy
    print?
    1. ### direct log messages to stdout ###  
    2. log4j.appender.stdout=org.apache.log4j.ConsoleAppender  
    3. log4j.appender.stdout.Target=System.out  
    4. log4j.appender.stdout.layout=org.apache.log4j.PatternLayout  
    5. log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n  
    6.   
    7. ### direct messages to file mylog.log ###  
    8. log4j.appender.file=org.apache.log4j.FileAppender  
    9. log4j.appender.file.File=c:/mylog.log  
    10. log4j.appender.file.layout=org.apache.log4j.PatternLayout  
    11. log4j.appender.file.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n  
    12.   
    13. ### set log levels - for more verbose logging change 'info' to 'debug' ###  
    14.   
    15. log4j.rootLogger=info, stdout  

     

     Hibernate的配置:

     hibernate.cfg.xml

    [html] view plain copy
    print?
    1. <?xml version="1.0" encoding="UTF-8"?>  
    2. <!DOCTYPE hibernate-configuration PUBLIC  
    3.     "-//Hibernate/Hibernate Configuration DTD 3.0//EN"  
    4.     "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">  
    5.   
    6. <hibernate-configuration>  
    7. <session-factory>  
    8.     <!-- 必须去配置的属性 -->  
    9.     <!-- 配置数据库连接的基本信息: -->  
    10.     <property name="hibernate.connection.driver_class">  
    11.         com.mysql.jdbc.Driver  
    12.     </property>  
    13.     <property name="hibernate.connection.url">  
    14.         jdbc:mysql:///ssh1  
    15.     </property>  
    16.     <property name="hibernate.connection.username">root</property>  
    17.     <property name="hibernate.connection.password">123</property>  
    18.     <!-- Hibernate的方言 -->  
    19.     <!-- 生成底层SQL不同的 -->  
    20.     <property name="hibernate.dialect">  
    21.         org.hibernate.dialect.MySQLDialect  
    22.     </property>  
    23.   
    24.     <!-- 可选的属性 -->  
    25.     <!-- 显示SQL -->  
    26.     <property name="hibernate.show_sql">true</property>  
    27.     <!-- 格式化SQL -->  
    28.     <property name="hibernate.format_sql">true</property>  
    29.   
    30.     <property name="hibernate.connection.autocommit">false</property>  
    31.     <!-- hbm:映射 to DDL: create drop alter -->  
    32.     <property name="hibernate.hbm2ddl.auto">update</property>  
    33.   
    34.     <!-- C3P0连接池设定-->  
    35.     <!-- 使用c3po连接池  配置连接池提供的供应商-->  
    36.     <property name="connection.provider_class">  
    37.         org.hibernate.connection.C3P0ConnectionProvider  
    38.     </property>  
    39.   
    40.     <!--在连接池中可用的数据库连接的最少数目 -->  
    41.     <property name="c3p0.min_size">5</property>  
    42.     <!--在连接池中所有数据库连接的最大数目  -->  
    43.     <property name="c3p0.max_size">20</property>  
    44.     <!--设定数据库连接的过期时间,以秒为单位,  
    45.         如果连接池中的某个数据库连接处于空闲状态的时间超过了timeout时间,就会从连接池中清除 -->  
    46.     <property name="c3p0.timeout">120</property>  
    47.     <!--每3000秒检查所有连接池中的空闲连接 以秒为单位-->  
    48.     <property name="c3p0.idle_test_period">3000</property>  
    49.   
    50.     <!-- 通知Hibernate加载那些映射文件 -->  
    51.     <mapping resource="cn/itcast/vo/Book.hbm.xml" />  
    52.   
    53. </session-factory>  
    54. </hibernate-configuration>  


     映射:

     格式:类名.hbm.xml

    [html] view plain copy
    print?
    1. <?xml version="1.0" encoding="UTF-8"?>  
    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.       
    6. <hibernate-mapping>  
    7.     <class name="com.sihai.vo.Book" table="book">  
    8.         <id name="id">  
    9.             <generator class="native"/>  
    10.         </id>  
    11.         <property name="name"/>  
    12.         <property name="price"/>  
    13.     </class>  
    14. </hibernate-mapping>  


    3 Struts2和Spring的整合

    3.1.新建包结构:

    com.sihia.action

    com.sihia.service

    com.sihia.dao

    com.sihia.vo

     

    3.2创建实体类:

     Book

    [java] view plain copy
    print?
    1. package com.sihia.vo;  
    2.   
    3. public class Book {  
    4.     private Integer id;  
    5.     private String name;  
    6.     private Double price;  
    7.     public Integer getId() {  
    8.         return id;  
    9.     }  
    10.     public void setId(Integer id) {  
    11.         this.id = id;  
    12.     }  
    13.     public String getName() {  
    14.         return name;  
    15.     }  
    16.     public void setName(String name) {  
    17.         this.name = name;  
    18.     }  
    19.     public Double getPrice() {  
    20.         return price;  
    21.     }  
    22.     public void setPrice(Double price) {  
    23.         this.price = price;  
    24.     }  
    25.       
    26. }  


     

    3.3.新建一个jsp页面:

     addBook.jsp

         

    [html] view plain copy
    print?
    1.   <s:form action="book_add" namespace="/" method="post" theme="simple">  
    2.   
    3. 图书名称:<s:textfield name="name"/><br/>  
    4.   
    5. 图书价格:<s:textfield name="price"/><br/>  
    6.   
    7. <s:submit value="添加图书"/>  
    8.   
    9. </s:form>  


     

    3.4.编写Action:

    [java] view plain copy
    print?
    1. public class BookAction extends ActionSupport implements ModelDriven<Book>{  
    2.   
    3. // 模型驱动类  
    4.   
    5. private Book book = new Book();  
    6.   
    7. public Book getModel() {  
    8.   
    9. return book;  
    10.   
    11. }  
    12.   
    13.    
    14.   
    15. // 处理请求的方法:  
    16.   
    17. public String add(){  
    18.   
    19. System.out.println("web层的添加执行了...");  
    20.   
    21. return NONE;  
    22.   
    23. }  
    24.   
    25. }  


     

    3.5.配置struts.xml

    [html] view plain copy
    print?
    1. <?xml version="1.0" encoding="UTF-8" ?>  
    2. <!DOCTYPE struts PUBLIC  
    3.     "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"  
    4.     "http://struts.apache.org/dtds/struts-2.3.dtd">  
    5.   
    6. <struts>  
    7.   
    8.     <constant name="struts.devMode" value="true" />  
    9.   
    10.     <package name="default" namespace="/" extends="struts-default">  
    11.         <action name="book_*" class="bookAction" method="{1}">  
    12.               
    13.         </action>  
    14.     </package>  
    15.   
    16. </struts>  


     

    4 Struts2和Spring的整合两种方式

    4.1 Struts2自己管理Action:(方式一)

    [html] view plain copy
    print?
    1. <action name="book_*" class="com.sihia.action.BookAction" method="{1}">  



    4.2 Action交给Spring管理:(方式二)

    可以在<action>标签上通过一个伪类名方式进行配置:

    [html] view plain copy
    print?
    1. <action name="book_*" class="bookAction" method="{1}"></action>  

    在spring的配置文件中:

    [html] view plain copy
    print?
    1. <!-- 配置Action -->  
    2.   
    3. <bean id="bookAction" class="com.sihai.action.BookAction"></bean>  

    注意:Action交给Spring管理一定要配置scope=”prototype”

     

    4.3 Web层获得Service:

    传统方式:

    * 获得WebApplicationContext对象.

    * 通过WebAppolicationContext中getBean(“”);

     

    实际开发中:

    * 引入了struts2-spring-plugin-2.3.15.3.jar

    * 有一个配置文件 : struts-plugin.xml


    开启常量 :

    <constant name="struts.objectFactory" value="spring" />

    引发另一个常量的执行:(Spring的工厂类按照名称自动注入)

    struts.objectFactory.spring.autoWire = name

     

    5 Spring整合Hibernate:

    Spring整合Hibernate框架的时候有两种方式:

    5.1 零障碍整合:(一)

    可以在Spring中引入Hibernate的配置文件.

    1.通过LocalSessionFactoryBean在spring中直接引用hibernate配置文件

    [html] view plain copy
    print?
    1. <!-- 零障碍整合 在spring配置文件中引入hibernate的配置文件 -->  
    2.   
    3. <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">  
    4.   
    5. <property name="configLocation" value="classpath:hibernate.cfg.xml"/>  
    6.   
    7. </bean>  

     

    2.Spring提供了Hibernate的模板.只需要将HibernateTemplate模板注入给DAO.

    DAO继承HibernateDaoSupport.

    [html] view plain copy
    print?
    1. <!-- DAO的配置 -->  
    2.   
    3. <bean id="bookDao" class="com.sihai.dao.BookDao">  
    4.   
    5. <property name="sessionFactory" ref="sessionFactory"/>  
    6.   
    7. </bean>  

     

    改写DAO:继承HibernateDaoSupport类.

    [java] view plain copy
    print?
    1. public class BookDao extends HibernateDaoSupport{  
    2.   
    3.    
    4.   
    5. public void save(Book book) {  
    6.   
    7. System.out.println("DAO层的保存图书...");  
    8.   
    9. this.getHibernateTemplate().save(book);  
    10.   
    11. }  
    12.   
    13. }  


    3.创建一个映射文件 :

    [html] view plain copy
    print?
    1. <hibernate-mapping>  
    2.   
    3. <class name="com.sihai.vo.Book" table="book">  
    4.   
    5. <id name="id">  
    6.   
    7. <generator class="native"/>  
    8.   
    9. </id>  
    10.   
    11. <property name="name"/>  
    12.   
    13. <property name="price"/>  
    14.   
    15. </class>  
    16.   
    17. </hibernate-mapping>  


     

    4.别忘记事务管理:

    事务管理器:

    [html] view plain copy
    print?
    1. <!-- 管理事务 -->  
    2.   
    3. <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">  
    4.   
    5. <property name="sessionFactory" ref="sessionFactory"/>  
    6.   
    7. </bean>  


     

    5.注解管理事务:

    [html] view plain copy
    print?
    1. <!-- 注解开启事务 -->  
    2.   
    3. <tx:annotation-driven transaction-manager="transactionManager"/>  


     

    6.在业务层类上添加一个注解:

    @Transactional


    5.2 没有Hibernate配置文件的形式(二)

    不需要Hibernate配置文件的方式,将Hibernate配置文件的信息直接配置到Spring中.

    Hibernate配置文件中的信息 :

    * 连接数据库基本参数:

    * Hibernate常用属性:

    * 连接池:

    * 映射:

     

    把Hibernate配置文件整合Spring中:

    连接池:

    [html] view plain copy
    print?
    1. <!-- 引入外部属性文件. -->  
    2.   
    3. <context:property-placeholder location="classpath:jdbc.properties"/>  
    4.   
    5. <!-- 配置c3p0连接池 -->  
    6.   
    7. <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">  
    8.   
    9. <property name="driverClass" value="${jdbc.driver}"/>  
    10.   
    11. <property name="jdbcUrl" value="${jdbc.url}"/>  
    12.   
    13. <property name="user" value="${jdbc.user}"/>  
    14.   
    15. <property name="password" value="${jdbc.password}"/>  
    16.   
    17. </bean>  


    Hibernate常用属性:

    [html] view plain copy
    print?
    1. <!-- 配置Hibernate的属性 -->  
    2.   
    3. <property name="hibernateProperties">  
    4.   
    5. <props>  
    6.   
    7. <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>  
    8.   
    9. <prop key="hibernate.show_sql">true</prop>  
    10.   
    11. <prop key="hibernate.format_sql">true</prop>  
    12.   
    13. <prop key="hibernate.hbm2ddl.auto">update</prop>  
    14.   
    15. <prop key="hibernate.connection.autocommit">false</prop>  
    16.   
    17. </props>  
    18.   
    19. </property>  


     

    映射

    [html] view plain copy
    print?
    1. <!-- <property name="mappingResources">  
    2.   
    3. <list>  
    4.   
    5. <value>cn/itcast/vo/Book.hbm.xml</value>  
    6.   
    7. </list>  
    8.   
    9. </property> -->  
    10.   
    11. <property name="mappingDirectoryLocations">  
    12.   
    13. <list>  
    14.   
    15. <value>classpath:cn/itcast/vo</value>  
    16.   
    17. </list>  
    18.   
    19. </property>  


    6 HibernateTemplate的API:

     Serializable save(Object entity) :保存数据

     void update(Object entity) :修改数据

     void delete(Object entity) :删除数据

     <T> T get(Class<T> entityClass, Serializable id) :根据ID进行检索.立即检索

     <T> T load(Class<T> entityClass, Serializable id) :根据ID进行检索.延迟检索.

     List find(String queryString, Object... values) :支持HQL查询.直接返回List集合.

     List findByCriteria(DetachedCriteria criteria)  :离线条件查询.

     List findByNamedQuery(String queryName, Object... values):命名查询的方式.

     

    2
    0
     
     

      相关文章推荐
    • 深度学习模型-13 迁移学习(Transfer Learning)技术概述
    • 【直播】机器学习之凸优化--马博士
    • NCL學習筆記
    • 【直播】计算机视觉原理及实战--屈教授
    • 创建目录文件夹
    • 机器学习&数据挖掘7周实训--韦玮
    • JSONObject、JSONArray
    • 机器学习之数学基础系列--AI100
    • Zookeeper简介
    • 【套餐】2017软考系统集成项目管理工程师顺利通关套餐--徐朋
    • 关于 multidex 问题 return code 1 for dex
    • 【课程】深入探究Linux/VxWorks的设备树--宋宝华
    • Activiti流程设计工具
    • android应用开发-从设计到实现 1-1 创意
    • Power Calculus (UVA - 1374)
    • 客户端开发设计总结
    原创粉丝点击