1、在mybatis-config.xml配置中添加setting配置参数,会打印SQL执行结果
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration><settings><!-- 打印查询语句 --><setting name="logImpl" value="STDOUT_LOGGING" /></settings>
</configuration>

2、在spring-mybatis配置文件中添加配置参数
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"><property name="dataSource" ref="dataSource" /><property name="configLocation" value="classpath:mybatis-config.xml"></property><property name="mapperLocations" value="classpath:xxx/xxx/xxx/xxx/*.xml"></property>
</bean>

备注: 之前通过log4j的配置文件方式来实现,没有成功!!!项目环境:ssm+shiro

第二种方式(通过拦截器的方式)1、在sqlSessionFactory 配置参数中,添加参数配置:
<property name="plugins"><list><bean class="xxx.MybatisInterceptor"></bean></list>
</property>

2、mybatis sql拦截器类
package xxx;import java.text.DateFormat;
import java.util.Date;
import java.util.List;
import java.util.Locale;
import java.util.Properties;import org.apache.ibatis.executor.Executor;
import org.apache.ibatis.mapping.BoundSql;
import org.apache.ibatis.mapping.MappedStatement;
import org.apache.ibatis.mapping.ParameterMapping;
import org.apache.ibatis.plugin.Interceptor;
import org.apache.ibatis.plugin.Intercepts;
import org.apache.ibatis.plugin.Invocation;
import org.apache.ibatis.plugin.Plugin;
import org.apache.ibatis.plugin.Signature;
import org.apache.ibatis.reflection.MetaObject;
import org.apache.ibatis.session.Configuration;
import org.apache.ibatis.session.ResultHandler;
import org.apache.ibatis.session.RowBounds;
import org.apache.ibatis.type.TypeHandlerRegistry;
import org.apache.log4j.Logger;/*** @author Tim** 2019年4月24日* * mybatis sql 拦截器*/
@Intercepts({  @Signature(type = Executor.class, method = "update", args = { MappedStatement.class, Object.class }),  @Signature(type = Executor.class, method = "query",  args = { MappedStatement.class, Object.class, RowBounds.class, ResultHandler.class })
})
public class MybatisInterceptor implements Interceptor {private static final Logger log = Logger.getLogger(MybatisInterceptor.class);@Overridepublic Object intercept(Invocation invocation) throws Throwable {MappedStatement mappedStatement = (MappedStatement) invocation.getArgs()[0];  Object parameter = null;  if (invocation.getArgs().length > 1) {  parameter = invocation.getArgs()[1];  }  BoundSql boundSql = mappedStatement.getBoundSql(parameter);  Configuration configuration = mappedStatement.getConfiguration();  Object returnVal = invocation.proceed();//获取sql语句String sql = getSql(configuration, boundSql);  log.info("#####拦截器获取SQL#### "+sql);     //统计SQL执行时间     Object target = invocation.getTarget();     Object result = null;     if (target instanceof Executor) {        long start = System.currentTimeMillis();
            Method method = invocation.getMethod();/**执行方法*/result = invocation.proceed();long end = System.currentTimeMillis();logger.info("[" + method.getName() + "] 耗时 [" + (end - start) + "] ms");}    return returnVal;
    }@Overridepublic Object plugin(Object target) {return Plugin.wrap(target, this);}@Overridepublic void setProperties(Properties arg0) {}/*** 获取SQL* @param configuration* @param boundSql* @return*/private String getSql(Configuration configuration, BoundSql boundSql) {Object parameterObject = boundSql.getParameterObject();  List<ParameterMapping> parameterMappings = boundSql.getParameterMappings();  String sql = boundSql.getSql().replaceAll("[\\s]+", " ");  if (parameterObject == null || parameterMappings.size() == 0) {return sql;}  TypeHandlerRegistry typeHandlerRegistry = configuration.getTypeHandlerRegistry();  if (typeHandlerRegistry.hasTypeHandler(parameterObject.getClass())) {  sql = sql.replaceFirst("\\?", getParameterValue(parameterObject));  } else {  MetaObject metaObject = configuration.newMetaObject(parameterObject);  for (ParameterMapping parameterMapping : parameterMappings) {  String propertyName = parameterMapping.getProperty();  if (metaObject.hasGetter(propertyName)) {  Object obj = metaObject.getValue(propertyName);  sql = sql.replaceFirst("\\?", getParameterValue(obj));  } else if (boundSql.hasAdditionalParameter(propertyName)) {  Object obj = boundSql.getAdditionalParameter(propertyName);  sql = sql.replaceFirst("\\?", getParameterValue(obj));  }  }  }  return sql;}private String getParameterValue(Object obj) {  String value = null;  if (obj instanceof String) {  value = "'" + obj.toString() + "'";  } else if (obj instanceof Date) {  DateFormat formatter = DateFormat.getDateTimeInstance(DateFormat.DEFAULT, DateFormat.DEFAULT, Locale.CHINA);  value = "'" + formatter.format(obj) + "'";  } else {  if (obj != null) {  value = obj.toString();  } else {  value = "";  }  }  return value;  }
}

 
 

  

