spring和hibernate整合,事务管理
一、spring和hibernate整合开发步骤
1 引入jar文件,用户libarary列表如下
//spring_core spring3.2.9core\commons-logging-1.2.jar spring3.2.9core\spring-beans-3.2.9.RELEASE.jar spring3.2.9core\spring-context-3.2.9.RELEASE.jar spring3.2.9core\spring-core-3.2.9.RELEASE.jar spring3.2.9core\spring-expression-3.2.9.RELEASE.jar //hibernate core hibernate3.6core\antlr-2.7.6.jar hibernate3.6core\commons-collections-3.1.jar hibernate3.6core\dom4j-1.6.1.jar hibernate3.6core\hibernate3.jar hibernate3.6core\hibernate-jpa-2.0-api-1.0.1.Final.jar hibernate3.6core\javassist-3.12.0.GA.jar hibernate3.6core\jta-1.1.jar hibernate3.6core\slf4j-api-1.6.1.jar hibernate3.6core\slf4j-nop-1.7.25.jar //DB_connector DB-connector\c3p0-0.9.1.2.jar DB-connector\mysql-connector-java-5.1.40-bin.jar DB-connector\spring-jdbc-3.2.9.RELEASE.jar //AOP springAOP\aopalliance.jar springAOP\aspectjrt.jar springAOP\aspectjweaver.jar springAOP\spring-aop-3.2.9.RELEASE.jar //spring_ORM spring-ORM\spring-orm-3.2.9.RELEASE.jar spring-ORM\spring-tx-3.2.9.RELEASE.jar
2 Entity/Dao/Service类代码如下
//entity/Employee.java public class Employee { private int id; private String ename; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getEname() { return ename; } public void setEname(String ename) { this.ename = ename; } } //dao/EmployeeDao.java public class EmployeeDao { private SessionFactory sessionFactory; public void setSessionFactory(SessionFactory sessionFactory) { this.sessionFactory = sessionFactory; } public void saveEmp(Employee emp){ sessionFactory.getCurrentSession().save(emp); } } //service/EmployeeService.java public class EmployeeService { private EmployeeDao employeeDao; public void setEmployeeDao(EmployeeDao employeeDao) { this.employeeDao = employeeDao; } public void saveEmp(Employee emp){ employeeDao.saveEmp(emp); } }
3 类对象和数据表关系映射配置,Employee.hbm.xml
<?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <hibernate-mapping package="com.huitong.entity"> <class name="Employee" table="employee"> <id name="id" column="id"> <generator class="native"></generator> </id> <property name="ename" column="ename"></property> </class> </hibernate-mapping>
4 Spring和hibernate/事务配置都放在一个配置文件中bean.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:p="http://www.springframework.org/schema/p" 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-4.3.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd"> <!-- 1 配置dataSource --> <bean id="c3p0DataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"> <property name="driverClass" value="com.mysql.jdbc.Driver"></property> <property name="jdbcUrl" value="jdbc:mysql:///day26?useSSL=true"></property> <property name="user" value="root"></property> <property name="password" value="123456"></property> <property name="initialPoolSize" value="2"></property> <property name="maxPoolSize" value="20"></property> <property name="maxStatements" value="10"></property> <property name="acquireIncrement" value="2"></property> </bean> <!-- 2 配置sessionFactory --> <bean id="sessionFac" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> <!-- 2.1 配置数据源 --> <property name="dataSource" ref="c3p0DataSource"></property> <!-- 2.2 数据库其他配置 --> <property name="hibernateProperties"> <props> <prop key="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</prop> <prop key="hibernate.show_sql">true</prop> </props> </property> <!-- 2.3 加载映射文件 --> <property name="mappingLocations"> <list> <value>classpath:com/huitong/entity/*.hbm.xml</value> </list> </property> </bean> <!-- 3 配置dao/service/action类 --> <bean id="employeeDao" class="com.huitong.dao.EmployeeDao"> <property name="sessionFactory" ref="sessionFac"></property> </bean> <bean id="employeeService" class="com.huitong.service.EmployeeService"> <property name="employeeDao" ref="employeeDao"></property> </bean> <!-- 4 事务配置 --> <!-- 4.1 transaction manager class config --> <bean id="txManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"> <property name="sessionFactory" ref="sessionFac"></property> </bean> <!-- 4.2 transaction advice config --> <tx:advice id="txAdvice" transaction-manager="txManager"> <tx:attributes> <tx:method name="get*" read-only="true"/> <tx:method name="query*" read-only="true"/> <tx:method name="*"/> </tx:attributes> </tx:advice> <!-- 4.3 AOP config --> <aop:config> <aop:pointcut expression="execution(* com.huitong.service.*.save*(..))" id="pt"/> <aop:advisor advice-ref="txAdvice" pointcut-ref="pt"/> </aop:config> </beans>
5 至此完成开发,简单测试如下
public void fun1(){ ClassPathXmlApplicationContext ac = new ClassPathXmlApplicationContext("bean.xml"); EmployeeService employeeService = (EmployeeService) ac.getBean("employeeService"); System.out.println(employeeService); // spring ok? Employee employee = new Employee(); employee.setEname("good"); employeeService.saveEmp(employee); //hibernate ok? }
二、事务配置
1) 声明事务管理器类
2)事务增强
3)AOP配置拦截点
学习过程中,难免出错。如果您在阅读过程中遇到不太明白,或者有疑问。欢迎指正...联系邮箱crazyCodeLove@163.com
如果觉得有用,想赞助一下请移步赞助页面:赞助一下