理解 数据源、连接、会话(DataSource、Connection、SqlSession)

理解 数据源、连接、会话(DataSource、Connection、 SqlSession)

学习中,理解可能不正确,不准确,请指正

什么是数据源?

数据源类似URL,比如 https://gitee.com/mini-bag/picture-bed/blob/master/img/cs.jpeg就可以理解为一张图片的源,源并不代表数据本身,而是一个地址。通过数据源可以建立Connection,从而访问数据库而ibatis数据源由地址而额外属性组成,这些额外属性可以看做访问数据源的配置。

在UnpooledDataSource.java中,简单来看,数据源:

// 数据源地址 最重要
// url: jdbc:mysql://ip:port/db
private String url;

配置属性

private String username;
private String password;
private String driver;
// 自动提交事务
private Boolean autoCommit;
// 事务隔离等级
private Integer defaultTransactionIsolationLevel;
// 网络超时
private Integer defaultNetworkTimeout;

举个例子

在Spring项目中,数据源URL精确到dbName。

image-20210219184234966

什么是Connection、什么是SqlSession

Connection与SqlSession之间的关系类似物理地址与逻辑地址。java.sql.Connection.java中有如下注释,注意括号中session是对connection一种补充说明:

/**
 * A connection (session) with a specific database
 */

不过,在ibatis中,一个SqlSession可以拥有多个Connection(连接池),这里主要说明ibatis中的SqlSession。

image-20210220174112377

连接池中多个Connection可以在如下源码中找到:

// 一个连接池数据源
class PooledDataSource{
    private final PoolState state = new PoolState(this);
}
class PoolState {
    // 多个连接
	protected final List<PooledConnection> idleConnections = new ArrayList<>();
	protected final List<PooledConnection> activeConnections = new ArrayList<>();
}

SqlSession与Connection的联系还没有明确,暂时放弃

再来看下ibatis执行一次sql的函数调用栈

image-20210220144915053

可以看到,查询方法先使用defaultSqlSession,然后getConnection(),根据调度策略,选取一个合适的Connection与进行数据库通信。

数据源 Connection SqlSession总结

数据源: 是数据的地址及一些额外的配置属性,使用这些数据,可以建立与数据库的链接

Connection: 连接数据源的物理链路

SqlSession: 连接数据源的逻辑链路,可以对应多个Connection,根据调度策略,选取其中一个Connection

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值