ider 使用MyBatis Srping -AOP 配置 事务的回滚和异常。。。。。

事务

事务:

司机版:没有感觉

王栋:数据库中的概念。提交事务 。。

帅帅:在某一个阶段出现问题,整个事务回滚。撤销所有影响。

王哲言:没有好好学

事务:同生共死,一个整体。

星星:四种隔离级别  提交和回滚

冯如岩:事务有ACID原则

  原子性

  一致性

  隔离性

  持久性

家有儿女:导演:英达

艺术源于生活,远远高于生活

事务源于基础 ,远远高于之前的理解

如何用真实的程序代码去体现事务的优点

  区别

1.购买股票

  账户

  股票

事务:

司机版:没有感觉

王栋:数据库中的概念。提交事务 。。

帅帅:在某一个阶段出现问题,整个事务回滚。撤销所有影响。

王哲言:没有好好学

事务:同生共死,一个整体。

星星:四种隔离级别  提交和回滚

冯如岩:事务有ACID原则

  原子性

  一致性

  隔离性

  持久性

家有儿女:导演:英达

艺术源于生活,远远高于生活

事务源于基础 ,远远高于之前的理解

如何用真实的程序代码去体现事务的优点

  区别

1.购买股票

  账户

  股票

Service 调度底层dao

        2dao

Exception

Throwable

Spring 默认对 运行时异常  事务处理  自动回滚

事务代理工厂Bean

TransactionProxyFactoryBean

Properties

事务:

数据库四种隔离级别

1.读未提交  Read_Uncommitted

2.读已经提交 Read_committed

3.可重复读  Repeatable_read

4.串行化    Serializable

七种传播行为

PROPAGATION_REQUIRED

PROPAGATION_REQUIRED

作业:

1.事务讲解调试通过。形成博客

2.脏读,不可重复读,幻象读  丢失更新(乐观锁,悲观锁)

3.Spring+Mybatis整合预习

DAO

package cn.bdqn.Bookshoop.dao;

/**
 * Created by Administrator on 2017/8/4.
 */
public interface AcoountDao  {
    public boolean Acoountone(int aid ,double  money,boolean isBuy );
}

package cn.bdqn.Bookshoop.dao;

import org.springframework.jdbc.core.support.JdbcDaoSupport;

/**
 * Created by Administrator on 2017/8/4.
 */
public class AcoountDaoImpl extends JdbcDaoSupport implements AcoountDao {
    public boolean Acoountone(int aid, double money, boolean isBuy) {
        boolean fat=false;
        String sql=null;
        if(isBuy){
            sql="update account set balance=balance-? where aid=?";
        }else{
            sql="update account set balance=balance+? where aid=?";
        }


        int update = this.getJdbcTemplate().update(sql, money, aid);
        if (update>0){
            fat=true;
        }
        return fat;
    }
}

package cn.bdqn.Bookshoop.dao;

/**
 * Created by Administrator on 2017/8/4.
 */
public interface Stock {
    public boolean Stocktone(int sid ,int count, boolean isBuy );
}

package cn.bdqn.Bookshoop.dao;

import org.springframework.jdbc.core.support.JdbcDaoSupport;

/**
 * Created by Administrator on 2017/8/4.
 */
public class StockImpl extends JdbcDaoSupport implements Stock {

    public boolean Stocktone(int sid, int count, boolean isBuy) {
        boolean fat=false;
        String sql=null;
        if(isBuy){
            sql="update stock set balance=balance+? where aid=?";
        }else{
            sql="update stock set balance=balance-? where aid=?";
        }


        int update = this.getJdbcTemplate().update(sql, count, sid);
        if (update>0){
            fat=true;
        }
        return fat;

    }
}

DAO层的方法

ENTITY

package cn.bdqn.Bookshoop.entity;

/**
 * Created by Administrator on 2017/8/4.
 */
public class Account {
    public Integer getAid() {
        return aid;
    }

    public void setAid(Integer aid) {
        this.aid = aid;
    }

    public String getAname() {
        return aname;
    }

    public void setAname(String aname) {
        this.aname = aname;
    }

    public double getBalance() {
        return balance;
    }

    public void setBalance(double balance) {
        this.balance = balance;
    }

    private Integer aid;
        private String aname;
        private double balance;
}

package cn.bdqn.Bookshoop.entity;

/**
 * Created by Administrator on 2017/8/4.
 */
public class Stock {
    private Integer sid;  //股票账户编号
    
private Integer count; //持有股数
    
private String sname;//股票名称

    
public Integer getSid() {
        return sid;
    }

    public void setSid(Integer sid) {
        this.sid = sid;
    }

    public Integer getCount() {
        return count;
    }

    public void setCount(Integer count) {
        this.count = count;
    }

    public String getSname() {
        return sname;
    }

    public void setSname(String sname) {
        this.sname = sname;
    }
}

package cn.bdqn.Bookshoop.entity;

/**
 * Created by Administrator on 2017/8/4.
 */
public class StokException extends Exception {
    public StokException() {
    }

    public StokException(String message) {
        super(message);
    }
}

SERVICE里组合代码 把两个DAO层方法放在一个方法

package cn.bdqn.Bookshoop.Service;

import cn.bdqn.Bookshoop.entity.StokException;

