zoukankan      html  css  js  c++  java
  • day23(事务管理)

    事务管理

        事务管理两种方式: 向下传递,ThreadLocal

    向下传递的方式(依赖)

        缺点:不利于测试

    Service层
    获取连接conn(Connection)
        转账(conn)
        收账(conn)
    提交事务
    catch(){
    事务回滚
    }
    
    dao层(通过service层传递过来的Connection对象来保证是同一个连接 )
             
    QueryRunner qr=new QueryRunner();
    qr.update(conn,sql,Parameter....);
    

      只要使用同一个连接(Connection对象)就会在一个事务,dao层的类中的方法只能访问一次数据库,如果多次访问数据库,就得把这个业务放在service层进行操作了,使用业务成进行多次调用到层的方法,事务管理主要是使用的Connection对象来管理事务的。

    使用线程来实现事务的管理

      使用ThreadLocal来管理当前线程

    使用jdbcUtils来进行事务的管理

        这样dao层获取连接只需要从JDBCUtils中获取连接即可,在业务层开启事务、提交事务、回滚事务。

    package com.baidu.utils;
    
    import java.sql.Connection;
    import java.sql.SQLException;
    
    import javax.sql.DataSource;
    
    import com.mchange.v2.c3p0.ComboPooledDataSource;
    
    public class JDBCUtils2 {
    	//从c3p0里面来获取数据源
    	private static final ComboPooledDataSource dataSource = new ComboPooledDataSource();
    	//这是当前线程对象
    	private static final ThreadLocal<Connection> tl = new ThreadLocal<Connection>();
    	//获取连接
    	public static Connection getConnection() throws SQLException {
    		Connection conn = null;
    		try {
    			conn = tl.get();
    			if(conn == null){
    				//从连接池中获取连接
    				conn = dataSource.getConnection();
    				//把获取的连接对象添加到当前线程中去
    				tl.set(conn);
    			}
    		} catch (SQLException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    		return conn;	
    	}
    	
    	//开启事务
    	public static void beginTransfer() throws SQLException{
    		Connection conn = tl.get();
    		conn.setAutoCommit(false);
    	}
           //提交事务
    	public static void commitTransfer() throws SQLException{
    		Connection conn = tl.get();
    		conn.commit();
    	}
            //回滚事务
    	public static void rollbackTransfer() throws SQLException{
    		Connection conn = tl.get();
    		conn.rollback();
    	}
            //获取数据源
    	public static DataSource getDataSource() {
    		return dataSource;
            }    
    }
    

      

  • 相关阅读:
    [刘阳Java]_什么是MyBatis_第1讲
    [刘阳Java]_斗胆介绍一下Eclipse快捷键大全[超详细]_第6讲
    [刘阳Java]_避开环境配置快速的使用Java的开发工具_第5讲
    [刘阳Java]_JVM工作流程_第4讲
    [刘阳Java]_Java程序员的成长路线_第3讲
    [刘阳Java]_Java环境搭建_第2讲
    使用node操作mongodb
    mongodb学习
    node多文件处理方法
    yarn工具的使用
  • 原文地址:https://www.cnblogs.com/fjkgrbk/p/transfer_Manager.html
Copyright © 2011-2022 走看看