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个重载的构造方法。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值