码迷,mamicode.com
首页 > 编程语言 > 详细

J2EE搭建SpringMVC+hibernate开发环境

时间:2014-09-05 18:16:21      阅读:434      评论:0      收藏:0      [点我收藏+]

标签:spring   hibernate   java   事务   框架   

             搭建过程完全参考 http://blog.csdn.net/chenyi0834/article/details/19631445

SpringMVC+Hibernate+Spring整合实例(一)

bubuko.com,布布扣bubuko.com,布布扣

                  

本篇关于SpringMVC基本都会采用注解的方式,首先配置好数据源以及事务spring-common.xml,放在config.spring包下:


<?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:mvc="http://www.springframework.org/schema/mvc"  
    xsi:schemaLocation="http://www.springframework.org/schema/beans   
    http://www.springframework.org/schema/beans/spring-beans.xsd
    http://www.springframework.org/schema/tx/spring-tx.xsd">
    
    
    
    <!-- 采用注解的方式,首先配置好数据源以及事务 -->
    <!-- 配置数据源 -->  
    <!--配置jdbc.properties文件的位置信息,路径还是区分大小写 -->
    <bean  class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
        <property name="locations" value="WEB-INF/jdbc/jdbc.properties" />  
    </bean>
   
    <bean id="dataSource"
            class="org.apache.commons.dbcp.BasicDataSource"   destroy-method="close">   
        <property name="driverClassName" value="${jdbc.driver}" />   
        <property name="url" value="${jdbc.url}" />
        <property name="username" value="${jdbc.user}" />   
        <property name="password" value="${jdbc.password}" />   
        <!-- 数据库连接池配置 -->   
        <property name="initialSize" value="0" />
        <!-- 初始化连接数量 -->   
        <property name="maxActive" value="200" />
        <!-- 最大连接数量 -->   
        <property name="maxIdle" value="2000" />
        <!-- 最大空闲连接数量 -->   
        <property name="minIdle" value="0" />
        <!-- 最小空闲连接数量 -->  
        <property name="maxWait" value="600" />
        <!-- 最大等待时间 -->
        
        <!-- testOnBorrow true 指明是否在从池中取出连接前进行检验,如果检验失败,则从池中去除连接并尝试取出另一个.  -->
        <property name="testOnBorrow">
            <value>true</value>
           </property>
           
           <!-- 如果testOnBorrow为true而validationQuery没有设置,或为空,
           或你给的不是一个select语句且没有数据返回。testOnBorrow也是白设。
           validationQuery这个的SQL语句一般查询dual表.常用的有SELECT 1 FROM DUAL。
           最也不要使用SELECT sysdate FROM DUAL.这个语句的效率没有前面说的一个好。
           WebLogic 就是使用的SELECT 1 FROM DUAL这个sql语句。  -->
            <property name="validationQuery">
            <value>SELECT 1 FROM DUAL</value>
           </property>
           <!-- 要正式系统中使用的数据源最好是用上这个testOnBorrow。这样可以保证使用的每个数据源都不会出现长时间没有使用中断后
           。出现Could not close JDBC Connection这种问题。  -->
     </bean>
     
     
    
      <!-- 配置SessionFactory -->  
    <bean id="sessionFactory"
                class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">  
        <property name="dataSource" ref="dataSource" />  
        <property name="hibernateProperties">  
            <props>      
                <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>  
                <prop key="hibernate.hbm2ddl.auto">update</prop>  
                <prop key="hibernate.show_sql">true</prop>  
                <prop key="hibernate.format_sql">true</prop>  
            </props>
        </property>  
        <property name="annotatedClasses">  
            <list>
                <value>com.provider.entity.User</value>
            </list>
        </property>
    </bean>
    
       <!-- 配置一个事务管理器 -->  
    <bean id="transactionManager"
            class="org.springframework.orm.hibernate4.HibernateTransactionManager">  
        <property name="sessionFactory" ref="sessionFactory"/>  
    </bean>  
    
</beans>




然后配置关于SpringMVC的内容,下面配置中都有注释说明,就不再赘述,spring-mvc.xml放在config.spring包下:

