文档章节

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

FansUnion
 FansUnion
发布于 2015/05/03 01:29
字数 382
阅读 12
收藏 0

一、数据源概述

 数据源相关核心类位于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个重载的构造方法。

© 著作权归作者所有

FansUnion
粉丝 60
博文 858
码字总数 825464
作品 0
丰台
高级程序员
私信 提问

暂无文章

IDEA中package不能引入依赖的解决方法

在IDEA中, 使用maven打包。出现了package后没有将需要的依赖放入包中, 运行会抛出java.lang.NoClassDefFoundError的异常。 解决办法 在pom.xml中加入: <build> <plugins> ...

dreamness
14分钟前
0
0
IDEA模板

import com.google.common.collect.Lists;import java.util.List;/** * @author hll * @date 2019/5/26 - 13:12 */public class Demo { // 模板五 // prsf -- > ......

一只小青蛙
30分钟前
0
0
9.jackjson使用教程

1.导入相关jar <!-- 10.jackson --> <!--10.1 定义了底层的streaming API和实现了Json特性 --> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-core</art......

20190513
34分钟前
1
0
如何使用 rsync 备份 Linux 系统的一些介绍

备份一直是 Linux 世界的热门话题。回到 2017,David Both 为 Opensource.com 的读者在使用 rsync 备份 Linux 系统方面提了一些建议,在这年的更早时候,他发起了一项问卷调查询问大家,在 ...

Linux就该这么学
54分钟前
3
0
以太坊私有链搭建

https://blog.csdn.net/Blockchain_lemon/article/details/80589123

Moks角木
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部