关闭

spring+mybatis事务配置

标签: mybatisspring事务
54人阅读 评论(0) 收藏 举报

基于注解的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

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:124次
    • 积分:19
    • 等级:
    • 排名:千里之外
    • 原创:2篇
    • 转载:0篇
    • 译文:0篇
    • 评论:0条
    文章存档