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(); } }