spring,hibernate整合实现事务管理(MethodInterceptor)

org.aopalliance.intercept.MethodInterceptor



package com.yourcompany.util;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;


public class DBUtil{
	private static SessionFactory factory=null;
	static
	{
		Configuration con=new Configuration();
		con.configure("hibernate.cfg.xml");
		factory=con.buildSessionFactory();
	}
	public static Session createSession()
	{
		return factory.getCurrentSession();
	}
}
 
package com.yourcompany.action;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.yourcompany.model.User;
import com.yourcompany.service.UserService;

public class LoginAction{
	public void execute()
	{
		ApplicationContext app=new ClassPathXmlApplicationContext("applicationContext.xml");
		UserService userService = (UserService)app.getBean("userService");
		userService.save(new User("sss","sss"));
	}
}
 
package com.yourcompany.advice;

import org.hibernate.Session;
import org.aopalliance.intercept.MethodInterceptor;
import org.aopalliance.intercept.MethodInvocation;

import com.yourcompany.util.DBUtil;

public class TransactionAdvice implements MethodInterceptor{

	
	public Object invoke(MethodInvocation arg0) throws Throwable{
		beginTransaction(); // 开始事务
		Object result = arg0.proceed();
		commitTransaction();
		return result;
	}

	private void beginTransaction() {
		Session session = DBUtil.createSession();
		session.beginTransaction();
		System.out.println("begin transaction.....");
	}
	private void commitTransaction() {
		Session session = DBUtil.createSession();
		session.getTransaction().commit();
		System.out.println("commit transaction.....");
	}
}
package com.yourcompany.dao;

import com.yourcompany.util.DBUtil;
import com.yourcompany.model.User;

public class UserDao{

	public void save(User user){
		DBUtil.createSession().save(user);
	}

	public void delete(User user){
		
	}
	
}
package com.yourcompany.model;

public class User  implements java.io.Serializable {


    // Fields    

     private Integer id;
     private String username;
     private String password;

	/** default constructor */
    public User() {
    }
    
    
	/** minimal constructor */
    public User(String username, String password) {
        this.username = username;
        this.password = password;
    }

    public Integer getId() {
        return this.id;
    }
    
    public void setId(Integer id) {
        this.id = id;
    }

    public String getUsername() {
        return this.username;
    }
    
    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return this.password;
    }
    
    public void setPassword(String password) {
        this.password = password;
    }



}
 
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- 
    Mapping file autogenerated by MyEclipse Persistence Tools
-->
<hibernate-mapping>
    <class name="com.yourcompany.model.User" table="user" catalog="mybatis">
        <id name="id" type="java.lang.Integer">
            <column name="id" />
            <generator class="native"></generator>
        </id>
        <property name="username" type="java.lang.String">
            <column name="username" length="30" not-null="true" />
        </property>
        <property name="password" type="java.lang.String">
            <column name="password" length="30" not-null="true" />
        </property>
    </class>
</hibernate-mapping>
package com.yourcompany.service;

import com.yourcompany.dao.UserDao;
import com.yourcompany.model.User;

public class UserService{
	private UserDao dao;

	public UserService(){
		this.dao=new UserDao();
	}

	public UserDao getDao(){
		return dao;
	}

	public void setDao(UserDao dao){
		this.dao=dao;
	}
	
	public void save(User user)
	{
		dao.save(user);
	}
	public void delete(User user)
	{
		dao.delete(user);
	}
}
package junit.test;

import org.junit.Test;

import com.yourcompany.action.LoginAction;

public class TestSave{
	@Test
	public void saveTest()
	{
		LoginAction action=new LoginAction();
		action.execute();
	}
}

猜你喜欢

转载自88548886.iteye.com/blog/1528486