java - 如何使 ibatis 记录完整的 SQL 语句,而不仅仅是用 '?' 替换参数

标签 java log4j ibatis

当前的 log4j.xml 如下所示,我得到类似“select * from users where user_id = ?”的日志

<logger name="com.ibatis">
    <level value="debug"/>
    <appender-ref ref="IBATIS"/>
</logger>
<logger name="java.sql">
    <level value="debug"/>
    <appender-ref ref="IBATIS"/>
</logger>

最佳答案

我理解 ibatis 文档的方式是将查询的日志记录委托(delegate)给 java.sql 包中的标准 JDBC 类。现在,您的示例日志输出表明使用了准备好的语句。这些通常的工作方式是预先将准备好的语句(包括问号占位符)发送到数据库服务器。实际值在绑定(bind)并执行查询时单独发送。直接的结果是,扩展查询(您期望获得的日志输出)实际上从未在客户端构建,而是在数据库服务器本身构建。

但是,有一些方法可以解决这个问题。您应该能够引用此处提出的答案以获得可能的解决方案: Logging PreparedStatements in Java

关于java - 如何使 ibatis 记录完整的 SQL 语句,而不仅仅是用 '?' 替换参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7898423/

相关文章:

Java 数组中的 null 行为

eclipse - Ant eclipse : package org.apache.log4j does not exist

java - 找不到行时 iBatis 不填充对象

java - iBatis 使用 set 作为 resultMap 和 parameterMap

javascript - Angular 在浏览器上下载 csv 文件

java - OptaPlanner 了解规则

java - JAXB 生成类的编译错误

Tomcat7、Log4j Container和WebApp级别的配置

java - Log4j2:切换到路由后自定义插件不起作用

java - 将两个不同选择的结果合并为一个结果集