使用 ORM 框架的时候,为了调试,常有打印 SQL 的需求,大部分打印出来的 SQL 带?
(PreparedStatement)。这里记录一下在使用 Druid 连接池的时候,使用 Druid 自带的功能 打印 可执行的SQL。
Maven 依赖
1 | <dependency> |
示例代码
主要关注代码注释
1 | import com.alibaba.druid.filter.logging.Slf4jLogFilter; |
输出
1
2
3
4 > [main] DEBUG druid.sql.Statement - {conn-10001, pstmt-20000} executed. select *
> from T_TEST_
> where ID = 613290
>
XML 配置示例
详见官方文档: 配置_LogFilter
1 | <bean id="druidLogFilter" class="com.alibaba.druid.filter.logging.Slf4jLogFilter"> |
注意日志级别
注意一下 LoggerName 的 日志级别要设置为 Debug
1 | // 数据源相关 |
如何获取可执行SQL
- JDK 中 JDBC 规范只提供接口(如 PreparedStatement 接口),并未提供获取可执行SQL的接口
- JDBC 规范的实现由各大数据库厂商实现,包括 预查询语句的 SQL 拼接 可执行语句也是由各大厂商实现
MySQL JDBC 驱动示例
1 | Class.forName("com.mysql.jdbc.Driver"); |
Druid 实现方式
Druid 自己实现了 PreparedStatement 参数的拼接
1 | String sql = SQLUtils.format( |
Read More
- 官方文档