• 事务-P26,P27


    事务:要么都成功,要么都失败。例子:支付宝交易。

    acid原则。

    11直接移植10的代码

    spring-11-transaction:

    UserMapper(增加两个接口)

    1. package com.Li.mapper;
    2. import com.Li.pojo.User;
    3. import java.util.List;
    4. public interface UserMapper {
    5. public List selectUser();
    6. //添加一个用户
    7. public int addUser(User user);
    8. //删除一个用户
    9. public int deleteUser(int id);
    10. }

    UserMapper.xml:(配置两个接口sql)

    1. "1.0" encoding="UTF-8" ?>
    2. mapper
    3. PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
    4. "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
    5. <mapper namespace="com.Li.mapper.UserMapper">
    6. <select id="selectUser" resultType="user">
    7. select * from mybatis.user
    8. select>
    9. <insert id="addUser" parameterType="user">
    10. insert into mybatis.user (id,name,pwd) values (#{id},#{name},#{pwd})
    11. insert>
    12. <delete id="deleteUser" parameterType="int">
    13. deletes from mybatis.user where id = #{id}
    14. delete>
    15. mapper>

    把UserMapperImpl的接口实现类也重写一下。避免报错。

    UserMapperImpl2:(生成一个User,用来插入)

    1. package com.Li.mapper;
    2. import com.Li.pojo.User;
    3. import org.apache.ibatis.session.SqlSession;
    4. import org.mybatis.spring.support.SqlSessionDaoSupport;
    5. import java.util.List;
    6. //继承SqlSessionDaoSupport,不需要创建sqlSession了,可以直接用
    7. public class UserMapperImpl2 extends SqlSessionDaoSupport implements UserMapper{
    8. @Override
    9. public List selectUser() {
    10. User user = new User(5, "王桑", "1232132");
    11. SqlSession sqlSession = getSqlSession();
    12. UserMapper mapper = sqlSession.getMapper(UserMapper.class);
    13. mapper.addUser(user);
    14. mapper.deleteUser(5);
    15. return mapper.selectUser();
    16. }
    17. @Override
    18. public int addUser(User user) {
    19. return getSqlSession().getMapper(UserMapper.class).addUser(user);
    20. }
    21. @Override
    22. public int deleteUser(int id) {
    23. return getSqlSession().getMapper(UserMapper.class).deleteUser(id);
    24. }
    25. }

    在spring-dao.xml原有的基础上,增加下面的内容。(配置事务)

    1. <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
    2. <property name="dataSource" ref="dataSource"/>
    3. bean>
    4. <tx:advice id="txAdvice" transaction-manager="transactionManager">
    5. <tx:attributes>
    6. <tx:method name="add" propagation="REQUIRED"/>
    7. <tx:method name="delete" propagation="REQUIRED"/>
    8. <tx:method name="update" propagation="REQUIRED"/>
    9. <tx:method name="query" read-only="true"/>
    10. <tx:method name="*" propagation="REQUIRED"/>
    11. tx:attributes>
    12. tx:advice>
    13. <aop:config>
    14. <aop:pointcut id="txPointCut" expression="execution(* com.Li.mapper.*.*(..))"/>
    15. <aop:advisor advice-ref="txAdvice" pointcut-ref="txPointCut"/>
    16. aop:config>

    直接测试:

    报错,同时也没有插入成功。

     

  • 相关阅读:
    第14章 多线程二 (线程调度)
    1688接口大全及其解析
    CTF-Web(2)SQL注入
    【PWN · 栈迁移】[CISCN 2019东南]PWN2
    【asp.net core】自定义模型绑定及其验证
    Java-多线程的使用
    【记录】使用远程SSH配置d2l环境(含装pytorch,同时适用于本地anaconda)
    国内 11 家通过备案的 AI 大模型产品
    尚硅谷大数据数仓项目superset db upgrade三个报错解答
    Java全栈课程之SpringSecurity详解
  • 原文地址:https://blog.csdn.net/m0_54842832/article/details/128124133