<?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:mvc="http://www.springframework.org/schema/mvc"
    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.xsd  
    
    http://www.springframework.org/schema/context  
    http://www.springframework.org/schema/context/spring-context-3.2.xsd  
    http://www.springframework.org/schema/tx
    http://www.springframework.org/schema/tx/spring-tx-3.2.xsd
    http://www.springframework.org/schema/mvc  
    http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd">

    <!-- 开启注解 -->
    <!--<mvc:annotation-driven/>-->
    <!-- http://blog.csdn.net/jianxin1009/article/details/9202907
    然后用@Transactional对类或者方法进行标记,如果标记到类上,那么次类中所有方法都进行事务回滚处理,
    在类中定义Transactional的时候,它有propagation、rollbackFor、noRollbackFor等属性,
    此属性是用来定义事务规则,而定义到哪这个就是事务入口。 -->
    <tx:annotation-driven transaction-manager="txManager" proxy-target-class="true"/>
    
    <!-- 注解扫描包  参考介绍网址http://tristan-s.iteye.com/blog/2012160-->
    <context:annotation-config />
    <context:component-scan base-package="com.provider" />
    <context:component-scan base-package="com.provider.controller" />  
    <context:component-scan base-package="com.provider.dao" />
    <context:component-scan base-package="com.provider.entity" />

    <!-- 静态资源(js/image)的访问 -->
    <mvc:resources location="/js/" mapping="/js/**" />
    <mvc:resources mapping="/javascript/**" location="/asset/javascript/" />
    <mvc:resources mapping="/styles/**" location="/asset/css/" />
    <mvc:resources mapping="/images/**" location="/asset/images/" />




    <!-- SpringMVC上传文件时,需要配置MultipartResolver处理器 -->
    <bean id="multipartResolver"
        class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
        <!-- 指定所上传文件的总大小不能超过10m。注意maxUploadSize属性的限制不是针对单个文件,而是所有文件的容量之和 -->
        <property name="maxUploadSize" value="10000000" />
    </bean>


    <!-- 定义视图解析器 -->
    <bean id="viewResolver"
        class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/"></property>
        <property name="suffix" value=".jsp"></property>
    </bean>

     

</beans>



最后是web.xml中


<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
    id="WebApp_ID" version="2.5">

    <display-name>storecenter</display-name>
    <welcome-file-list>
        <welcome-file>login.jsp</welcome-file>
    </welcome-file-list>

    <!-- 加载所有的配置文件 -->
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath*:config/spring/spring-*.xml</param-value>
    </context-param>

    <!-- 配置Spring监听 -->
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>


    <!-- 配置SpringMVC -->
    <servlet>
        <servlet-name>springMVC</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath*:config/spring/spring-mvc.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>

    <servlet-mapping>
        <servlet-name>springMVC</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>


    <!-- 配置字符集 -->
    <filter>
        <filter-name>encodingFilter</filter-name>
        <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
        <init-param>
            <param-name>encoding</param-name>
            <param-value>UTF-8</param-value>
        </init-param>
        <init-param>
            <param-name>forceEncoding</param-name>
            <param-value>true</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>encodingFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>



    <!-- 配置Session -->
    <filter>
        <filter-name>openSession</filter-name>
        <filter-class>org.springframework.orm.hibernate4.support.OpenSessionInViewFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>openSession</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

</web-app>





