mybatis打印JDBC日志源码分析(JDK动态代理)

2021-11-30 15:34:59 浏览数 (1)

mybatis支持不同的数据库,具体访问数据库是由不同的数据库厂商提供的驱动jar包。

比如:mysql的mysql-connector-java.jar

不同厂商提供的提供的jar也是基于JDK下的java.sql包中的接口去实现的

比如:不同的数据库厂商基于Connection接口实现了自家的Connection访问数据库类

不同厂商只要基于JDK提供的接口实现类,就能访问数据库

此处不得不赞美面向接口编程的精妙之处

mybatis框架的作用是把数据库的元数据转成java对象,方便java代码操作,具体的数据库访问操作由JDBC完成。但是很多时候我们想要看到mybaits和jdbc之间的交互痕迹,比如:mybatis调用了JDBC的哪些方法,传了什么参数,得到了什么执行结果。

如果打出这些sql日志方便我们bug排查和分析,也可以根据sql优化代码,比如:通过优化mybatis的缓存使用,减少数据访问次数,减少数据库压力,提高系统响应时间。

  1. 实现JDBC sql日志打印的类: 在这里插入图片描述在这里插入图片描述
  2. 类的继承关系: 在这里插入图片描述在这里插入图片描述

connection打印日志的代理类ConnectionLogger,这个命名有点误导,看命名不会把它当作是一个proxy,但是看到他实现了InvocationHandler接口就知道这是一个代理类了。

代理类持有一个connection接口,并不是具体的类,具体实现类看jdbc接入的是什么数据库的connection实现类,再次体现了面向接口编程的精妙之处

0 人点赞