五.Spring-jdbc的实现

第一步:导jar包 pom.xml

<!--引入spring-beans节点-->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-beans</artifactId>
    <version>4.2.3.RELEASE</version>
</dependency>
<!--引入Spring-context节点-->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context</artifactId>
    <version>4.2.2.RELEASE</version>
</dependency>

<!--引入Spring-JDBC节点-->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-jdbc</artifactId>
    <version>4.2.0.RELEASE</version>
</dependency>

<dependency>
    <groupId>org.wisdom-framework</groupId>
    <artifactId>MySQL-connector-Java</artifactId>
    <version>5.1.34_1</version>
</dependency>

第二步:实体层

public class User {
    private Integer bookid;
    private String bookname;
    private Integer bookprice;

public Integer getBookid() {
        return bookid;
    }

public void setBookid(Integer bookid) {
        this.bookid= bookid;
    }

public String getBookname() {
        return bookname;
    }

public void setBookname(String bookname) {
        this.bookname= bookname;
    }

public Integer getBookprice() {
        return bookprice;
    }

public void setBookprice(Integer bookprice) {
        this.bookprice= bookprice;
    }
}

第三步:搭建分层

A:dao层

接口:
//01.查询素有图书
public List<User> findAll();

接口实现:需要实现接口,继承JdbcDaoSupport 植入jdbcTemplate:简化jdbc操作

public class userdaoimpextends JdbcDaoSupport implements userdao {
    // 需要植入   jdbcTemplate
    
publicList<User> findAll() {
        String sql="select * from book";
        //接口的一个实现类 匿名内部类
        
List<User> list=this.getJdbcTemplate().query(sql,new RowMapper<User>() {
            public User mapRow(ResultSet rs,int i) throwsSQLException {
                User book=new User();
                book.setBookid(rs.getInt("bookid"));
                book.setBookname(rs.getString("bookname"));
                book.setBookprice(rs.getInt("bookprice"));
                return book;
            }
        });
        return list;
    }
    }

第四步:applicationContext.xml

<?xml version="1.0"encoding="UTF-8"?>
<beansxmlns="http://www.springframework.org/schema/beans"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xmlns:context="http://www.springframework.org/schema/context"
       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.识别jdbc.properties文件-->
    
<context:property-placeholderlocation="jdbc.properties"></context:property-placeholder>

<!--01.建立数据源   Spring 内置的一个数据源 DriverManager-->
    
<beanid="dataSource"class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <propertyname="driverClassName"value="${jdbc.driverClassName}"></property>
        <propertyname="url"value="${jdbc.url}"></property>
        <propertyname="username"value="${jdbc.user}"></property>
        <propertyname="password"value="${jdbc.password}"></property>
    </bean>
    <!--02.jdbcTemplate 配置-->
    
<beanid="jdbcTemplate"class="org.springframework.jdbc.core.JdbcTemplate">
        <propertyname="dataSource"ref="dataSource"></property>
    </bean>

<!--03.dao配置-->
    
<beanid="bookDao"class="cn.dao.imp.userdaoimp">
        <propertyname="jdbcTemplate"ref="jdbcTemplate"></property>
    </bean>

<!--04.service   bookService-->
    
<beanid="bookService"class="cn.service.impl.BookDAOImpl">
        <propertyname="dao"ref="bookDao"></property>
    </bean>

</beans>
第五步:service层

实现层:

public class BookDAOImplimplements IBookService {

//植入dao
    
privateuserdao dao;

public List<User> findAll() {
        return dao.findAll();
    }

public userdao getDao() {
        return dao;
    }

public void setDao(userdao dao) {
        this.dao= dao;
    }
}

接口层:

//01.查询素有图书
public List<User> findAll();

 

第六步:单测类

@Test
// 01.jdbctemplate
public void test02(){
    ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
    IBookService service = (IBookService) ctx.getBean("bookService");
    List<User> list = service.findAll();
    for (User item:list) {
        System.out.println(item.getBookname());
    }
}

事务

七:事务实现(买股票案例)

A:dao层

a:接口层

Account类:

public interface Accountdao {
    //开户方法
    
public boolean add(Account account);
    //修改账户金额 为true
    
public  boolean update(int aid,double blance,boolean isbuy);
}

股票接口:

Account接口实现类:

public interface Stockdao {
    public boolean addstock(stock st);
    public  boolean update(int sid,int count,boolean isUser);
}

b:接口实现层:

public class Accountimp extends JdbcDaoSupport implements Accountdao

