标签:事务管理 事务 nums -- Spring buyGoods new id
Spring的事务注解管理(事务管理)
Spring开启事务,只适合中小型项目的开发,有两大步骤:
- 声明事务管理器:DataSourceTransactionManager
- 连接数据库,指定数据源(事务的提交回滚)
- 开启事务注解驱动:annotation-driven(导入后缀为tx的)
- 传入事务管理器的id
//定义实体类映射数据库
//定义持久层Dao接口,书写方法
<!--用Mybatis映射持久层实现方法-->
//定义业务层Service接口,定义接口实现类
<!--配置Spring容器-->
<!-- 1 .声明database配置文件:property-placeholder-->
<!-- 2 .声明数据源,连接数据库 :DruidDataSource
<!--声明数据库连接的信息:property
<!--数据库最大连接数:property
-->
<!-- 3 .声明SqlSessionFactory:SqlSessionFactoryBean
3.1 传入数据源:dataSource
3.2 mybatis配置文件交给spring容器管理:configLocation
-->
<!-- 4 .将持久层(Dao)交给Spring容器管理,创建Mapper对象:MapperScannerConfigurer
4.1 传入SqlSession,得到getMapper()方法:sqlSessionFactoryBeanName
4.2 指定持久层(Dao)所在的包名,并为每个Mapper创建对象:basePackage
MapperScannerConfigurer属性:会为所有Dao层接口执行getMapper()方法
-->
<!-- 5 .创建Service对象,将Dao层对象赋予给Service层:property
实现功能、层级的分离
-->
<!--声明事务管理器对象:DataSourceTransactionManager-->
<bean id = "tranSactionManager" class = "...DataSourceTransactionManager">
<!--传入数据源:dataSource-->
</bean>
<!--开启事务注解驱动-->
<tx:annotation-driven transaction-manager="传入声明事务管理器对象"></tx:annotation-driven>
//Service接口实现类在public上加入注解
/*
@Transactional(
propagation = Propagation.REQUIRED,
isolation = Isolation.DEFAULT,
readOnly = false,
rollbackFor = {
NullPointerException.class,Exception.class
}
)
*/
//@Transactional
@Override
public void buyGoods(Integer id, Integer nums) {
//购买商品
Sale sale = new Sale();
sale.setGid(id);
sale.setNums(nums);
saleMapper.insertSale(sale);
//对商品进行查询 让后进行更新
Goods goods = goodsMapper.selectGoods(id);
if (goods == null){
throw new NullPointerException(id+"商品不存在");
}else if (goods.getAmount() < nums){
throw new Exception(id+"商品数量不足");
}
Goods buyGoods = new Goods();
buyGoods.setId(id);
buyGoods.setAmount(nums);
goodsMapper.updateGoods(buyGoods);
}
AspectJ的事务注解管理(事务管理)
/*
省略Spring容器配置之前的所有配置,同上,无任何改变
*/
<!--配置Spring容器-->
<!--声明事务管理器对象:DataSourceTransactionManager-->
<bean id = "transactionmanager" class = "...DataSourceTransactionManager"></bean>
<!--开启事务注解驱动-->
<tx:advice id = "myAdvice" transaction-manager="传入声明事务管理器对象">
<!--配置事务的属性-->
<tx:attributes>
<!--给具体方法配置事务,且method可以拥有多个
name:完整的方法名称,也可以用通配符*代替
propagation:传播行为
isolation:隔离级别
rollback-for:你指定的异常类名(全限定类名),遇到异常时回滚
-->
<tx:method name = "方法名" propagation="REQUIRED" isolation="DEFAULT"
rollback-for="java.lang.NullPointerException,com.springexer.Except.Exception"> </tx:method>
</tx:attributes>
</tx:advice>
<!--配置aop((Aspect注解方法)-->
<aop:config>
<!--找到文件所在地
com.xx.service
com.xxx.service
com.service
-->
<aop:pointcut id="myPt" expression="execution(* *..Service.*.*(..))"/>
<!--配置增强器:关联advice和pointcut
advice-ref:绑定事务注解驱动
pointcut-ref:切入点表达式的id
-->
<aop:advisor advice-ref="myAdvice" pointcut-ref="myPt"></aop:advisor>
</aop:config>
Spring集成Mybatis与Web
回头再看
标签:事务管理,事务,nums,--,Spring,buyGoods,new,id 来源: https://www.cnblogs.com/coldheartsgoinbroke/p/16116968.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。