• 事务经典案例


    1.使用事务工厂实现
    1.1创建Dao层接口
    public interface TransationDao {
        //加钱方法
        public void addMoney(Double dou);
    
    
        //减钱方法
        public void subMoney(Double dou);
    }
    1.2创建Dao层接口实现类
    @Repository
    public class TransationDaoImpl implements TransationDao {
    
        @Resource
        private JdbcTemplate jdbcTemplate;
        @Override
        public void addMoney(Double dou) {
    
            String sql="update accounts set balance=balance+? where accountid=1";
    
            /*this.getJdbcTemplate().update(sql, dou);*/
    
            jdbcTemplate.update(sql,dou);
        }
    
        @Override
        public void subMoney(Double dou) {
            String sql="update accounts set balance=balance-? where accountid=6";
            /*this.getJdbcTemplate().update(sql,dou);*/
            jdbcTemplate.update(sql,dou);
        }
    }
    
     
    1.3创建Service接口
    public interface TransationService{
    
        //转账方法
        public void transferMoney(Double dou);
    }
    1.4创建Service接口实现类
    @Service("transationService")
    public class TransationServiceImpl implements TransationService {
        @Resource
        private TransationDao transationDao;
        
        @Override
        public void transferMoney(Double dou) {
            transationDao.subMoney(dou);
            Integer result=5/0;
            transationDao.addMoney(dou);
        }
    
        public TransationDao getTransationDao() {
            return transationDao;
        }
    
        public void setTransationDao(TransationDao transationDao) {
            this.transationDao = transationDao;
        }
    }
    1.5编写applicationContext.xml文件
    <!--扫描注解:包扫描器-->
    <context:component-scan base-package="com.spring"/>
    <!--识别到配置文件-->
    <context:property-placeholder location="classpath:jdbc.properties"/>
    <!--配置数据源-->
    <!--spring内置的数据源:提供连接的,不负责管理,使用连接池-->
    <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName" value="${jdbc.driver}"></property>
        <property name="url" value="${jdbc.url}"></property>
        <property name="username" value="${jdbc.username}"></property>
        <property name="password" value="${jdbc.password}"></property>
    </bean>
    <!--构建jdbcTemplate-->
    <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
        <property name="dataSource" ref="dataSource"></property>
    </bean>
    
    <!--事务,事务管理器-->
    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource"></property>
    </bean>
    
    
    <!--配置Spring事务的代理工厂-->
    <bean id="transactionFactory" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
        <!--事务管理器-->
        <property name="transactionManager" ref="transactionManager"></property>
        <!--目标对象-->
        <property name="target" ref="transationService"></property>
        <!--设置方法-->
        <property name="transactionAttributes">
            <props>
                <!--方法对应的隔离级别和传播行为-->
                <prop key="transferMoney">ISOLATION_READ_COMMITTED</prop>
            </props>
        </property>
    </bean>
    1.6编写测试类
    @Test
    public void transationTest(){
        ApplicationContext context=new ClassPathXmlApplicationContext("applicationContext01.xml");
        TransationService transationService = (TransationService)context.getBean("transactionFactory");
        transationService.transferMoney(Double.valueOf(1000));
        System.out.println("转账成功");
    }
    1. 使用AOP方式实现
    2.1创建Dao层接口
    public interface TransationDao {
        //加钱方法
        public void addMoney(Double dou);
    
    
        //减钱方法
        public void subMoney(Double dou);
    }
    2.2创建Dao层接口实现类
    @Repository
    public class TransationDaoImpl implements TransationDao {
    
        @Resource
        private JdbcTemplate jdbcTemplate;
        @Override
        public void addMoney(Double dou) {
    
            String sql="update accounts set balance=balance+? where accountid=1";
    
            /*this.getJdbcTemplate().update(sql, dou);*/
    
            jdbcTemplate.update(sql,dou);
        }
    
        @Override
        public void subMoney(Double dou) {
            String sql="update accounts set balance=balance-? where accountid=6";
            /*this.getJdbcTemplate().update(sql,dou);*/
            jdbcTemplate.update(sql,dou);
        }
    }
    2.3创建Service接口
    public interface TransationService{
    
        //转账方法
        public void transferMoney(Double dou);
    }
    2.4创建Service接口实现类
    @Service("transationService")
    public class TransationServiceImpl implements TransationService {
        @Resource
        private TransationDao transationDao;
        
        @Override
        public void transferMoney(Double dou) {
            transationDao.subMoney(dou);
            Integer result=5/0;
            transationDao.addMoney(dou);
        }
    
        public TransationDao getTransationDao() {
            return transationDao;
        }
    
        public void setTransationDao(TransationDao transationDao) {
            this.transationDao = transationDao;
        }
    }

    2.5编写applicationContext.xml文件

    <!--扫描注解:包扫描器-->
    <context:component-scan base-package="com.spring"/>
    <!--识别到配置文件-->
    <context:property-placeholder location="classpath:jdbc.properties"/>
    <!--配置数据源-->
    <!--spring内置的数据源:提供连接的,不负责管理,使用连接池-->
    <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName" value="${jdbc.driver}"></property>
        <property name="url" value="${jdbc.url}"></property>
        <property name="username" value="${jdbc.username}"></property>
        <property name="password" value="${jdbc.password}"></property>
    </bean>
    <!--构建jdbcTemplate-->
    <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
        <property name="dataSource" ref="dataSource"></property>
    </bean>
    
    
     </bean>-->
    
    <!--事务,事务管理器-->
    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource"></property>
    </bean>
    
    <!--AOP方式-->
    <tx:advice id="transactionAdvice" transaction-manager="transactionManager">
    <tx:attributes>
    <tx:method name="transferMoney" propagation="REQUIRED" isolation="READ_COMMITTED"></tx:method>
    </tx:attributes>
    </tx:advice>
    
    <aop:config>
        <aop:pointcut id="pointcut" expression="execution(* *..service.impl.*.*(..))"/>
        <aop:advisor advice-ref="transactionAdvice" pointcut-ref="pointcut"></aop:advisor>
    </aop:config>

    2.6编写测试类

    @Test
    public void transationTest(){
        ApplicationContext context=new ClassPathXmlApplicationContext("applicationContext01.xml");
        TransationService transationService = (TransationService)context.getBean("transationService");
        transationService.transferMoney(Double.valueOf(1000));
        System.out.println("转账成功");
    }
    2. 使用注解方式实现
    3.1创建Dao层接口
    public interface TransationDao {
        //加钱方法
        public void addMoney(Double dou);
    
    
        //减钱方法
        public void subMoney(Double dou);
    }
    3.2创建Dao层接口实现类
    @Repository
    public class TransationDaoImpl implements TransationDao {
    
        @Resource
        private JdbcTemplate jdbcTemplate;
        @Override
        public void addMoney(Double dou) {
    
            String sql="update accounts set balance=balance+? where accountid=1";
    
            /*this.getJdbcTemplate().update(sql, dou);*/
    
            jdbcTemplate.update(sql,dou);
        }
    
        @Override
        public void subMoney(Double dou) {
            String sql="update accounts set balance=balance-? where accountid=6";
            /*this.getJdbcTemplate().update(sql,dou);*/
            jdbcTemplate.update(sql,dou);
        }
    }
    3.3创建Service接口
    public interface TransationService{
    
        //转账方法
        public void transferMoney(Double dou);
    }
    3.4创建Service接口实现类
    @Service("transationService")
    public class TransationServiceImpl implements TransationService {
        @Resource
        private TransationDao transationDao;
        @Transactional(isolation = Isolation.REPEATABLE_READ,propagation = Propagation.REQUIRED)
        @Override
        public void transferMoney(Double dou) {
            transationDao.subMoney(dou);
            Integer result=5/0;
            transationDao.addMoney(dou);
        }
    
        public TransationDao getTransationDao() {
            return transationDao;
        }
    
        public void setTransationDao(TransationDao transationDao) {
            this.transationDao = transationDao;
        }
    }

    3.5编写applicationContext.xml文件

    <!--扫描注解:包扫描器-->
        <context:component-scan base-package="com.spring"/>
        <!--识别到配置文件-->
        <context:property-placeholder location="classpath:jdbc.properties"/>
        <!--配置数据源-->
        <!--spring内置的数据源:提供连接的,不负责管理,使用连接池-->
        <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
            <property name="driverClassName" value="${jdbc.driver}"></property>
            <property name="url" value="${jdbc.url}"></property>
            <property name="username" value="${jdbc.username}"></property>
            <property name="password" value="${jdbc.password}"></property>
        </bean>
        <!--构建jdbcTemplate-->
        <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
            <property name="dataSource" ref="dataSource"></property>
        </bean>
    
        <!--事务,事务管理器-->
        <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
            <property name="dataSource" ref="dataSource"></property>
        </bean>
    
    <!--Spring支持注解式配置-->
    <tx:annotation-driven/>

    3.6编写测试类

    @Test
    public void transationTest(){
        ApplicationContext context=new ClassPathXmlApplicationContext("applicationContext01.xml");
        TransationService transationService = (TransationService)context.getBean("transationService");
        transationService.transferMoney(Double.valueOf(1000));
        System.out.println("转账成功");
    }
  • 相关阅读:
    《完结篇》论文笔记
    《QD超市管理系统的设计与实现》论文笔记(十九)
    《基于JSP的超市管理系统设计与实现》论文笔记(十八)
    《B/S模式下ADO.NET数据库访问技术的设计及应用》论文笔记(十七)
    《基于B/S中小型超市进销存管理系统的研究与设计》论文笔记(十六)
    《基于Web的Git可视化设计与实现》论文笔记(十五)
    《小型超市商品管理系统的设计与实现》论文笔记(十四)
    《超市商品管理系统的设计与实现》论文笔记(十三)
    《中小连锁超市管理系统的设计与实现》论文笔记(十二)
    laravels安装horizon和Supervisor
  • 原文地址:https://www.cnblogs.com/szhhhh/p/11791773.html
Copyright © 2020-2023  润新知