• @Transactional初探


    @Transactional(rollbackFor = Exception.class)

    ①如果使用@Transactional(rollbackFor = Exception.class),那么这个类里面的方法抛出异常,就会回滚,数据库数据也会回滚

    ②如果不配置rollbackFor,事务只会在遇到运行时异常的时候才会回滚,配置该字段,可以让事务在遇到非运行时异常也回滚

    try catch捕获异常时使用@Transactional必须手动回滚

    不然事物不起作用。

    异常时需要手动回滚事物,不然第一条sql执行成功第二条执行失败
     @Transactional
        public void csTransactional() {
            try {
    
                UaD uaDeputyAccount=new UaD();
                uaDeputyAccount.setDeputyAccountId(789789798l);
                uaDeputyAccount.setDeputyAccountNumber("123456789");
                uaDeputyAccount.setStaffCode("123456789");
                uaD.insertSelective(uaDeputyAccount);
    
                int a=1/0;
    
                UaO uaOrganization=new UaO();
                uaOrganization.setOrgCode("123456789");
                uaO.insertSelective(uaOrganization);
    
    
            }catch (Exception e){
                //手动回滚
                TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
                System.out.println(e.getMessage());
            }
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24

    @Transactional(readOnly = true)

    /**
         * 不加@Transactional(readOnly = true)
         * 第一个输出25
         * 修改数据库为26  在查输出26
         *
         * 加@Transactional(readOnly = true)
         * 第一个输出26
         * 修改数据库为27  在查输出26
         * readOnly = true 表示只能用作只读,如果操作里有增删改则会报错(org.springframework.dao.TransientDataAccessResourceException: )
         */
        @Transactional(readOnly = true)
        public void csTransactionalReadonly(){
            UaD uaDExample=new UaDeputyAccountExample();
            UaDeputyAccountExample.Criteria criteria = uaDeputyAccountExample.createCriteria();
            criteria.andDeputyAccountNumberEqualTo("zhusi");
            List<UaDe> uaDe = uaDeputyAccountMapper.selectByExample(uaDExample);
            System.out.println(uaDeputyAccountList.get(0).getRegionId());
    
    
            UaD uaDe2=new UaD();
            UaD.Criteria criteria2 = uaD.createCriteria();
            criteria2.andDeputyAccountNumberEqualTo("zhusi");
            List<UaD> uaDe = uaDMapper.selectByExample(uaDe2);
            System.out.println(uaDe.get(0).getRegionId());
    
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26

    removeAll

    List<对象> lists=new ArrayList();

    List<对象> lists2=new ArrayList();

    lists.removeAll(lists2);

    只要lists2的对象和lists的对象有一个属性不同removeAll就删除不了

  • 相关阅读:
    【面试突击算法第二天】剑指offer + Leetcode Hot100
    LeetCode刷题---移除元素
    Linux网络编程4-poll模型
    互联网是如何运作的?以前端角度出发(b站objtube的卢克儿听课笔记)
    Linux信号
    FFmpeg——使用Canvas录制视频尚存问题的解决方案
    【JAVA】excel读取常见问题(涉及格式:xls、xlsx)
    Spark 之ExecutorLostFailure in Apache Spark
    5.7-5.8贪心算法应用实例
    Arduino程序设计(十三)触摸按键实验(TTP223)
  • 原文地址:https://blog.csdn.net/qq_48357019/article/details/125616631