{
    public boolean add(Account account) {
        return false;
    }

public boolean update(int aid, double blance, boolean isbuy) {
        boolean flag=false;
        String sql=null;
        if (isbuy){  //购买股票
            
sql="update acount set blance=blance-? where aid=?";
        }else{
            sql="update account set blance=blance+? where aid=?";
        }
        int count = this.getJdbcTemplate().update(sql, blance, aid);
        if (count>0){
            flag=true;
        }
        return flag;
    }
}

股票接口实现类 stock:

public class Stockdaoimp extends JdbcDaoSupport implements Stockdao{

public boolean addstock(stock st) {
        return false;
    }

public boolean update(int sid, int count, boolean isUser) {
        boolean flag=false;
        String sql=null;
        if (isUser){
            sql="update stock set count=count+? where sid=?";
        }else{
            sql="update stock set count=count-? where sid=?";
        }
        int str = this.getJdbcTemplate().update(sql, count, sid);
        if (str>0){
            flag=true;
        }
        return flag;

}

Service层:

接口:

public interface Accountdaoservicedao {
    //开户方法
    
public boolean add(Account account);
    public boolean addstock(stock st);
    public void stock(int aid,double blance,int sid,int count) throws Exception;

}

接口实现:

public class Accountserviceimp implements Accountdaoservicedao {

private Accountdao accountDAO;

private Stockdao stockDAO;
    public void stock(int aid, double blance, int sid, int count) throws Exception {
        //默认是购买股票
        
boolean isBuy=true;
        accountDAO.update(aid,blance,isBuy);

//编译时异常  SPring处理 方式
        //编译时 SPring事务自动提交

//运行时   SPring 自动回滚
        
if(1==1) {
            throw new StockException();
    }
        //02.股票表
        
stockDAO.update(sid,count,isBuy);
    }
    public Accountdao getAccountDAO() {
        return accountDAO;
    }

public void setAccountDAO(Accountdao accountDAO) {
        this.accountDAO = accountDAO;
    }

public Stockdao getStockDAO() {
        return stockDAO;
    }

public void setStockDAO(Stockdao stockDAO) {
        this.stockDAO = stockDAO;
    }

public boolean add(Account account) {
        return false;
    }

public boolean addstock(stock st) {
        return false;
    }

异常类:

public class StockException extends Exception {
    public StockException() {
    }

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

实体类:

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: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.识别jdbc.properties文件-->
    
<context:property-placeholder location="jdbc.properties"></context:property-placeholder>
    <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
        <property name="driverClass" 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>
    <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
        <property name="dataSource" ref="dataSource"></property>
    </bean>
    <!--03.dao配置-->
    
<bean id="Accountdao" class="Spring01tx.cn.dao.imp.Accountimp">
        <property name="jdbcTemplate" ref="jdbcTemplate"></property>
    </bean>
    <bean id="Stockdao" class="Spring01tx.cn.dao.imp.Stockdaoimp">
        <property name="jdbcTemplate" ref="jdbcTemplate"></property>
    </bean>
    <!--04.service   bookService-->
    
<bean id="bookService" class="Spring01tx.cn.service.imp.Accountserviceimp">
    <property name="accountDAO" ref="Accountdao"></property>
        <property name="stockDAO" ref="Stockdao"/>
</bean>

<!--事务管理器-->
    
<bean id="transcationManger" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource"></property>
    </bean>
    <!--配置事务 拦截器业务方法-->
    
<bean id="accountServiceProxy" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
        <property name="target" ref="bookService"></property>
        <property name="transactionManager" ref="transcationManger"></property>
        <!--增强-->
        
<property name="transactionAttributes">
            <props>
                <prop key="buy*">ISOLATION_DEFAULT,PROPAGATION_REQUIRED,-StockException</prop>
            </props>
        </property>
    </bean>
</beans>

单测:

public class test {
    @Test
    // 01.jdbctemplate
    
public void test02() {
        ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext01.xml");
        Accountserviceimp service = (Accountserviceimp) ctx.getBean("accountServiceProxy");
        try {
            //数据不匹配时的情况 一个变,一个不变
            
service.stock(1,1000,1,8);
        } catch (Exception e){
            e.printStackTrace();
        }
    }

springJDBC 事物隔离的更多相关文章

  1. SQL事物隔离级别

    标准SQL定义了4个隔离级别 Read uncommitted 未提交读 Read committed 已提交读 Repeatable read 可重复读 Serializable 可序列化 基本语法 ...

