0%

Spring Boot + MyBatis 打印sql语句

在使用MyBatis开发过程中,经常需要打印出最终执行的sql语句,以便进行问题定位、优化,下面是如何打印出最终执行的sql语句的方法。

打印sql语句

要打印sql很简单,只需要在配置文件中将Mapper接口所在的包的logging level改成debug即可,包以及子包中Mapper所执行的sql语句都会打印出来,下面示例中cn.segon.mapper是Mapper接口所在的包:

如果配置文件是application.properties

1
logging.level.cn.segon.mapper=debug

如果配置文件是application.yml

1
2
3
4
5
logging:
level:
cn:
segon:
mapper: debug

经过如上配置,再次启动应用,就可以在输出的log中看到sql语句了,不过mybatis一般使用log4j打印执行的sql语句,输出大致如下:

1
2
3
2019-08-02 14:32:00.874 D/selectByUserId: ==>  Preparing: select * from t_table where user_id = ? and device_id = ? 
2019-08-02 14:32:00.874 D/selectByUserId: ==> Parameters: 3(Long), DEVICE01(String)
2019-08-02 14:32:00.877 D/selectByUserId: <== Total: 1

上面的输出不利于预读,还原sql语句需要手动拼接,效率低下并且容易出错,而IDEA的插件MyBatis Log Plugin则可以帮助我们直接打印出sql语句:
MyBatis Log Plugin

效果如下

1
2
3
4
5
--  304  2019-08-02 14:32:00.874 D/selectByUserDeviceId: ==>
select *
FROM t_table
WHERE user_id = 3 and device_id = 'DEVICE01';
-------------------------------------------------------------------------