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

Posted

技术标签:

【中文标题】如何使ibatis记录完整的SQL语句,而不仅仅是用\'?\'替换参数【英文标题】:How to make ibatis log full SQL statement, not just replace argument with '?'如何使ibatis记录完整的SQL语句,而不仅仅是用'?'替换参数 【发布时间】:2011-10-26 03:25:00 【问题描述】:

使用如下所示的当前 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>

【问题讨论】:

【参考方案1】:

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

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

【讨论】:

以上是关于如何使ibatis记录完整的SQL语句,而不仅仅是用'?'替换参数的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 java 设置完整的日期和时间 sql,而不仅仅是日期?

JPA,Hibernate,ibatis(mybatis)如何选用?

如何配置ibatis语句带小于号的

如何配置ibatis语句带小于号的?

Doctrine - 如何打印出真正的 sql,而不仅仅是准备好的语句?

如何生成ibatis 动态sql