springboot mybatis 断点查看实际执行的sql

200 阅读1分钟

在这个方法设置断点: org.apache.ibatis.scripting.defaults.DefaultParameterHandler#setParameters

temp.png for循环后可以看到?被替换后的结果,上面截图用的HikariCP

Druid估计差不多,DefaultParameterHandler 这个类持有Druid的引用,找下PS对象的属性应该就可以找到

DefaultParameterHandler 是 MyBatis 的实现类

它属于 MyBatis 核心模块,负责 将 Java 参数绑定到 SQL 语句(即 PreparedStatement 的参数设置)。

它不直接处理数据库差异,而是 通过 JDBC 标准接口 调用数据库驱动。

它内部调用的是 JDBC 标准接口(如 PreparedStatement.setXxx())

例如:

java
ps.setInt(1, 100);       // 调用 JDBC 标准方法
ps.setString(2, "hello"); // 调用 JDBC 标准方法
不同的数据库驱动(如 MySQL、PostgreSQL)会实现这些 JDBC 接口,因此 MyBatis 无需关心底层是哪种数据库。

Mybatis,连接池,JDBC驱动,数据库调用关系参考:

MyBatis (DefaultParameterHandler)
    ↓ 调用 setParameter()
Druid (PreparedStatementProxyImpl)  → 代理增强(监控、拦截等)
    ↓ 调用底层 JDBC 接口
真正的 JDBC 驱动(如 MySQL 的 ClientPreparedStatement)
    ↓ 最终操作数据库
Database (MySQL/PostgreSQL/Oracle...)