/**
 * Created by Administrator on 2017/8/4.
 */
public interface AcoountService {
    public void Acoountone(int aid, double money , int countq,int sid ) throws Exception;
}

package cn.bdqn.Bookshoop.Service;

import cn.bdqn.Bookshoop.entity.StokException;
import cn.bdqn.Bookshoop.dao.AcoountDao;
import cn.bdqn.Bookshoop.dao.Stock;


/**
 * Created by Administrator on 2017/8/4.
 */
public class AcoountServiceImpl implements AcoountService {
    private  AcoountDao adao;
    private Stock sdao;

    public void Acoountone(int aid, double money , int count,int sid  ) throws Exception {
        boolean isBuy=true;



        //z植入AcountDao
        
adao.Acoountone(aid,money,isBuy);
        //异常拦截归滚  下面代码不执行


        
if (1==1) {


            throw new StokException();
        }
        sdao.Stocktone(sid,count,isBuy);

    }


    public Stock getSdao() {
        return sdao;
    }

    public void setSdao(Stock sdao) {
        this.sdao = sdao;
    }

    public AcoountDao getAdao() {

        return adao;
    }

    public void setAdao(AcoountDao adao) {
        this.adao = adao;
    }
}

主要的 resources下面的XML

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:p="http://www.springframework.org/schema/p"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="
        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd
        http://www.springframework.org/schema/context  http://www.springframework.org/schema/context/spring-context.xsd
"
>
<!--00.识别jbdc。propertties文件-->
    
<context:property-placeholder location="jdbc.properties"></context:property-placeholder>

   <!-- 01.建立数据库 ${}Spring n内设的一个数据  DriverManger–>

    <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName" value="${jdbc.driverClassName}"></property>
        <property name="url" value="${jdbc.url}"></property>
        <property name="username" value="${jdbc.user}"></property>
        <property name="password" value="${jdbc.password}"></property>

    </bean>-->

   <!--<!–02.阿里巴巴的–>

    <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
        <property name="driverClassName" value="${jdbc.driverClassName}"></property>
        <property name="url" value="${jdbc.url}"></property>
        <property name="username" value="${jdbc.user}"></property>
        <property name="password" value="${jdbc.password}"></property>

    </bean>-->
  <!--  <!–03.c3p0 com.mchange.v2.c3p0.ComboPooledDataSource–>

    <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
        <property name="dataSourceName" value="${jdbc.driverClassName}"></property>
        <property name="jdbcUrl" value="${jdbc.url}"></property>
        <property name="user" value="${jdbc.user}"></property>
        <property name="password" value="${jdbc.password}"></property>

    </bean>-->
      <!--04.dbcp-->

   
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
       <property name="driverClassName" value="${jdbc.driverClassName}"></property>
       <property name="url" value="${jdbc.url}"></property>
       <property name="username" value="${jdbc.user}"></property>
       <property name="password" value="${jdbc.password}"></property>

   </bean>

    <!--02.jdbcTemplate 配置-->
    
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
        <property name="dataSource" ref="dataSource"></property>
    </bean>

    <!--03.dao配置-->
    
<bean id="adao" class="cn.bdqn.Bookshoop.dao.AcoountDaoImpl">
        <property name="jdbcTemplate" ref="jdbcTemplate"></property>
    </bean>
    <!--03.dao配置-->
    
<bean id="sdao" class="cn.bdqn.Bookshoop.dao.StockImpl">
        <property name="jdbcTemplate" ref="jdbcTemplate"></property>
    </bean>
    <!--04.service   bookService-->
    
<bean id="acoountService" class="cn.bdqn.Bookshoop.Service.AcoountServiceImpl">
        <property name="adao" ref="adao"></property>
        <property name="sdao" ref="sdao"></property>
    </bean>

    <!--事务管理器-->
    
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource"></property>
    </bean>
<!--配置事务。拦截业务方法-->
    
<bean id="acoountServiceProxy" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
        <!--目标-->
        
<property name="target" ref="acoountService"></property>
        <property name="transactionManager" ref="transactionManager"></property>
        <!--增强-->
        
<property name="transactionAttributes">
            <props>
                <prop

//这个别写错 !ISOLATION_DEFAULT,PROPAGATION_REQUIRED,-StokException 它是异常方法名字

key="Acoountone">ISOLATION_DEFAULT,PROPAGATION_REQUIRED,-StokException</prop>
            </props>
        </property>
    </bean>
</beans>

让后在测试类

package cn.bdqn.tset;

import cn.bdqn.Bookshoop.Service.AcoountService;
import cn.bdqn.Bookshoop.Service.AcoountServiceImpl;
import cn.bdqn.spring0730dai.intterceotorNames.some;
import cn.bdqn.spring19jdbctemplate.dao.impl.BookDAOImpl;
import cn.bdqn.spring19jdbctemplate.service.IBookService;
import cn.bdqn.springaop0731.UserName;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

/**
 * Created by Administrator on 2017/7/23.
 */
public class SpringTset0804 {
    @Test
   public  void set(){
        ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContextJdbcBookshoop.xml");
        AcoountService service = (AcoountService) ctx.getBean("acoountServiceProxy");
        try {
            service.Acoountone(2,200,300,1);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

猜你喜欢

转载自blog.csdn.net/qq_36074218/article/details/76691184