打印无问号SQL,修改mybatis.jar(org.apache.ibatis.logging.jdbc.BaseJdbcLogger.class)

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()修改前 

 
  1. protected void debug(String text, boolean input) {
            if (statementLog.isDebugEnabled()) {
                    statementLog.debug(prefix(input) + text);
            }
    }

       
  2.  debug()修改为

  3. 	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来打印MybatisSQL很简单,先配置一个nameconsolePrint的附加器,指定输出格式 
然后在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

 

   完

 

 

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值