mybatis可以记录可以直接运行的完整sql吗
mitkmikd1#
一般来说,答案是否定的。如果查询有参数,mybatis原则上也不能这样做。为了记录查询,所有参数都应该序列化并表示为字符串。对于简单的数据类型,如 String 或者 Integer 这不是一个问题,但对于更复杂的 Timestamp 或者 Blob 表示可能取决于数据库。执行查询时,不需要将参数转换为字符串,因为jdbc驱动程序以更高效(并且依赖于数据库)的格式将参数传递给数据库。但是出于日志记录的目的,mybatis只有java对象,而mybatis不知道如何将它们表示为特定于数据库的字符串文本。因此,最好的方法(mybatis支持这一点)是使用占位符和单独使用的日志参数记录查询。配置 DEBUG 以Map器命名的记录器的日志级别。对于log4j配置,如下所示:
String
Integer
Timestamp
Blob
DEBUG
log4j.logger.my.org.myapp.SomeMapper=DEBUG
gz5pxeao2#
如果你在开发环境中使用intellij,我认为plugin Mybatis Log Plugin 我可以帮你。如果是在生产环境中,您可以复制日志并将其粘贴到本地。然后使用插件功能 Restore Sql from Selection 或者 Restore Sql from text (新版即将推出)详细介绍:https://github.com/kookob/mybatis-log-plugin
Mybatis Log Plugin
Restore Sql from Selection
Restore Sql from text
2条答案
按热度按时间mitkmikd1#
一般来说,答案是否定的。
如果查询有参数,mybatis原则上也不能这样做。为了记录查询,所有参数都应该序列化并表示为字符串。对于简单的数据类型,如
String
或者Integer
这不是一个问题,但对于更复杂的Timestamp
或者Blob
表示可能取决于数据库。执行查询时,不需要将参数转换为字符串,因为jdbc驱动程序以更高效(并且依赖于数据库)的格式将参数传递给数据库。但是出于日志记录的目的,mybatis只有java对象,而mybatis不知道如何将它们表示为特定于数据库的字符串文本。
因此,最好的方法(mybatis支持这一点)是使用占位符和单独使用的日志参数记录查询。配置
DEBUG
以Map器命名的记录器的日志级别。对于log4j配置,如下所示:
gz5pxeao2#
如果你在开发环境中使用intellij,我认为plugin
Mybatis Log Plugin
我可以帮你。如果是在生产环境中,您可以复制日志并将其粘贴到本地。然后使用插件功能
Restore Sql from Selection
或者Restore Sql from text
(新版即将推出)详细介绍:
https://github.com/kookob/mybatis-log-plugin