spring+mybatis事务配置

基于注解的spring的声明式事务配置:

<span style="white-space:pre">	</span><!-- 全注解Sping事务管理配置(@Transactional(rollbackFor = Exception.class)) -->
	<bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
		<span style="color:#ff0000;"><property name="dataSource" ref="dataSource" /></span>
	</bean>
	<!--启动spring事物注解驱动-->
	<tx:annotation-driven transaction-manager="txManager"/>

<span style="white-space:pre">	</span><!-- MyBatis配置,只要org.mybatis.spring.SqlSessionFactoryBean引用的数据源与DataSourceTransactionManager引用的数据源一致即可(红色部分)-->
	<bean id="sqlSessionFactoryBean" class="com.kev.team.framework.dao.mybatis.SqlSessionFactoryBean">
		<span style="color:#ff0000;"><property name="dataSource" ref="dataSource" /></span>
		<property name="configLocation" value="classpath:mybatis/mybatis-config.xml" />
		<!-- 需要映射的包路径 -->
		<property name="typeAliasesPackage" value="com.kev.team.**" />
		<property name="mapperLocations">
			<list>
				<value>classpath:com/kev/team/**/*Mapper.xml</value>
			</list>
		</property>
	</bean>
<!-- 添加tx命名空间 -->
xmlns:tx="http://www.springframework.org/schema/tx" xmlns:aop="http://www.springframework.org/schema/aop" http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd

使用实例:

@Transactional
	public void insertStyle(GoodsDetail goodsDetail) {
		Goods goods = goodsDao.selectByNo(goodsDetail.getGoodsNo());
		List<GoodsDetail> detail = goodsDao.getGoodsDetailByGoodsNo(goodsDetail.getGoodsNo());
		int flag = 0, flag1 = 0;
		String goodsStyleIds = goods.getGoodsStyleIds();
		if (goodsStyleIds == null) {
			goods.setGoodsStyleIds(goodsDetail.getGoodsSizeId() + "," + goodsDetail.getGoodsColorId());
		} else {
			goods.setGoodsStyleIds(goodsStyleIds + "," + goodsDetail.getGoodsSizeId() + ","
					+ goodsDetail.getGoodsColorId());
		}
		int styleStock = goodsDetail.getGoodsStock();
		for (int i = 0; i < detail.size(); i++) {
			styleStock += detail.get(i).getGoodsStock();
		}
		if (goods.getGoodsstock() >= styleStock) {
			flag = goodsDao.insertStyle(goodsDetail);
			flag1 = goodsDao.updateByPrimaryKey(goods);
			if ((flag + flag1) != 2) {
				throw new RuntimeException("事务发生回滚,请检查颜色尺码数据是否正确!!");
			}
		} else {
			throw new RuntimeException("库存不足,请调整数量!!");
		}
	}

添加@Transactional注解的方法,相当于在方法开始前添加事务开始代码,在方法结束后添加事务结束代码,

所以该方法必须抛出异常到方法结束处,事务才会回滚。

异常可以在方法调用处try catch,以得到程序需要的适当返回。




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值