Spring中如何配置Hibernate事务(出自http://blog.csdn.net/jianxin1009/article/details/9202907)


   为了保证数据的一致性,在编程的时候往往需要引入事务这个概念。事务有4个特性:原子性、一致性、隔离性、持久性。

         事务的种类有两种:编程式事务和声明式事务。编程式事务就是将事务处理放在程序中,而声明式事务则是通过配置文件或者注解进行操作。

         在Spring中有声明式事务的概念,通过和Hibernate类似框架的集成,可以很好的完成声明式事务。

         其实,不论在Spring中有几种配置Hibernate事务的方法,都逃不出一下几条:

         1.配置SessionFactory

         2.配置事务容器

         3.配置事务规则

         4.配置事务入口

         后面一共为大家提供4种配置Hibernate事务的方法。

         首先说下配置SessionFactory,配置SessionFactory有两种方式,一种是通过配置hibernate.cfg.xml文件的位置来配置SessionFactory,另一种就是在Spring配置文件中,手动配置数据源。

         下面是两种配置SessionFactory的方式(第二种配置需要额外引入两个包:commons-dbcp、commons-pool)

  1. <!-- 1、第一种配置SessionFactory的方式 -->  
  2. <bean id="sessionFactory"  
  3.     class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">  
  4.     <property name="configLocation" value="classpath:hibernate.cfg.xml" />  
  5. </bean>  
  6.   
  7. <!-- 2、第二种配置SessionFactory的方式 -->  
  8. <!-- 2.1配置数据源 -->  
  9. <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"  
  10.     destroy-method="close">  
  11.     <property name="driverClassName" value="com.mysql.jdbc.Driver"></property>  
  12.     <property name="url" value="jdbc:mysql://localhost:3306/hibernate_cache"></property>  
  13.     <property name="username" value="root"></property>  
  14.     <property name="password" value="admin"></property>  
  15. </bean>  
  16. <!-- 2.2、配置SessionFactory -->  
  17. <bean id="sessionFactory"  
  18.     class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">  
  19.     <property name="dataSource" ref="dataSource"></property>  
  20.     <property name="hibernateProperties">  
  21.         <props>  
  22.             <prop key="hibernate.hbm2ddl.auto">update</prop>  
  23.         </props>  
  24.     </property>  
  25.     <property name="mappingLocations">  
  26.         <list>  
  27.             <value>classpath:实体对应xml的路径</value>  
  28.         </list>  
  29.     </property>  
  30. </bean>  

         至此Hibernate就成功的将SessionFactory交给了Spring来管理。现在再来看Spring是怎样管理Hibernate事务的吧。

         第一种方式,利用tx标签配置事务。

  1. <!-- 配置事务容器 -->  
  2. <bean id="transactionManager"  
  3.     class="org.springframework.orm.hibernate3.HibernateTransactionManager">  
  4.     <property name="sessionFactory" ref="sessionFactory" />  
  5. </bean>  
  6. <!-- 定义事务规则 -->  
  7. <tx:advice id="txAdvice" transaction-manager="transactionManager">  
  8.     <tx:attributes>  
  9.         <tx:method name="add*" propagation="REQUIRED" />  
  10.         <tx:method name="modify*" propagation="REQUIRED" />  
  11.         <tx:method name="del*" propagation="REQUIRED" />  
  12.         <tx:method name="*" propagation="REQUIRED" read-only="true" />  
  13.     </tx:attributes>  
  14. </tx:advice>  
  15. <!-- 定义事务入口 -->  
  16. <aop:config>  
  17.     <aop:pointcut id="allDaoMethod" expression="execution(* com.jianxin.dao.*.*(..))" />  
  18.     <aop:advisor advice-ref="txAdvice" pointcut-ref="allDaoMethod" />  
  19. </aop:config>  

         第二种,用代理进行配置

  1. <!-- 配置事务容器 -->  
  2. <bean id="transactionManager"  
  3.     class="org.springframework.orm.hibernate3.HibernateTransactionManager">  
  4.     <property name="sessionFactory" ref="sessionFactory" />  
  5. </bean>  
  6. <!-- 定义事务规则 -->  
  7. <bean id="transactionProxy"  
  8.     class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"  
  9.     abstract="true">  
  10.     <property name="transactionManager" ref="transactionManager" />  
  11.     <property name="transactionAttributes">  
  12.         <props>  
  13.             <!-- ,回滚为-,不回滚为+ -->  
  14.             <prop key="add*">PROPAGATION_REQUIRED,-Exception</prop>  
  15.             <prop key="modify*">PROPAGATION_REQUIRED,+MyException</prop>  
  16.             <prop key="del*">PROPAGATION_REQUIRED</prop>  
  17.             <prop key="*">READONLY</prop>  
  18.         </props>  
  19.     </property>  
  20. </bean>  
  21. <!-- 定义事务入口 -->  
  22. <bean id="userDaoProxy" parent="transactionProxy">  
  23.     <property name="target" ref="userDao"></property>  
  24. </bean>  

         第三种,利用拦截器

  1. <!-- 配置事务容器 -->  
  2. <bean id="transactionManager"  
  3.     class="org.springframework.orm.hibernate3.HibernateTransactionManager">  
  4.     <property name="sessionFactory" ref="sessionFactory" />  
  5. </bean>  
  6. <!-- 定义事务规则 -->  
  7. <bean id="transactionInterceptor"  
  8.     class="org.springframework.transaction.interceptor.TransactionInterceptor">  
  9.     <property name="transactionManager" ref="transactionManager" />  
  10.     <property name="transactionAttributes">  
  11.         <props>  
  12.             <!-- 回滚为-,不回滚为+ -->  
  13.             <prop key="add*">PROPAGATION_REQUIRED,-Exception</prop>  
  14.             <prop key="modify*">PROPAGATION_REQUIRED,+MyException</prop>  
  15.             <prop key="del*">PROPAGATION_REQUIRED</prop>  
  16.             <prop key="*">READONLY</prop>  
  17.         </props>  
  18.     </property>  
  19. </bean>  
  20. <!-- 定义事务入口 -->  
  21. <bean id="proxyFactory"  
  22.     class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">  
  23.     <property name="interceptorNames">  
  24.         <list>  
  25.             <value>transactionInterceptor</value>  
  26.         </list>  
  27.     </property>  
  28.     <property name="beanNames">  
  29.         <list>  
  30.             <value>*Dao</value>  
  31.         </list>  
  32.     </property>  
  33. </bean>  

         第四种,利用注解。

         首先,在配置文件中写入下面语句,打开注解功能

  1. <!-- 开户事务注解功能 -->  
  2. <tx:annotation-driven transaction-manager="transactionManager" />  

         然后用@Transactional对类或者方法进行标记,如果标记到类上,那么次类中所有方法都进行事务回滚处理,在类中定义Transactional的时候,它有propagation、rollbackFor、noRollbackFor等属性,此属性是用来定义事务规则,而定义到哪这个就是事务入口。

         纵观以上四种在Spring中配置Hibernate事务的方法,其核心都是一样的,不同的只是实现的方式而已。所以看到这,这篇博文中你只需要记住4句话,就可以轻松理解在Spring中配置Hibernate事务的核心:

         1.配置SessionFactory

         2.配置事务容器

         3.配置事务规则

         4.配置事务入口



J2EE搭建SpringMVC+hibernate开发环境

标签:spring   hibernate   java   事务   框架   

原文地址:http://blog.csdn.net/zhanjianshinian/article/details/39082925

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!