Spring--JdbcTemplate

1.JdbcTemplate简介

为了使 JDBC 更加易于使用, Spring 在 JDBC API 上定义了一个抽象层, 以此建立一个 JDBC 存取框架.
作为 Spring JDBC 框架的核心, JDBC 模板的设计目的是为不同类型的 JDBC 操作提供模板方法. 
每个模板方法都能控制整个过程, 并允许覆盖过程中的特定任务. 通过这种方式, 可以在尽可能保留灵活性的情况下, 将数据库存取的工作量降到最低.

2.JdbcTemplate类的常用操作

  1. update();该方法为重载方法,用来执行单个非查询语句;
  2. query();该方法也是重载方法,根据参数的不同,执行不同的查询语句;
  3. batchUpdate();批量更新(非查询语句sql)
  4. queryForObject();执行单个查询

3.使用JdbcTemplate的步骤

  • 由Spring创建数据源(DataSource)即数据库连接池;
    
    <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
        <property name="jdbcUrl" value="jdbc:mysql://localhost:3306/具体数据库">property>
        <property name="user" value="用户名">property>
        <property name="password" value="密码">property>
        <property name="driverClass" value="com.mysql.jdbc.Driver">property>
    bean>
  • 由Spring创建JdbcTemplate;
    
    <bean id="jdbc" class="org.springframework.jdbc.core.JdbcTemplate">
        <property name="dataSource" ref="dataSource">property>
    bean>
  • 自定义DAO,使用@Autowired注解自动注入JdbcTemplate
    @Autowired
    JdbcTemplate jdbc;

4.Spring的事务

  1. 编程式事务:需要手动编写事务相关的代码(复杂)
  2. 声明式事务:使用@Transactional注解控制事务(简单)

5.创建声明式事务的步骤

1: 创建事务管理器

    
    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource">property>
    bean>

2: 定义@Transactional注解驱动(需要加入Spring的tx命名空间)

    
    <tx:annotation-driven/>

3: 给service方法加入注解,控制事务

    @Transactional
    public void buy(int isbn,int id,Integer num) throws Exception{

        //获取图书价格
        int price=bookDao.getPriceByIsbn(isbn);
        //修改库存
        bookDao.updateBookStock(num,isbn);
        //修改余额
        aDao.updateAccountBalance(price*num, id);

        //先执行操作,再进行判断可以防止幻读
        int stock=bookDao.getStockByIsbn(isbn);
        if(stock<0){
            throw new Exception("----------库存不足-----------");
        }
        int balance=aDao.getAccount(id);
        if(balance<0){
            throw new Exception("----------余额不足-----------");
        }

    }

你可能感兴趣的:(javaEE,ssh)