Spring事务注意事项-代码案例

Controller控制层代码

package springTransaction.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.transaction.annotation.Transactional;

import springTransaction.service.UserService;

@Controller
@Transactional //指定这个类可以受Spring事务管理了
public class UserController {
	@Autowired //类型
	private UserService userService;
	
	public void test() {
		String saveSql = "insert into user_info values(?,?,?,?,?)";
		String deleteSql = "delete from user_info";
		Object[] param = {"3","王五","789","m",30};
		
		//不能加try catch,加了之后异常被try{}捕捉到,那么事务管理器就无法再捕捉异常,所以就无法做出反应,事务不回滚
		//删除表中所有的数据
		userService.delete(deleteSql, null);
		//插入两条主键重复的数据
		userService.save(saveSql, param);
		userService.save(saveSql, param);
		
	}
}

在controller层中,添加了@Transactional //指定这个类可以受Spring事务管理了。如果违反事务的四大特性,将会发生回滚事件,保证事务的原子性。

dao层的代码实例

package springTransaction.dao;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional;

@Repository("userDao")
public class UserDao {
   @Autowired //默认按照类型进行自动装配
   private JdbcTemplate jdbcTemplate;

//	@Override
   public int save(String sql, Object[] param) {
   	return jdbcTemplate.update(sql, param);
   }

//	@Override
   public int delete(String sql, Object[] param) {
   	return jdbcTemplate.update(sql, param);
   }
}

@Repository(“userDao”)此注解用在和数据库的处理上。

service层的代码示例

package springTransaction.service;

import javax.annotation.Resource;

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

import springTransaction.dao.UserDao;

@Service(value="userService")//受spring Ioc容器管理
public class UserService {
	@Resource //名称
	private UserDao userDao;
	
	public int save(String sql, Object[] param) {
		return userDao.save(sql, param);
	}
	
	public int delete(String sql, Object[] param) {
		return userDao.delete(sql, param);
	}
}

最主要的是XML文件中的配置
下面的这个扫描哪个包下面的注解。<context:component-scan base-package>

<!--  注解支持  -->
	<context:component-scan base-package="springTransaction"></context:component-scan>

为了不把Spring中的数据源不要写死。

<!-- 引入属性文件 -->
       <context:property-placeholder location="springTransaction/dbInfo.properties"/>
       ~~~~

~~~xml
<!-- 数据源配置信息  c3p0 需要mysql-connector-java 5.1.8和c3p0 0.9.1.2这两个jar-->
	<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
	    
	    <property name="driverClass" value="${driverClass}"/>
	    <property name="jdbcUrl" value="${jdbcUrl}"/>
	    <property name="user"  value="${user}"/>
	    <property name="password"  value="${password}"/>
	    
	    <!-- <property name="driverClass" value="com.mysql.jdbc.Driver"/>
	    <property name="jdbcUrl" value="jdbc:mysql://localhost:3306/test"/>
	    <property name="user"  value="root"/>
	    <property name="password"  value="root"/> -->
	</bean>

为数据源添加事务管理

<!-- 为数据源添加事务管理器 -->
	<bean id="dataSourceTransactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
		<property name="dataSource" ref="dataSource"></property>
	</bean>

添加事务注解支持

	
	<!-- 加载事务注解支持 -->
	<tx:annotation-driven transaction-manager="dataSourceTransactionManager"/>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值