1、首先打印SQL需要mybatis的jar包,我引入的是mybatis-3.4.4.jar
2、mybatis.xml配置
<settings>
<setting name="logImpl" value="STDOUT_LOGGING" />
</settings>
1)、指定 MyBatis所用日志的具体实现,STDOUT_LOGGING是标准输出
2)、value的可用值:SLF4J、LOG4J、LOG4J2、JDK_LOGGING、COMMONS_LOGGING、 STDOUT_LOGGING、NO_LOGGING ;默认值:Not set
3、log4j.properties正常配置即可
上面3步即可正常打印SQL
4、打印显示如下
==> Preparing: select id, name, pwd from user where pwd = ? and id = ?;
==> Parameters: 123(String), 1(String)
==> Total: 0
这种打印“?”和参数是分离的,看着不直观
5、
==> Preparing: select id, name, pwd from user where pwd = 123 and id =1 ;
想实现上面的打印,需要修改mybatis-3.4.4.jar包
1)、项目/maven dependencies/mybatis-3.4.4.jar/org.apache.ibatis.logging.jdbc.BaseJdbcLogger.class,
然后通过反编译软件编译成BaseJdbcLogger.java,
2)、随便找一个项目在src/main/java下新建包org.apache.ibatis.logging.jdbc,然后把BaseJdbcLogger.java复制到 此包下
3)、修改BaseJdbcLogger.java的debug()方法
debug()修改前
-
protected void debug(String text, boolean input) { if (statementLog.isDebugEnabled()) { statementLog.debug(prefix(input) + text); } }
-
debug()修改为
-
private static String sql = ""; protected void debug(String text, boolean input) { text = text.trim(); if (statementLog.isDebugEnabled()) { if (text.startsWith("Preparing:")) { sql = text.substring(text.indexOf(":") + 1); return; } if (text.startsWith("Parameters:")) { String temp = text.substring(text.indexOf(":") + 1); if (!"".equals(temp)) { String[] split = temp.split(","); if (split != null & split.length > 0) { for (String string2 : split) { String s = string2.trim(); sql = sql.replaceFirst("\\?", s.substring(0, s.indexOf("("))); } } } text = "Preparing:" + sql; sql = ""; } statementLog.debug(prefix(input) + text); } }
4)、自动编译位.class,BaseJdbcLogger.java和BaseJdbcLogger.class按下图替换
5)、修改替换中eclipse需要关闭,因为项目会用mybatis-3.4.4.jar包,然后打开eclipse,更新一下项目。
7、在控制台打印查询语句结果集
配置log4j2.xml
实现用Log4j2
来打印Mybatis
的SQL
很简单,先配置一个name
为consolePrint
的附加器,指定输出格式
然后在loggers
下配置一个logger
,name
指向项目持久层接口的package
,也就是和Mybatis
配置文件对应的接口包,再定义输出方式就可以了
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="INFO" monitorInterval="1800">
<appenders>
<Console name="consolePrint" target="SYSTEM_OUT">
<PatternLayout pattern="%d{HH:mm:ss} [%t] %-5level %logger{36} - %msg%n" />
</Console>
</appenders>
<loggers>
<!-- level="TRACE"是打印查询结果集;level="DEBUG"是不打印 -->
<logger name="DAO层包的路经" level="TRACE" additivity="false">
<appender-ref ref="consolePrint"/>
</logger>
<root level="info">
<appender-ref ref="consolePrint" />
</root>
</loggers>
</Configuration>
8.SpringBoot打印SQL:修改application.yml
mybatis:
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
完