spring,hibernate配置事务

1. 新建java project

2. 引入jar

3. src下新建package:com.web.model, com.web.dao, com.web.service, bean.xml

4. model下新建User.java   

package com.web.model;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;

@Entity
public class User {
	@Id
	@GeneratedValue
	private int id;
	
	@Column(length=32)
	private String name;
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
}

 dao下新建interface  IUserDao.java

package com.web.dao;

import com.web.model.User;

public interface IUserDao {
	public void save(User user);
}

 dao下新建接口的实现类 UserDao.java

 注意:

1. @Repository

2. @Resource 植入sessionfactory

package com.web.dao;

import javax.annotation.Resource;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.springframework.stereotype.Repository;
import org.springframework.web.bind.annotation.SessionAttributes;

import com.web.model.User;

@Repository
public class UserDao implements IUserDao {
	
	@Resource
	private SessionFactory sessionFactory;
	public SessionFactory getSessionFactory() {
		return sessionFactory;
	}
	public void setSessionFactory(SessionFactory sessionFactory) {
		this.sessionFactory = sessionFactory;
	}
	public void save(User user) {
		Session session = sessionFactory.getCurrentSession();
		session.save(user);
	}

}

 service下新建接口IUserService.java

package com.web.service;
import com.web.model.User;
public interface IUserService {
	public void save(User user);
}

  service下新建接口实现类UserService.java

package com.web.service;

import javax.annotation.Resource;

import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

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

@Service
@Transactional
public class UserService implements IUserService {
	@Resource
	private UserDao userDao;
	
	public void save(User user) {
		userDao.save(user);
		int i=1/0;
		userDao.save(user);
	}

}

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-2.5.xsd
           http://www.springframework.org/schema/context
           http://www.springframework.org/schema/context/spring-context-2.5.xsd
           http://www.springframework.org/schema/aop
           http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
           http://www.springframework.org/schema/tx 
           http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">
	<context:annotation-config />
	<context:component-scan base-package="com.web" />
	 
	<bean id="dataSource"	class="org.apache.commons.dbcp.BasicDataSource" 	destroy-method="close">		
		<property name="driverClassName" value="com.mysql.jdbc.Driver" />
		<property name="url" value="jdbc:mysql://localhost:3306/spring" />
		<property name="username" value="root" />
		<property name="password" value="root1234" />
	</bean>

	<bean id="sessionFactory"	class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
		<property name="dataSource" ref="dataSource" />
		<property name="annotatedClasses">
			<list>
				<value>com.web.model.User</value>
			</list>
		</property>
		<property name="hibernateProperties">
			<props>
				<prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
				<prop key="hibernate.hbm2ddl.auto">update</prop>
				<prop key="hibernate.show_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"/>
	<!-- 	<aop:aspectj-autoproxy proxy-target-class="true"/>  -->
</beans>

5. 新建source folder:test  ,新建package:com.web.service,用于测试service

  

package com.web.service;

import static org.junit.Assert.*;

import javax.annotation.Resource;

import org.hibernate.SessionFactory;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.web.model.User;

public class UserServiceTest {
	@Resource
	private SessionFactory sessionFactory;
	
	private ApplicationContext ac = new ClassPathXmlApplicationContext("beans.xml");
	
	
	@Test
	public void testSessionFactory() {
		sessionFactory=(SessionFactory)ac.getBean("sessionFactory");
		System.out.println(sessionFactory);
	}

	@Test
	public void testUserService(){
		IUserService iuserService=(IUserService)ac.getBean("userService");
		System.out.println(iuserService);
		iuserService.save(new User());		
	}
}
原文地址:https://www.cnblogs.com/wujixing/p/5757703.html