  2. spring事物传播机制 事物隔离级别

    Spring事务类型详解: PROPAGATION_REQUIRED--支持当前事务,如果当前没有事务,就新建一个事务.这是最常见的选择. PROPAGATION_SUPPORTS--支持当前事务,如 ...

  3. 07: mysql锁和事物隔离

    MySQL其他篇 目录: 1.1 MySQL中的事物 1.2 mysql中锁 1.1 MySQL中的事物返回顶部 1.InnoDB事务原理 1. 事务(Transaction)是数据库区别于文件系统的 ...

  4. Spring事物隔离级别及事物传播行为@Transactional实现

    阅读本篇文章前,请先阅读如下文章: 四种事物隔离级别详解 先看下@Transactional可以配制那些参数及以其所代表的意义. isolation 枚举org.springframework.tra ...

  5. MySQL数据库的事物隔离级别

    一. 查看数据库的事物隔离级别 mysql> show variables like '%isolation'; +-----------------------+--------------- ...

  6. MVCC原理 4步 什么是MVCC、事务ACID、事物隔离级别、Innodb存储引擎是如何实现MVCC的

    MVCC是来处理并发的问题,提高并发的访问效率,读不阻塞写.事物A 原子性C 一致性I 隔离性D 持久性高并发的场景下的问题脏读不可重复读幻读事物隔离级别RU读未提交 脏读/不可重复读/幻读 .不适用 ...

  7. Oracle中事物处理--事物隔离级别

    n  事物隔离级别 概念:隔离级别定义了事物与事物之间的隔离程度. ANSI/ISO SQL92标准定义了一些数据库操作的隔离级别(这是国际标准化组织定义的一个标准而已,不同的数据库在实现时有所不同) ...

  8. MySQL是如何实现事物隔离?

    前言 众所周知,MySQL的在RR隔离级别下查询数据,是可以保证数据不受其它事物影响,而在RC隔离级别下只要其它事物commit后,数据都会读到commit之后的数据,那么事物隔离的原理是什么?是通过 ...

  9. Hibernate 事物隔离级别 深入探究

    目录 一.数据库事务的定义 二.数据库事务并发可能带来的问题 三.数据库事务隔离级别 四.使用Hibernate设置数据库隔离级别 五.使用悲观锁解决事务并发问题 六.使用乐观锁解决事务并发问题 Hi ...

随机推荐

  1. Opencv— — mix channels

    // define head function #ifndef PS_ALGORITHM_H_INCLUDED #define PS_ALGORITHM_H_INCLUDED #include < ...

  2. HihoCoder 1504 : 骑士游历 (矩阵乘法)

    描述 在8x8的国际象棋棋盘上给定一只骑士(俗称“马”)棋子的位置(R, C),小Hi想知道从(R, C)开始移动N步一共有多少种不同的走法. 输入 第一行包含三个整数,N,R和C. 对于40%的数据 ...

  3. maven目录结构

    groupId的值是项目的包名 artifactId的值是模块名,建议使用项目名

  4. Microsoft visual studio关闭安全检查

    在用Microsoft visual studio进行代码编写时,使用到列如sprintlf这种比较旧的指令,需要关闭Microsoft visual studio的安全检查: 设置预处理选项:a. ...

  5. ubuntu16.04 + CUDA 9.0 + opencv3.3 安装

    安装前的准备 CUDA 9.0 安装,可以参看Ubuntu16.04 + cuda9.0 + cudnn7.1.4 + tensorflow安装 opencv 3.3.0 下载 ippicv_2017 ...

  6. NHibernate从入门到精通系列——NHibernate环境与结构体系

    内容摘要 NHibernate的开发环境 NHibernate的结构体系 NHibernate的配置 一.NHibernate的开发环境 NHibernate的英文官方网站为:http://nhfor ...

  7. org.apache.catalina.LifecycleException报错解决方法

    严重: A child container failed during startjava.util.concurrent.ExecutionException: org.apache.catalin ...

  8. C - Bear and Five Cards

    Description A little bear Limak plays a game. He has five cards. There is one number written on each ...

  9. android调试之adb

    ADB 其实大部分的PC开发机与Android设备的操作都是通过adb(android debug bridge)技术完成的,这是一个C/S架构的命令行工具,主要由三个部分组成 运行在PC开发机上的命 ...

  10. mptcp文献汇总

    1 https://www.blackhat.com/docs/us-14/materials/us-14-Pearce-Multipath-TCP-Breaking-Todays-Networks- ...