Mybatis内部模块之---数据源模块

1.应用的设计模式

因为在创建数据源的时候,对象是一个非常复杂的对象,所以采用了的是工厂模式

2.数据源的创建分类

在Mybatis框架中,涉及到的数据源,常用的是两个,PooledDataSource(数据源连接池),UnpooledDataSource(非连接池数据源)

来源:PooledDataSource 是通过 PooledDataSourceFactory创建的,UnPooledDataSource 是通过UnPooledDataSource Factory创建的;

3.特殊点:

3.1 UnpooledDataSource每次都会创建一个新的连接

Mybatis内部模块之---数据源模块
  private Connection doGetConnection(String username, String password) throws SQLException {
    Properties props = new Properties();
    if (driverProperties != null) {
      props.putAll(driverProperties);
    }
    if (username != null) {
      props.setProperty("user", username);
    }
    if (password != null) {
      props.setProperty("password", password);
    }
    return doGetConnection(props);
  }

  //从这个代码可以看出,unpooledDatasource获取连接的方式和手动获取连接的方式是一样的
  private Connection doGetConnection(Properties properties) throws SQLException {
    initializeDriver();
    Connection connection = DriverManager.getConnection(url, properties);
    //设置事务是否自动提交,事务的隔离级别
    configureConnection(connection);
    return connection;
  }

  private synchronized void initializeDriver() throws SQLException {
    if (!registeredDrivers.containsKey(driver)) {
      Class<?> driverType;
      try {
        if (driverClassLoader != null) {
          driverType = Class.forName(driver, true, driverClassLoader);
        } else {
          driverType = Resources.classForName(driver);
        }
        // DriverManager requires the driver to be loaded via the system ClassLoader.
        // http://www.kfu.com/~nsayer/Java/dyn-jdbc.html
        Driver driverInstance = (Driver)driverType.newInstance();
        DriverManager.registerDriver(new DriverProxy(driverInstance));
        registeredDrivers.put(driver, driverInstance);
      } catch (Exception e) {
        throw new SQLException("Error setting driver on UnpooledDataSource. Cause: " + e);
      }
    }
  }
View Code

3.2 下面我们主要的看一下PooledDataSource ,带有连接池的数据源

在过程中,我们涉及到了两个重要的参数

PooledConnection 使用动态代理封装了真正的数据库连接对象,增强的是关闭方法;

PoolState 管理的是 PooledConnection 对象组件的状态,其中有两个变量  idleConnections 和 activeConnections

上一篇:Timeline 编辑器扩展 API


下一篇:java – “if(rs.next())”是什么意思?