本教程对应视频课程:http://edu.51cto.com/course/14731.html

1、SpringJDBC

1.1、Spring在jdbc中的作用

1.2、SpringJDBC实践

1、添加jar包支持类

spring-jdbc-4.3.14.RELEASE.jar、spring-tx-4.3.14.RELEASE.jar

package cn.org.kingdom.dao.impl;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Repository;

import cn.org.kingdom.dao.DeptDao;
import cn.org.kingdom.vo.Dept;
@Repository
public class DeptDaoImpl implements DeptDao {
    @Autowired
    private JdbcTemplate jt  ; 
    public JdbcTemplate getJt() {
        return jt;
    }
    public void setJt(JdbcTemplate jt) {
        this.jt = jt;
    }
    @Override
    public int addUser(Dept vo) throws Exception {
        return jt.update("insert into dept(deptno,dname,loc) values(?,?,?)", vo.getDeptno(),vo.getDname(),vo.getLoc());
    }
}

2、xml配置



   
   
   
   
        
        
        
        
     
   
        
   

1.3、事务处理

1.3.1、spring对事务的支持

Spring对事务有很好的支持.提供了事务管理器. PlatformTransactionManager:平台事务管理器(顶层)

配置事务管理交给Spring来做

 
    
     
    
        
            
             
    
     
    
        
        
    

1.3.2、spring事务的属性说明

1、name:匹配到的方法模式(支持统配符);

2、read-only:查询的时候,设置为true,其他设置为false (也可以默认不设置)

3、isolation:代表数据库事务隔离级别(默认不用配置此项)DEFAULT:让spring使用数据库默认的事务隔离级别;其他:spring模拟;

4、no-rollback-for: 如果遇到的异常是匹配的异常类型,就不回滚事务;(记录日志等)

5、rollback-for:如果遇到的异常是指定匹配的异常类型,才回滚事务; 注意:Spring中默认只能回滚RuntimeException及其子类异常类型.(Exception.Throwabale就不能回滚) 、要求我们:在Service层中所有的异常,使用RuntimeException类型、若原始异常不是RuntimeException,重新包装成RuntimeException.

6、propagation:事务的传播方式(当一个方法已经在一个开启的事务当中了,应该怎么处理自身的事务)

​ ①REQUIRED(默认的传播属性):如果当前方法运行在一个没有事务环境的情况下,则开启一个新的事务,如果当前方法运行在一个已经开启了的事务里面,把自己加入到开启的那个事务中 (一般默认选择此项)

​ ②REQUIRES_NEW:不管当前方法是否运行在一个事务空间之内,都要开启自己的事务保存数据建议使用这个

.(了解)

通用的事务管理器


        
            
            
            
            
            
            
            
            //此配置必须必须放在最后
           
        

1.3.3、事务的注解配置

@Service("accountService")
@Transactional:该类中所有方法都使用默认的属性增强 
public class AccountServiceImpl implements IAccountService {
    @Autowired
    @Qualifier("accountDAO")
    private IAccountDAO dao;
    @Transactional(propagation=Propagation.REQUIRES_NEW) 
    public void save(){}
    @Transactional(readOnly=true) 
    public void get(){}
    public void trans(Long outId, Long inId, Integer money) {
        System.out.println("11");
        dao.transIn(inId, money);
        System.out.println(1/0);//模拟停电
        dao.transOut(outId, money);
    }
}
@Repository("accountDAO")
public class AccountDAOImpl implements IAccountDAO {
    private JdbcTemplate jdbcTemplate;
    @Resource(name="dataSource")
    public void setDataSource(DataSource ds){
        jdbcTemplate = new JdbcTemplate(ds);
    }
}