zoukankan      html  css  js  c++  java
  • 事务经典案例

    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("转账成功");
    }
  • 相关阅读:
    pat甲级 1155 Heap Paths (30 分)
    pat甲级 1152 Google Recruitment (20 分)
    蓝桥杯 基础练习 特殊回文数
    蓝桥杯 基础练习 十进制转十六进制
    蓝桥杯 基础练习 十六进制转十进制
    蓝桥杯 基础练习 十六进制转八进制
    51nod 1347 旋转字符串
    蓝桥杯 入门训练 圆的面积
    蓝桥杯 入门训练 Fibonacci数列
    链表相关
  • 原文地址:https://www.cnblogs.com/szhhhh/p/11791773.html
Copyright © 2011-2022 走看看