zoukankan      html  css  js  c++  java
  • 实战----整合项目

    设计代码分3层:

    view-->service-->Dao

    Struts2+hibernate+spring+JBPM+junit+jquery

    一. 建数据库:  

    create database itcastoa0720 default character set utf8;
    

    查看:

    show create database itcastoa0720
    

    二. Myeclipse工程      

      1. 新建web工程, 工程右键属性, 编码设为utf-8
    
      2. 添加框架环境, 
    Struts2: jar, struts.xml, web.xml
    hibernate: jar, hibernate.cfg.xml, *.hbm.xml
    spring:jar, applicationContext
       junit: jar 3. 整合SSH Struts2+spring整合: 目的, spring负责主要IOC(管理对象), AOP(事务管理), 就为了让spring容器来管理struts的action hibernate+spring整合: 目的, sessionFactory是创建session的, factory就需要一个, 管理一个工厂的话,用spring来管理一个单例工厂, 最重要的是, 声明式事务管理 4. 资源分类 5. 配置日志
    • 添加junit的jar
    • 添加框架环境, Struts2

      1. 添加Struts2的jar (commons-fileupload, commons-io, freemarker, ognl, struts2-core, xwork-core), Struts.xml, web.xml

          struts.xml:

          alt+/可以提示, 但是不能自动.设置自动提示: 

          1. Preferences对话框中,选择“XML Catalog” , 

          2. add目录:D:Javajarstruts-2.3.24.1srccoresrcmain esources  -->   URI.

          3. 设置xml关联编辑器:  Preferences->file asso...->找到.xml, 设置myeclipse xml editor为默认.

    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE struts PUBLIC
    	"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
    	"http://struts.apache.org/dtds/struts-2.3.dtd">
    
    <struts>
    	<!-- 配置为开发模式 -->
          <constant name="struts.devMode" value="true" />
    	<!-- 配置扩展名为action -->
    	<constant name="struts.action.extension" value="action" />	
    	<!--把主题配置为simple, -->
    	<constant name="struts.ui.theme" value="simple" />
    	
          <package name="default" namespace="/" extends="struts-default">		
          </package>
      <!-- Add packages here --> </struts>

      

     2.配置  web.xml, 添加struts2的filter:     

          

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app version="3.0" 
    	xmlns="http://java.sun.com/xml/ns/javaee" 
    	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
    	http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
      <display-name></display-name>	
      
      <filter>
    	  <filter-name>struts2</filter-name>
    	  <filter-class>
    				org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
    	  </filter>
      <filter-mapping>
        <filter-name>struts2</filter-name>
        <url-pattern>/*</url-pattern>
      </filter-mapping>
      
      <welcome-file-list>
        <welcome-file>index.jsp</welcome-file>
      </welcome-file-list>
    </web-app>
    

      

     

    • 添加框架环境, hibernate: jar包, hibernate.cfg.xml, *.hbm.xml

        jar包: 核心包, 必须包, jpa, c3p0, jdbc

        hibernate.cfg.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>
    
            <!-- Database connection settings -->
    		<property name="dialect">org.hibernate.dialect.MySQLDialect</property>
            <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
            <property name="connection.url">jdbc:mysql://localhost/hibernate</property>
            <property name="connection.username">root</property>
            <property name="connection.password">bjsxt</property>
    
    		<!-- 2. other configuration -->
            <property name="show_sql">true</property>
    		<property name="hbm2ddl.auto">update</property>
            <property name="connection.pool_size">1</property>
    
         
    		<!--3. mapping-->
            <mapping resource="com/bjsxt/hibernate/Student.hbm.xml"/>
    		<mapping class="com.bjsxt.hibernate.Teacher"/>
        </session-factory>
    
    </hibernate-configuration>
    

     

    • 添加框架环境, spring: jar包, applicationContext.xml/beans.xml

    applicationContext.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:context="http://www.springframework.org/schema/context"
    	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/context
               http://www.springframework.org/schema/context/spring-context-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">
    	<context:component-scan base-package="cn.itcast.oa" />	
    </beans> 
    • 整合spring和struts2: 

    新建class TestAction, 包cn.itcast.oa.test:

    package cn.itcast.oa.test;
    
    import com.opensymphony.xwork2.ActionSupport;
    
    public class TestAction extends ActionSupport{
    	@Override
    	public String execute() throws Exception {
    		System.out.println("===>TestAction.execute()");
    		return "success";
    	}
    
    }
    

    创建一个jsp:test.jsp, 有编码就改成utf-8

    <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
    
    <html>
      <head>    
        <title>My JSP 'index.jsp' starting page</title>
      </head>
      
      <body>
        Struts2添加成功. <br>
      </body>
    </html>
    

    配置struts.xml:

    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE struts PUBLIC
    	"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
    	"http://struts.apache.org/dtds/struts-2.3.dtd">
    
    <struts>
    	<!-- 配置为开发模式 -->
        <constant name="struts.devMode" value="true" />
    	<!-- 配置扩展名为action -->
    	<constant name="struts.action.extension" value="action" />	
    	<!--把主题配置为simple, -->
    	<constant name="struts.ui.theme" value="simple" />
    	
        <package name="default" namespace="/" extends="struts-default">
        	<!-- 配置 测试用的action, 还没有和spring整合, class属性写全 名-->
    		<action name="test" class="cn.itcast.oa.test.TestAction">
    			<result name="success">/test.jsp</result>
    		</action>
        </package>
        <!-- Add packages here -->
    
    </struts>
    

    test.jsp:

    <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
    
    <html>
      <head>    
        <title>My JSP 'index.jsp' starting page</title>
      </head>
      
      <body>
        Struts2添加成功. <br>
      </body>
    </html>
    

      

    运行成功.

    整合前测试spring:

    1. 用于声明bean

    @Service用于标注业务层组件

    @Controller用于标注控制层组件(如struts中的action)

    @Repository用于标注数据访问组件,即DAO组件

    @Component泛指组件,当组件不好归类的时候,我们可以使用这个注解进行标注。

    2. 配置bean的生命周期: prototype, 不是单例.

    详细步骤:

    1. 新建类SpringTest.java:

    package cn.itcast.oa.test;
    
    import org.junit.Test;
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    
    public class SpringTest {
    	private ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
    	@Test
    	public void testBean() throws Exception {
    		TestAction testAction =  (TestAction) ac.getBean("testAction");
    		System.out.println(testAction);
    	}
    }
    

    2. 在testAction类前加入@Controller

    package cn.itcast.oa.test;
    
    import org.springframework.context.annotation.Scope;
    import org.springframework.stereotype.Component;
    import org.springframework.stereotype.Controller;
    
    import com.opensymphony.xwork2.ActionSupport;
    
    @Controller
    @Scope("prototype")
    public class TestAction extends ActionSupport{
    	@Override
    	public String execute() throws Exception {
    		System.out.println("===>TestAction.execute()");
    		return "success";
    	}
    
    }
    

      

    3. 在SpringTest上运行 junit test , 成功!

    package cn.itcast.oa.test;
    import org.hibernate.SessionFactory;
    import org.junit.Test;
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    
    public class SpringTest {
    	private ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
    	@Test
    	public void testBean() throws Exception {
    		TestAction testAction =  (TestAction) ac.getBean("testAction");
    		System.out.println(testAction);
    	}	
    }
    

      

    还有一种方法: XML, 只需要删除testAction类前的@Controller 更改ApplicationContext.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:context="http://www.springframework.org/schema/context"
    	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/context
               http://www.springframework.org/schema/context/spring-context-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">
    	<context:annotation-config />
    	<!-- 自动扫描与装配bean -->
    	<context:component-scan base-package="cn.itcast.oa.test" />	
    		<bean id="testAction" class = "cn.itcast.oa.test.TestAction" scope="prototype"></bean>
    </beans>
    

    整合开始:    1. 在web.xml里配置spring的监听器    2. 加入整合jar包

    4. 配置web.xml里的sping监听器:   

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee"
    	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
    	http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
    	<display-name></display-name>
    
    	<!-- 配置spring用于初始化容器对象的监听器 -->
    	<listener>
    		<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    	</listener>
    
    	<context-param>
    		<param-name>contextConfigLocation</param-name>
    		<param-value>classpath:applicationContext*.xml</param-value>
    	</context-param>
    
    	<!-- 配置struts2的核心过滤器 -->
    	<filter>
    		<filter-name>struts2</filter-name>
    		<filter-class>
    			org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
    		</filter-class>
    	</filter>
    	<filter-mapping>
    		<filter-name>struts2</filter-name>
    		<url-pattern>/*</url-pattern>
    	</filter-mapping>
    
    	<welcome-file-list>
    		<welcome-file>index.jsp</welcome-file>
    	</welcome-file-list>
    </web-app>
    

     

    5. 加入struts2-sping-plugin的jar包

    6. 更改struts.xml:, 把action的class属性改成bean名称

    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE struts PUBLIC
    	"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
    	"http://struts.apache.org/dtds/struts-2.3.dtd">
    
    <struts>
    	<!-- 配置为开发模式 -->
        <constant name="struts.devMode" value="true" />
    	<!-- 配置扩展名为action -->
    	<constant name="struts.action.extension" value="action" />	
    	<!--把主题配置为simple, -->
    	<constant name="struts.ui.theme" value="simple" />
    	
        <package name="default" namespace="/" extends="struts-default">
        	<!-- 配置 测试用的action, 还没有和spring整合, class属性写全 名-->
        	<!-- 当struts2余spring整合后,class属性可以写bean的名称 -->
    		<!--<action name="test" class="cn.itcast.oa.test.TestAction"> -->
    		<action name="test" class="testAction">
    			<result name="success">/test.jsp</result>
    		</action>
        </package>
    
    
        <!-- Add packages here -->
    
    </struts>
    

    整合成功测试test.jsp:

    <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
    
    <html>
      <head>    
        <title>My JSP 'index.jsp' starting page</title>
      </head>
      
      <body>
        Struts2添加成功. <br>
        Struts2与spring整合成功. <br> 
      </body>
    </html>
    

      

    运行: http://localhost:8080/Itcastoa/test.action, 整合成功!!!

    spring与struts2整合总结:

    1. 加入整合jar包, struts2-sping-plugin的jar包,

    在web.xml里配置spring的监听器    

    <listener>
    	<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
    <context-param>
    	<param-name>contextConfigLocation</param-name>
    	<param-value>classpath:applicationContext*.xml</param-value>
    </context-param>
    

    2. 在action上面加入@Controller:    

    package cn.itcast.oa.test;
    import javax.annotation.Resource;
    import org.springframework.context.annotation.Scope;
    import org.springframework.stereotype.Component;
    import org.springframework.stereotype.Controller;
    import com.opensymphony.xwork2.ActionSupport;
    @Controller @Scope("prototype") public class TestAction extends ActionSupport{ @Override public String execute() throws Exception { System.out.println("===>TestAction.execute()"); return "success"; } }

    3. 配置struts.xml文件, 就可以在配置action的class的时候直接使用 action名字    

    <action name="test" class="testAction">
    	<result name="success">/test.jsp</result>
    </action>
    

    所以spring整合struts2的目的就是为了管理action , 如果action里想使用某个service文件的话, 直接注入@Resource就可以了.

    •   hibernate+spring整合

    整合目的:

    1. spring管理sessionFactory实例(只需要一个)

    2. 声明式事务管理

    改配置文件:

    1. 考虑到连接池的问题, 将hibernate配置文件里的jdbc配置注释掉:

    <?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>
    
            <!-- Database connection settings -->
    		<property name="dialect">org.hibernate.dialect.MySQLDialect</property>
    		<!-- 
            <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
            <property name="connection.url">jdbc:mysql://localhost/hibernate</property>
            <property name="connection.username">root</property>
            <property name="connection.password">bjsxt</property>
     		-->
    		<!-- 2. other configuration -->
            <property name="show_sql">true</property>
    		<property name="hbm2ddl.auto">update</property>
            <property name="connection.pool_size">1</property>
    
         
    		<!--3. mapping
            <mapping resource="com/bjsxt/hibernate/Student.hbm.xml"/>
    		<mapping class="com.bjsxt.hibernate.Teacher"/>-->
        </session-factory>
    
    </hibernate-configuration>
    

    2. 新增jdbc.properties, 加入mysql配置:

    jdbcUrl=jdbc:mysql://localhost/itcastoa0720
    driverClass=com.mysql.jdbc.Driver
    user=root
    password=linda0213

    3. applicationContext.xml配置: 别忘了要导入外部properties文件

    <?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:context="http://www.springframework.org/schema/context"
    	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/context
               http://www.springframework.org/schema/context/spring-context-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">
    	<context:annotation-config />
    	<!-- 自动扫描与装配bean -->
    	<context:component-scan base-package="cn.itcast.oa" />
    	<!-- <bean id="testAction" class = "cn.itcast.oa.test.TestAction"></bean> -->
    	
    	<!-- 导入外部的properties文件 -->
    	<context:property-placeholder location="classpath:jdbc.properties"/>
    	
    	<!-- 配置SessionFactory -->
    	<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
    		<!-- 指定 hibernate 配置文件路径 -->
    		<property name="configLocation" value="classpath:hibernate.cfg.xml"></property>
    		<!-- 配置c3p0数据库连接池 -->
    		<property name="dataSource">
    			<bean class="com.mchange.v2.c3p0.ComboPooledDataSource">
    				<!-- 数据连接信息 -->
    				<property name="jdbcUrl" value="${jdbcUrl}"></property>
    				<property name="driverClass" value="${driverClass}"></property>
    				<property name="user" value="${user}"></property>
    				<property name="password" value="${password}"></property>
    				<!-- 其他配置 -->
    				<!-- 初始化时获取3个连接, 取值应该在minPoolSize与maxPoolSize之间, default:3 -->
    				<property name="initialPoolSize" value="3"></property>
    				<!-- 连接池中保留的最小连接数, default:3 -->
    				<property name="minPoolSize" value="3"></property>
    				<!-- 连接池中保留的最大连接数, default:15 -->
    				<property name="maxPoolSize" value="5"></property>
    				<!-- 当连接池中的连接耗尽的时候, c3p0一次同时获取的连接数, default:3 -->
    				<property name="acquireIncrement" value="3"></property>
    				<!-- 控制数据源内加载的PreparedStatements数量, 如果maxStatements与maxStatementsPerConnection均为0, 则缓存被关闭, default:0 -->
    				<property name="maxStatements" value="8"></property>
    				<!-- maxStatements与maxStatementsPerConnection定义了连接池内单个连接所拥有的最大缓存statements数, default:0 -->
    				<property name="maxStatementsPerConnection" value="5"></property>
    				<!-- 最大空闲时间, 1800秒内未使用则连接被丢弃,若为0则永不丢弃,default:0 -->
    				<property name="maxIdleTime" value="1800"></property>
    			</bean>
    		</property>
    	</bean>
    </beans>
    

    4. springtest.java里测试sessionFactory:

    package cn.itcast.oa.test;
    
    import org.hibernate.SessionFactory;
    import org.junit.Test;
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    
    public class SpringTest {
    	private ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
    	@Test
    	public void testBean() throws Exception {
    		TestAction testAction =  (TestAction) ac.getBean("testAction");
    		System.out.println(testAction);
    	}
    	
    	@Test
    	public void testSessionFactory() throws Exception{
    		SessionFactory sessionFactory = (SessionFactory)ac.getBean("sessionFactory");
    		System.out.println(sessionFactory);
    		
    	}
    }
    

    测试成功后进行声明式事务管理:

    1. 配置applicationContext.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:context="http://www.springframework.org/schema/context"
    	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/context
               http://www.springframework.org/schema/context/spring-context-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">
    	<context:annotation-config />
    	<!-- 自动扫描与装配bean -->
    	<context:component-scan base-package="cn.itcast.oa" />
    	<!-- <bean id="testAction" class = "cn.itcast.oa.test.TestAction"></bean> -->
    	
    	<!-- 导入外部的properties文件 -->
    	<context:property-placeholder location="classpath:jdbc.properties"/>
    	
    	<!-- 配置SessionFactory -->
    	<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
    		<!-- 指定 hibernate 配置文件路径 -->
    		<property name="configLocation" value="classpath:hibernate.cfg.xml"></property>
    		<!-- 配置c3p0数据库连接池 -->
    		<property name="dataSource">
    			<bean class="com.mchange.v2.c3p0.ComboPooledDataSource">
    				<!-- 数据连接信息 -->
    				<property name="jdbcUrl" value="${jdbcUrl}"></property>
    				<property name="driverClass" value="${driverClass}"></property>
    				<property name="user" value="${user}"></property>
    				<property name="password" value="${password}"></property>
    				<!-- 其他配置 -->
    				<!-- 初始化时获取3个连接, 取值应该在minPoolSize与maxPoolSize之间, default:3 -->
    				<property name="initialPoolSize" value="3"></property>
    				<!-- 连接池中保留的最小连接数, default:3 -->
    				<property name="minPoolSize" value="3"></property>
    				<!-- 连接池中保留的最大连接数, default:15 -->
    				<property name="maxPoolSize" value="5"></property>
    				<!-- 当连接池中的连接耗尽的时候, c3p0一次同时获取的连接数, default:3 -->
    				<property name="acquireIncrement" value="3"></property>
    				<!-- 控制数据源内加载的PreparedStatements数量, 如果maxStatements与maxStatementsPerConnection均为0, 则缓存被关闭, default:0 -->
    				<property name="maxStatements" value="8"></property>
    				<!-- maxStatements与maxStatementsPerConnection定义了连接池内单个连接所拥有的最大缓存statements数, default:0 -->
    				<property name="maxStatementsPerConnection" value="5"></property>
    				<!-- 最大空闲时间, 1800秒内未使用则连接被丢弃,若为0则永不丢弃,default:0 -->
    				<property name="maxIdleTime" value="1800"></property>
    			</bean>
    		</property>
    	</bean>
    	
    	<!-- 配置声明式事务管理 -->
    	<bean id="txManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
    		<property name="sessionFactory" ref="sessionFactory"></property>
    	</bean>
    	<tx:annotation-driven transaction-manager="txManager"/> 
    		
    	
    </beans>
    

    2. 新建user.java, 包: cn.itcast.oa.domain

    package cn.itcast.oa.domain;
    
    public class User {
    	private long id;
    	private String name;
    	public long getId() {
    		return id;
    	}
    	public void setId(long id) {
    		this.id = id;
    	}
    	public String getName() {
    		return name;
    	}
    	public void setName(String name) {
    		this.name = name;
    	}
    	
    }
    

    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 package="cn.itcast.oa.domain">
    	<class name="User" table="itcast_user">
    		<id name="id">
    			<generator class="native"></generator>
    		</id>
    		<property name="name" />
    	</class>
    </hibernate-mapping>
    

    4. 配置hibernate.cfg.xml里的mapping内容:

    <?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>
    
    		<!-- Database connection settings -->
    		<property name="dialect">org.hibernate.dialect.MySQLDialect</property>
    		<!-- <property name="connection.driver_class">com.mysql.jdbc.Driver</property> 
    			<property name="connection.url">jdbc:mysql://localhost/hibernate</property> 
    			<property name="connection.username">root</property> <property name="connection.password">bjsxt</property> -->
    		<!-- 2. other configuration -->
    		<property name="show_sql">true</property>
    		<property name="hbm2ddl.auto">update</property>
    		<property name="connection.pool_size">1</property>
    
    
    		<!--3. mapping -->
    		<mapping resource="cn/itcast/oa/domain/User.hbm.xml" />
    		
    	</session-factory>
    
    </hibernate-configuration>
    

      

    5. 开始写测试文件, 先添加一个TestService.java:  

    package cn.itcast.oa.test;
    
    import javax.annotation.Resource;
    
    import org.hibernate.Session;
    import org.hibernate.SessionFactory;
    import org.springframework.stereotype.Service;
    import org.springframework.transaction.annotation.Transactional;
    
    import cn.itcast.oa.domain.User;
    
    
    @Service
    public class TestService {
    	@Resource
    	private SessionFactory sessionFactory; 
    	@Transactional
    	public void saveTwoUsers(){
    		Session session = sessionFactory.getCurrentSession();
    		session.save(new User());
    		int a = 1/0; //exception
    		session.save(new User());
    	}
    }
    

    写测试文件:

    package cn.itcast.oa.test;
    
    import org.hibernate.SessionFactory;
    import org.junit.Test;
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    
    public class SpringTest {
    	private ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
    	@Test
    	public void testBean() throws Exception {
    		TestAction testAction =  (TestAction) ac.getBean("testAction");
    		System.out.println(testAction);
    	}
    	
    	@Test
    	public void testSessionFactory() throws Exception{
    		SessionFactory sessionFactory = (SessionFactory)ac.getBean("sessionFactory");
    		System.out.println(sessionFactory);
    		
    	}
    	
    	@Test
    	public void testTransaction() throws Exception {
    		TestService testService = (TestService) ac.getBean("testService");
    		testService.saveTwoUsers();
    	}
    	
    }
    

    测试文件test.jsp,

    <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
    
    <html>
      <head>    
        <title>My JSP 'index.jsp' starting page</title>
      </head>
      
      <body>
        Struts2添加成功. <br>
        Struts2与spring整合成功. <br>
        Struts2与spring与hibernate整合成功. <br>
      </body>
    </html>
    

    布置工程时出错, 导入slf-nop包解决!!  

    http://localhost:8080/Itcastoa/test.action后,

    创建了新表, 把service里的异常删掉, 再执行, 保存进去两个数据. 并且从2,3开始计数id

    到此整合完成!!!

    spring和hibernate整合总结:

    1. 新建jdbc.properties, 把数据库连接信息填入:

    jdbcUrl=jdbc:mysql://localhost/itcastoa0720
    driverClass=com.mysql.jdbc.Driver
    user=root
    password=linda0213
    

    2. 配置hibernate.cfg.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>
    		<!-- Database connection settings -->
    		<property name="dialect">org.hibernate.dialect.MySQLDialect</property>		
    			
    		<!-- 2. other configuration -->
    		<property name="show_sql">true</property>
    		<property name="hbm2ddl.auto">update</property>
    		<property name="connection.pool_size">1</property>
    <!--3. mapping --> <mapping resource="cn/itcast/oa/domain/User.hbm.xml" /> </session-factory> </hibernate-configuration>

    3. applicationContext.xml配置内容: 导入属性文件, sessionFactory, dataSource, transaction

    <?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:context="http://www.springframework.org/schema/context"
    	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/context
               http://www.springframework.org/schema/context/spring-context-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">
    	<context:annotation-config />
    	<!-- 自动扫描与装配bean -->
    	<context:component-scan base-package="cn.itcast.oa" />
    	<!-- <bean id="testAction" class = "cn.itcast.oa.test.TestAction"></bean> -->
    	
    	<!-- 导入外部的properties文件 -->
    	<context:property-placeholder location="classpath:jdbc.properties"/>
    	
    	<!-- 配置SessionFactory -->
    	<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
    		<!-- 指定 hibernate 配置文件路径 -->
    		<property name="configLocation" value="classpath:hibernate.cfg.xml"></property>
    		<!-- 配置c3p0数据库连接池 -->
    		<property name="dataSource">
    			<bean class="com.mchange.v2.c3p0.ComboPooledDataSource">
    				<!-- 数据连接信息 -->
    				<property name="jdbcUrl" value="${jdbcUrl}"></property>
    				<property name="driverClass" value="${driverClass}"></property>
    				<property name="user" value="${user}"></property>
    				<property name="password" value="${password}"></property>
    				<!-- 其他配置 -->
    				<!-- 初始化时获取3个连接, 取值应该在minPoolSize与maxPoolSize之间, default:3 -->
    				<property name="initialPoolSize" value="3"></property>
    				<!-- 连接池中保留的最小连接数, default:3 -->
    				<property name="minPoolSize" value="3"></property>
    				<!-- 连接池中保留的最大连接数, default:15 -->
    				<property name="maxPoolSize" value="5"></property>
    				<!-- 当连接池中的连接耗尽的时候, c3p0一次同时获取的连接数, default:3 -->
    				<property name="acquireIncrement" value="3"></property>
    				<!-- 控制数据源内加载的PreparedStatements数量, 如果maxStatements与maxStatementsPerConnection均为0, 则缓存被关闭, default:0 -->
    				<property name="maxStatements" value="8"></property>
    				<!-- maxStatements与maxStatementsPerConnection定义了连接池内单个连接所拥有的最大缓存statements数, default:0 -->
    				<property name="maxStatementsPerConnection" value="5"></property>
    				<!-- 最大空闲时间, 1800秒内未使用则连接被丢弃,若为0则永不丢弃,default:0 -->
    				<property name="maxIdleTime" value="1800"></property>
    			</bean>
    		</property>
    	</bean>
    	
    	<!-- 配置声明式事务管理 -->
    	<bean id="txManager"   class="org.springframework.orm.hibernate3.HibernateTransactionManager">
            <property name="sessionFactory" ref="sessionFactory" />
        </bean>     
        <tx:annotation-driven transaction-manager="txManager"/>	
    </beans>
    

    4. 编写业务逻辑service类: 此时就可以注入容器里的sessionFactory了, 同时声明事务管理

    @Service
    public class TestService {
    	@Resource
    	private SessionFactory sessionFactory; 
    	@Transactional
    	public void saveTwoUsers(){
    		Session session = sessionFactory.getCurrentSession();
    		session.save(new User());
    		//int a = 1/0; //exception
    		session.save(new User());
    	}
    }
    

    5. 测试文件可以直接获取testService了:

    public class SpringTest {
    	private ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");	
    	@Test
    	public void testTransaction() throws Exception {
    		TestService testService = (TestService) ac.getBean("testService");
    		testService.saveTwoUsers();
    	}	
    }
    

    到此 spring和hibernate整合完成,

    再验证struts整合:

    action调用testService测试:

    @Controller
    @Scope("prototype")
    public class TestAction extends ActionSupport{
    	@Resource
    	private TestService testService;
    	@Override
    	public String execute() throws Exception {		
    		System.out.println("===>TestAction.execute()");
    		testService.saveTwoUsers();
    		return "success";
    	}
    
    }
    

    浏览器输入http://localhost:8080/itcastoa/test.action验证成功!!!

    Struts2添加成功. 
    Struts2与spring整合成功. 
    Struts2与spring与hibernate整合成功. 
    

      

     

      

      

      

      

     

      

      

     

      

      

  • 相关阅读:
    ArrayList的几种初始化方法
    Java中date和calendar的用法
    Android中XML的命名空间、自定义属性
    Android中shape属性详解
    五分钟学GIS | 快速生成地图瓦片秘籍
    adb 提示adb server version(31) doesn't match this client(40) 解决办法
    mysql @value := 用法
    Mysql中(@i:=@i+1)的作用
    $.ajax()方法详解
    最少代码实现购物车所有功能
  • 原文地址:https://www.cnblogs.com/wujixing/p/5482748.html
Copyright © 2011-2022 走看看