Mysql Connector/J 源码分析(综述)

 


前言

我们使用JAVA语言开发的项目,如果应用需要连接到mysql数据库,必须会使用到mysql的connector/j的包,我们通过它来实现数据的增删改查。接下来我会尝试分析这个包的源码,到底是如何实现这些操作的。这个包有好几块特性,我将分开若干篇章来分析它的底层实现方式。本文先介绍这个包的逻辑结构。

本次分析的版本为5.1.46。若通过maven下载,可添加以下依赖:

    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>5.1.46</version>
    </dependency>

一、逻辑结构概述

下表从高到低概括了逻辑结构:

部件名称主要接口、类主要作用
驱动管理器java.sql.DriverManager注册、解除驱动。客户端通过它获取连接。
驱动层java.sql.Driver我们常见的用法是接收驱动管理器的命令,生成连接并返回给驱动管理器。
连接层java.sql.Connection形成与数据库间的连接。它的基本功能是创建我们常见的Statement、PreparedStatement然后进行一系列的数据操作。除了实现基本操作的实现类外,还有针对不同的场景有不同的实现,这包括:Failover、Loadbalance、Replication。后续文章会详细介绍它们的代码实现。
IO层com.mysql.jdbc.MysqlIO以java.net.Socket实现与Mysql数据管理软件的数据交互。我们应用使用到的sql命令,最终通过socket的输出流传到mysql数据库管理软件,然后通过socket的输入流获取操作结果信息。

 

二、图示逻辑结构

客户端将url和用户名与密码发送给DriverManager,它选出适用的Driver,然后将url等信息传给Driver。Driver收到信息后首先分析url,然后根据结果决定创建connection的类型,它会从普通Connection、FailoverProxy、LoadBalanceProxy或者ReplicationProxy中选其一。Connection使用MysqlIO将用户名与密码和其他信息发送给数据库管理软件,从而形成连接。

从图不难看出,普通Connection是构成其他类型的基础。另外,最后依然通过Socket与数据库管理软件所在的服务器进行通信,这一点始终与OSI7层结构的理论一致的。


总结

相信各位看官对这个包的逻辑结构已有一个总体了解,从体系上看是比较简单的。然而,在简单的背后有着复杂的处理。普通Connection虽作为其他代理的基础, 但是其内部在实现与数据库管理软件交互的过程中不见得简单。不同的代理有自己独特的处理,后续文章我将尽最大努力与大家一起探讨各场景的代码实现。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值