转载于:https://www.cnblogs.com/codechange/p/10718416.html

spring+mybatis+log4j 输出SQL相关推荐

  1. spring boot 整合mybatis 无法输出sql的问题

    使用spring boot整合mybatis,测试功能的时候,遇到到了sql问题,想要从日志上看哪里错了,但是怎么都无法输出执行的sql,我使用的是log4j2,百度了一下,很多博客都说,加上下面的日 ...

  2. SSM中配置log4J输出sql语句

    场景 在SSM整合时需要查看输出的sql语句以便排查错误信息. 实现 在项目的classpath(src目录)下或者resource包下(maven项目)新建一个log4j.properties文件. ...

  3. mybatis log4j打印sql

    log4j.logger.p6spy=ERROR,STDOUT #log4j.logger.p6spy=DEBUG,STDOUT #log4j.logger.p6spy=DEBUG, SQLPROFI ...

  4. SSM中实现CRUD并配置输出sql语句

    场景 前面SSM的项目整合以及分页等参照 https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/85120936 使用log4j输出sql ...

  5. MyBatis3 用log4j在控制台输出 SQL

    方法一:使用标准日志输出 此方法比较简单,只需要配置 MyBatis 的配置文件 Configuration 中有相关属性即可,不用再放一个 log4j.properties 文件. [html] v ...

  6. mybatis结合log4j打印SQL日志

    mybatis结合log4j打印SQL日志 1.Maven引用jar包 默认的mybatis不能打印出SQL日志,不便于查看调试,需要结合log4jdbc-log4j2就可以完整的输入SQL的调试信息 ...

  7. MyBatis使用log4j输出日志

    MyBatis使用log4j输出日志 引入依赖 创建log4j.xml 引入依赖 在当前项目的pom.xml中引入log4j.xml的依赖. <!-- log4j日志 --><dep ...

  8. mybatis开启log_mybatis使用spring-druid数据源连接池配置log4j打印sql语句以及开启监控平台...

    杂七杂的杂 作为程序员,开发工程中,一套利于测试或者监控的工具很重要,mybatis默认没有提供log4j的打印sql语句的配置. 这对于开发rest服务,提供接口的开发者而言,是在很不好做,再加上m ...

  9. Log4j控制台输出sql语句

    1.引入log4j包 <!-- log4j --><dependency><groupId>log4j</groupId><artifactId& ...

  10. mybatis配置log4j打印sql日志

    mybatis配置log4j打印sql日志 前提是你已经配置好了log4j. 在mybatis的配置文件中设置 <?xml version="1.0" encoding=&q ...

最新文章

  1. 【Python学习笔记】输入raw_input(),特殊情况下也可以用input()
  2. Pinyin4j中文字符和拼音之间的转换
  3. boost::hana::members用法的测试程序
  4. Can not find the tag library descriptor for http://java.sun.com/jsp/jstl/
  5. 操作word打印网址
  6. html中js定义的方法无效,javascript中定义函数有几种常用方法?
  7. Java9 jar兼容_java9新特性-6-多版本兼容jar包
  8. STM8单片机产生随机数
  9. HTML+CSS制作彩色波动
  10. YaoLingJump开发者日志(四)
  11. cobbler安装4个报错汇总及解决方法:ImportError
  12. atitit.身份认证解决方案attilax总结
  13. 海康rtsp抓包分析
  14. 计算机子网掩码在线,ip子网掩码计算器 子网掩码计算
  15. bom树形结构 表设计_按树型显示BOM的结构
  16. (2022年6月)注册ArcGIS Online(Learn ArcGIS) 21天免费账号笔记
  17. 产品之路第四年的再思考
  18. PhotoShop - 滤色模式(screen) 的 响应曲线(关于加镜头光晕的思考)
  19. 移动应用开发课堂总结
  20. 搭建ftp文件服务器

热门文章

  1. Windows环境变量配置问题
  2. LVS调度算法权威讲解——官方文档翻译
  3. Linux shell脚本详解及实战(二)——shell脚本之分支
  4. IS-IS详解(十七)——IS-IS 区域迁移与路由汇总
  5. ppp协议、chap认证、HDLC封装、MGRE、GRE综合实验
  6. 关系型数据库管理系统(RDBMS)与非关系型数据库(NoSQL)之间的区别
  7. Java7/8集合框架——基本知识点
  8. JavaScript中函数的上下文——this
  9. 实现一个 Java 版的 Redis (1)----百行代码解析Redis 协议.
  10. IT公司100题-16-层遍历二元树