对于mybatis我们有时候需要调试或者查看问题时,我们需要打印出执行的sql,那么问题来了,mybatis如何输出sql日志,首先我们可以给SQLMapConfig.xml文件中configuration加入
<settings>
<setting name="logImpl" value="你想要的日志输出"/></settings>
其中这个你想要的日志有这些选项SLF4J、LOG4J、LOG4J2、JDK_LOGGING、COMMONS_LOGGING、STDOUT_LOGGING、NO_LOGGING ,如果是没有特殊需要,直接配置为STDOUT_LOGGING,这样就搞定了,其他的比如LOG4J要有log4j.properties这个文件,这个文件中通过配置可以实现sql的选择输出,如果是LOG4J2这个配置,那么日志的输出规则则是按log4j2.xml这个文件的配置来输出。基本上始于日志的配置文件对应的。有哪些?这个我们可以看mybatis.jar中org.apache.ibatis.logging包下就可以看到一些系统给的配置的实现了,你要是想自我定制可以参考mybatis.jar下org.apache.ibatis.logging.log4j包下的Log4jImpl的实现,实现org.apache.ibatis.logging.Log接口就好了,那么那个logImpl的value为你自定义的log的类的路径(如com.ha.logger)这样就搞定了。解决了我看了一两个小时的sql日志问题了。备注(如果想要只输出某个方法的sql,在log4j中配置如下log4j.logger.org.mybatis.example.UserMapper.selectUser=TRACE ,是这个TRACE这个可以控制的,可能不准确可以用)。
在白天的使用中,我发现了一个问题,就是如果log4j2配置日志时,如果配置的包路径中包含mapper接口,那么这个不受additivity这个参数的影响,也就是说additivity无论设置为true 还是false都会输出sql,所以mapper接口的日志要细配到mapper的包或者类甚至是方法。