Mybatis原理分析之六:数据源

本文深入探讨数据源的核心概念,包括数据源相关类、关键接口及其实现方式,重点介绍了JNDI实现与连接池实现的原理与代码片段。

数据源包结构

一 概述

数据源相关核心类在datasource中,包含JNDI使用线程池的和不使用线程池的实现

二 核心接口

DataSoourceFactory接口

//设置属性,被XMLConfigBuilder所调用
void setProperties(Properties props);

//生产数据源,直接得到javax.sql.DataSource
DataSource getDataSource();
DataSource 提供接口
Connection getConnection() throws SQLException;
Connection getConnection(String username, String password)
三 核心接口的实现

1.JNDI实现

JndiDataSourceFactory
JNDI数据源工厂这个数据源的实现是为了使用如 Spring 或应用服务器这类的容器, 容器可以集 中或在外部配置数据源,然后放置一个 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;//是否自动提交

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值