微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

【Spring 框架自学】Day07(事务管理)已完结--2022/4/8

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

回头再看

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