1、配置数据源
数据库连接基本信息存放到properties文件中,因此先加载properties文件
1 <!-- jdbc连接信息 -->2 <context:property-placeholder3 location="classpath:io/shuqi/ssh/spring/transactionalAnnotation/jdbc.properties"/>
使用DBCP数据源配置xml如下
1 <!-- dbcp数据源配置 --> 2 <bean id="dbcpDataSources" class="org.apache.commons.dbcp2.BasicDataSource"> 3 <property name="driverClassName" value="${jdbc.driver}" /> 4 <property name="username" value="${jdbc.user}" /> 5 <property name="password" value="${jdbc.password}" /> 6 <property name="url" value="${jdbc.url}" /> 7 8 <property name="initialSize" value="${jdbc.initPoolSize}"></property> 9 <property name="maxOpenPreparedStatements" value="${jdbc.maxPoolSize}"></property>10 </bean>
使用C3P0数据源配置
1 <!-- c3p0数据源配置 --> 2 <bean id="c3p0DataSources" class="com.mchange.v2.c3p0.ComboPooledDataSource"> 3 <property name="driverClass" value="${jdbc.driver}" /> 4 <property name="user" value="${jdbc.user}" /> 5 <property name="password" value="${jdbc.password}" /> 6 <property name="jdbcUrl" value="${jdbc.url}" /> 7 8 <property name="initialPoolSize" value="${jdbc.initPoolSize}"></property> 9 <property name="maxPoolSize" value="${jdbc.maxPoolSize}"></property>10 </bean>
2、配置Hibernate的sessionFactory
hibernate3的sessionFactory有两种方式配置,分别是org.springframework.orm.hibernate3.LocalSessionFactoryBean基于*.hbm.xml 与org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean 基于 JPA注解方式的配置
- 使用 org.springframework.orm.hibernate3.LocalSessionFactoryBean的方式
1 <bean id="sessionFactory" 2 class="org.springframework.orm.hibernate3.LocalSessionFactoryBean" 3 p:dataSource-ref="c3p0DataSources"> 4 <property name="hibernateProperties"> 5 <props> 6 <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop> 7 <prop key="hibernate.hbm2ddl.auto">update</prop> 8 <prop key="hibernate.show_sql">true</prop> 9 </props>10 </property>11 <!-- 使用通配符 Resources -->12 <property name="mappingLocations">13 <list>14 <value>classpath:io/shuqi/ssh/spring/transactionalAnnotation/hibernate3/*.hbm.xml</value>15 </list>16 </property>17 </bean>
1 <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean" p:dataSource-ref="c3p0DataSources"> 2 <property name="hibernateProperties"> 3 <props> 4 <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop> 5 <prop key="hibernate.hbm2ddl.auto">update</prop> 6 <prop key="hibernate.show_sql">true</prop> 7 </props> 8 </property> 9 <!-- 使用逐一列出配置文件的方式 --> 10 <property name="mappingResources">11 <list><value>io/shuqi/ssh/spring/transactionalAnnotation/hibernate3/User.hbm.xml</value>12 </list>13 </property>14 15 </bean>
2.使用org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean的方式
1 <bean id="sessionFactory" 2 class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean" 3 p:dataSource-ref="c3p0DataSources"> 4 <property name="hibernateProperties"> 5 <props> 6 <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop> 7 <prop key="hibernate.hbm2ddl.auto">update</prop> 8 <prop key="hibernate.show_sql">true</prop> 9 </props>10 </property>11 <property name="annotatedClasses"> 12 <list> 13 <value>io.shuqi.ssh.spring.transactionalAnnotation.hibernate3.User</value> 14 </list> 15 </property>16 </bean>
1 <bean id="sessionFactory" 2 class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean" 3 p:dataSource-ref="c3p0DataSources"> 4 <property name="hibernateProperties"> 5 <props> 6 <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop> 7 <prop key="hibernate.hbm2ddl.auto">update</prop> 8 <prop key="hibernate.show_sql">true</prop> 9 </props>10 </property>11 <property name="packagesToScan" value="io.shuqi.ssh.spring.transactionalAnnotation.hibernate3"/>12 </bean>
Hibernate4的sessionFactory与Hibernate3的配置差不多,只是Hibernate3的两个类在Hibernate4变为了一个类(org.springframework.orm.hibernate4.LocalSessionFactoryBean)
1 <bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean" 2 p:dataSource-ref="c3p0DataSources"> 3 <property name="hibernateProperties"> 4 <props> 5 <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop> 6 <prop key="hibernate.hbm2ddl.auto">update</prop> 7 <prop key="hibernate.show_sql">true</prop> 8 </props> 9 </property>10 <property name="packagesToScan" value="io.shuqi.ssh.spring.transactionalAnnotation.hibernate4"/>11 </bean>
3、配置Spring的事务管理,将程序的事务管理交由Spring管理
1 <!-- 将事务交由Spring管理 -->2 <bean id="transactionManager" 3 class="org.springframework.orm.hibernate4.HibernateTransactionManager"4 p:sessionFactory-ref="sessionFactory"/>
4、启用Spring的@Transaction注解
1 <!-- 开启spring注解驱动,及@Transaction注解的开启 -->2 <tx:annotation-driven transaction-manager="transactionManager"/>
5、项目的maven依赖
1 <properties> 2 <spring.version4.1>4.1.6.RELEASE</spring.version4.1> 3 <spring.version4>4.0.9.RELEASE</spring.version4> 4 <spring.version3>3.2.13.RELEASE</spring.version3> 5 <hibernate4.version>4.3.10.Final</hibernate4.version> 6 <hibernate3.version>3.6.10.Final</hibernate3.version> 7 <!-- 软件版本配置 --> 8 <junit.version>4.12</junit.version> 9 <jackjson.version>2.5.4</jackjson.version> 10 <spring.version>4.1.6.RELEASE</spring.version> 11 <jstl.version>1.2</jstl.version> 12 <el.version>1.1.2</el.version> 13 <c3p0.version>0.9.5</c3p0.version> 14 <dbcp.version>2.1</dbcp.version> 15 <mysql.version>5.1.35</mysql.version> 16 <hibernate.version>3.6.10.Final</hibernate.version> 17 <javassist.version>3.13.0-GA</javassist.version> 18 <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 19 </properties> 20 21 <dependencies> 22 <!-- 测试时依赖包 --> 23 <dependency> 24 <groupId>junit</groupId> 25 <artifactId>junit</artifactId> 26 <version>${junit.version}</version> 27 <scope>test</scope> 28 </dependency> 29 <dependency> 30 <groupId>org.springframework</groupId> 31 <artifactId>spring-test</artifactId> 32 <version>${spring.version4.1}</version> 33 <scope>test</scope> 34 </dependency> 35 <!-- Spring 核心包 --> 36 <dependency> 37 <groupId>org.springframework</groupId> 38 <artifactId>spring-core</artifactId> 39 <version>${spring.version}</version> 40 </dependency> 41 <dependency> 42 <groupId>org.springframework</groupId> 43 <artifactId>spring-beans</artifactId> 44 <version>${spring.version}</version> 45 </dependency> 46 <dependency> 47 <groupId>org.springframework</groupId> 48 <artifactId>spring-context</artifactId> 49 <version>${spring.version}</version> 50 </dependency> 51 <dependency> 52 <groupId>org.springframework</groupId> 53 <artifactId>spring-context-support</artifactId> 54 <version>${spring.version}</version> 55 </dependency> 56 <dependency> 57 <groupId>org.springframework</groupId> 58 <artifactId>spring-expression</artifactId> 59 <version>${spring.version}</version> 60 </dependency> 61 <dependency> 62 <groupId>org.springframework</groupId> 63 <artifactId>spring-aop</artifactId> 64 <version>${spring.version}</version> 65 </dependency> 66 <dependency> 67 <groupId>org.springframework</groupId> 68 <artifactId>spring-jdbc</artifactId> 69 <version>${spring.version}</version> 70 </dependency> 71 <dependency> 72 <groupId>org.springframework</groupId> 73 <artifactId>spring-orm</artifactId> 74 <version>${spring.version}</version> 75 </dependency> 76 <dependency> 77 <groupId>org.springframework</groupId> 78 <artifactId>spring-tx</artifactId> 79 <version>${spring.version}</version> 80 </dependency> 81 82 <!-- c3p0数据源 --> 83 <dependency> 84 <groupId>com.mchange</groupId> 85 <artifactId>c3p0</artifactId> 86 <version>${c3p0.version}</version> 87 </dependency> 88 <!-- dbcp数据源 --> 89 <dependency> 90 <groupId>org.apache.commons</groupId> 91 <artifactId>commons-dbcp2</artifactId> 92 <version>${dbcp.version}</version> 93 </dependency> 94 95 <!-- mysql 驱动 --> 96 <dependency> 97 <groupId>mysql</groupId> 98 <artifactId>mysql-connector-java</artifactId> 99 <version>${mysql.version}</version>100 </dependency>101 102 <!-- hibernate -->103 <dependency>104 <groupId>org.hibernate</groupId>105 <artifactId>hibernate-core</artifactId>106 <version>${hibernate.version}</version>107 </dependency>108 109 <!-- hibernate3.6.10依赖 -->110 <dependency>111 <groupId>org.javassist</groupId>112 <artifactId>javassist</artifactId>113 <version>${javassist.version}</version>114 </dependency>115 116 </dependencies>