Mybatis源码研究5:数据源的实现

一、数据源概述

 数据源相关核心类位于datasource包中,本包主要引用了Mybatis的reflection的ExceptionUtil类和loggin包的Log接口和LogFactory类。
 
 Mybatis的session包的Configuration类,builder.xml包的XMLConfigBuilder类引用了本包中的类和接口。
 
 二、核心接口

 DataSourceFactory接口定义了2个方法:
 
 //设置属性
 void setProperties(Properties props);

 //获取数据源
 DataSource getDataSource();

 
 javax.sql.DataSource接口定义了2个方法:
 
 //获取连接
 Connection getConnection() throws SQLException;
  
 //根据用户名和密码等参数获取连接
 Connection getConnection(String username, String password)throws SQLException;
 
三、核心接口的3种实现

1. JNDI实现(位于datasource.jndi子包中)
   JndiDataSourceFactory实现了DataSourceFactory接口。
  
   提供DataSource实现类的关键代码:
  
   InitialContext initCtx = new InitialContext();
  
   Context ctx = (Context) initCtx.lookup(properties.getProperty(INITIAL_CONTEXT));
      
  DataSource dataSource = (DataSource) ctx.lookup(properties.getProperty(DATA_SOURCE));
      

2. 连接池实现(位于datasource.pooled子包中)
   PooledDataSourceFactory继承UnpooledDataSourceFactory,从而实现了DataSourceFactory接口。
  
   关键在于构造方法:
   public PooledDataSourceFactory() {
  this.dataSource = new PooledDataSource();
 }
 
 构造方法中,dataSource使用的是 PooledDataSource。
 
  PooledDataSource实现了DataSource接口,维护了若干个 数据库连接。
  
3. 非连接池实现(位于datasource.unpooled子包中)
  UnpooledDataSourceFactory实现了DataSourceFactory接口。
 
  UnpooledDataSource实现了DataSource接口,提供了获取数据库连接Connection的2个方法。
 
  内部维护了 获取一个数据库连接的若干属性,包括但不限于:
   String driver;//驱动名
   String url;//数据库访问路径
   String username;//用户名
   String password;//密码
   boolean autoCommit;//是否自动提交
 
 
  注:PooledDataSource和UnpooledDataSource 都有5个重载的构造方法。

你可能感兴趣的:(java,框架,数据库,orm,mybatis)