Spring整合Hibernate(事务管理)

User.java
package edu.xaut.model;
 
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
 
@Entity
public class User {
private int id;
private String userName;
private String password;
 
@Id
@GeneratedValue
public int getId() {
return id;
}
 
public void setId(int id) {
this.id = id;
}
 
public String getUserName() {
return userName;
}
 
public void setUserName(String userName) {
this.userName = userName;
}
 
public String getPassword() {
return password;
}
 
public void setPassword(String password) {
this.password = password;
}
}
 
Log.java
package edu.xaut.model;
 
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;
 
@Entity
@Table(name="t_log")
public class Log {
private int id;
private String msg;
 
@Id
@GeneratedValue
public int getId() {
return id;
}
 
public void setId(int id) {
this.id = id;
}
 
public String getMsg() {
return msg;
}
 
public void setMsg(String msg) {
this.msg = msg;
}
}
 
UserDAO.java
package edu.xaut.dao;
 
import edu.xaut.model.User;
 
public interface UserDAO {
public void save(User user);
}
 
LogDAO.java
package edu.xaut.dao;
 
import edu.xaut.model.Log;
 
public interface LogDAO {
public void save(Log log);
}
 
UserDAOImpl.java
package edu.xaut.dao.impl;
 
import javax.annotation.Resource;
 
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.springframework.stereotype.Component;
 
import edu.xaut.dao.UserDAO;
import edu.xaut.model.User;
 
@Component("user")
public class UserDAOImpl implements UserDAO {
private SessionFactory sessionFactory;
 
public SessionFactory getSessionFactory() {
return sessionFactory;
}
 
@Resource
public void setSessionFactory(SessionFactory sessionFactory) {
this.sessionFactory = sessionFactory;
}
 
@Override
public void save(User user) {
System.out.println("user saved!");
System.out
.println("session factory class:" + sessionFactory.getClass());
Session session = sessionFactory.openSession();
session.beginTransaction();
session.save(user);
session.getTransaction().commit();
session.close();
}
}
 
LogDAOImpl.java
package edu.xaut.dao.impl;
 
import javax.annotation.Resource;
 
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.springframework.stereotype.Component;
 
import edu.xaut.dao.LogDAO;
import edu.xaut.model.Log;
 
@Component("logDAO")
public class LogDAOImpl implements LogDAO {
private SessionFactory sessionFactory;
 
public SessionFactory getSessionFactory() {
return sessionFactory;
}
 
@Resource
public void setSessionFactory(SessionFactory sessionFactory) {
this.sessionFactory = sessionFactory;
}
 
@Override
public void save(Log log) {
Session session = sessionFactory.getCurrentSession();
session.save(log);
//throw new RuntimeException("error!");
}
}
 
UserService.java
package edu.xaut.service;
 
import javax.annotation.Resource;
 
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
 
import edu.xaut.dao.LogDAO;
import edu.xaut.dao.UserDAO;
import edu.xaut.model.Log;
import edu.xaut.model.User;
 
@Component("userService")
public class UserService {
private UserDAO userDAO;
private LogDAO logDAO;
 
public UserDAO getUserDAO() {
return userDAO;
}
 
@Resource(name = "user")
public void setUserDAO(UserDAO userDAO) {
this.userDAO = userDAO;
}
 
public LogDAO getLogDAO() {
return logDAO;
}
 
@Resource
public void setLogDAO(LogDAO logDAO) {
this.logDAO = logDAO;
}
 
@Transactional
public void add(User user) {
this.userDAO.save(user);
Log log = new Log();
log.setMsg("a user saved!");
logDAO.save(log);
}
}

Annotation的beans.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-3.0.xsd    

    http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd

    http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd

    http://www.springframework.org/schema/tx

    http://www.springframework.org/schema/tx/spring-tx-3.0.xsd">

<context:annotation-config />

<context:component-scan base-package="edu.xaut" />
  <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">

  <property name="locations" value="classpath:jdbc.properties" />

  </bean>
  <bean id="dataSource" destroy-method="close"   class="org.apache.commons.dbcp.BasicDataSource">

  <property name="driverClassName" value="${jdbc.driverClassName}" />  

  <property name="url" value="${jdbc.url}" />         

     <property name="username" value="${jdbc.username}" />  

     <property name="password" value="${jdbc.password}" />

  </bean>
  <bean id="sessionFactory"   class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">

      <property name="dataSource" ref="dataSource" />
      <!--  

       <property name="annotatedClasses">

            <list>  

                      <value>com.bjsxt.model.User</value>  

                      <value>com.bjsxt.model.Log</value>

               </list>

       </property>  

       -->
      <property name="packagesToScan">  

              <list>    

                      <value>edu.xaut.model</value>  

             </list>

      </property>

      <property name="hibernateProperties">  

             <props>    

                    <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>    

                    <prop key="hibernate.show_sql">true</prop>    

                    <prop key="hibernate.format_sql">true</prop>  

             </props>

      </property>     

  </bean>
  <bean id="txManager"   class="org.springframework.orm.hibernate3.HibernateTransactionManager">

      <property name="sessionFactory" ref="sessionFactory" />  

</bean>  

<tx:annotation-driven transaction-manager="txManager"/> </beans>


XML配置的beans.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-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd"> <context:annotation-config />

<context:component-scan base-package="edu.xaut" />
<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">

  <property name="locations" value="classpath:jdbc.properties" />

</bean>
<bean id="dataSource" destroy-method="close"   class="org.apache.commons.dbcp.BasicDataSource">

  <property name="driverClassName" value="${jdbc.driverClassName}" />  

  <property name="url" value="${jdbc.url}" /> <property name="username" value="${jdbc.username}" />  

     <property name="password" value="${jdbc.password}" />

</bean>
<bean id="sessionFactory"   class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">

  <property name="dataSource" ref="dataSource" />
    <!--  

    <property name="annotatedClasses">

       <list>    

        <value>com.bjsxt.model.User</value>  

        <value>com.bjsxt.model.Log</value>

      </list>

     </property>  

   -->
    <property name="packagesToScan">  

    <list>    

      <value>edu.xaut.model</value>  

    </list>

   </property>  

     <property name="hibernateProperties">  

      <props>    

         <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>    

        <prop key="hibernate.show_sql">true</prop>    

        <prop key="hibernate.format_sql">true</prop>     

       </props>

         </property>

</bean>
<bean id="txManager"   class="org.springframework.orm.hibernate3.HibernateTransactionManager">

  <property name="sessionFactory" ref="sessionFactory" />

</bean>
<aop:config>  

  <aop:pointcut id="bussinessService"   expression="execution(public * edu.xaut.service..*.add(..))" />  

  <aop:advisor advice-ref="txAdvice" pointcut-ref="bussinessService" />

</aop:config>
<tx:advice id="txAdvice" transaction-manager="txManager">
    <tx:attributes>  <tx:method name="getUser" read-only="true" />  

  <tx:method name="add*" />  </tx:attributes> </tx:advice> </beans>

jdbc.properties配置文件
jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/spring
jdbc.username=root
jdbc.password=10Floor
原文地址:https://www.cnblogs.com/CoffeeHome/p/3728385.html