(请参考版本2 ,因为该版本有bug,必须要配置mybatis的日志logimp,否则会报错.
)
方法:通过插件拦截StatementHandler的parameterize方法,在StatementHandler对象调用parameterize方法设置参数后,就可以获取完整的sql参数
package com.glsys.mybatis3.interceptor; import java.lang.reflect.Method; import java.lang.reflect.Proxy; import java.sql.Statement; import java.util.Properties; import org.apache.ibatis.executor.ErrorContext; import org.apache.ibatis.executor.statement.StatementHandler; import org.apache.ibatis.logging.jdbc.PreparedStatementLogger; import org.apache.ibatis.mapping.BoundSql; 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.slf4j.Logger; import org.slf4j.LoggerFactory; @Intercepts({ @Signature(type = StatementHandler.class, method = "parameterize", args = {Statement.class}) }) public class SQLErrorContextInterceptor implements Interceptor { private final Logger logger = LoggerFactory.getLogger(this.getClass()); @Override public Object intercept(Invocation invocation) throws Throwable { Object obj=invocation.getArgs()[0]; System.out.println("Before StatementHandler. parameterize()..."); System.out.println("Before sql:"+obj.toString()); invocation.proceed(); System.out.println("Aflter StatementHandler .parameterize()..."); System.out.println("Aflter sql:"+obj.toString()); System.out.println("sql:"+obj.toString()); //方式1:直接使用statment对象的 toString方法 // ErrorContext.instance().sql(obj.toString()); //方式2 : 反射获取PreparedStatementLogger父类的PreparedStatementLogger方法 StatementHandler statementHandler = (StatementHandler) invocation.getTarget(); BoundSql boundSql = statementHandler.getBoundSql(); Object handler=Proxy.getInvocationHandler(obj); PreparedStatementLogger pstLogger=(PreparedStatementLogger)handler; Class clz=pstLogger.getClass().getSuperclass(); Method m=clz.getDeclaredMethod("getParameterValueString"); m.setAccessible(true); String logStr=(String) m.invoke(pstLogger); System.out.println(logStr); ErrorContext.instance().sql( boundSql.getSql()+" parameters:"+logStr); return null; } @Override public Object plugin(Object target) { return Plugin.wrap(target, this); } @Override public void setProperties(Properties properties) { String dialect = properties.getProperty("dialect"); logger.info("mybatis intercept dialect:{}", dialect); } }
相关推荐
把 mybatis 输出的sql日志还原成完整的sql语句。 将日志输出的sql语句中的问号 ? 替换成真正的参数值。 通过 "Tools -> MyBatis Log Plugin" 菜单或快捷键 "Ctrl+Shift+Alt+O" 启用。 点击窗口左边的 "Filter" ...
MybatisLog是一款针对Mybatis框架的日志插件,Free-Mybatis则是它的扩展,两者结合为开发者提供了强大的SQL日志追踪功能。在开发过程中,理解并优化SQL查询是提升应用程序性能的关键步骤,而MybatisLog与Free-...
非常好用的,就是你们所要的 Mybatis日志参数快速替换占位符 sql参数替换工具html
总之,"MyBatis Log Plugin"是针对IntelliJ IDEA用户的一款实用工具,它极大地简化了MyBatis SQL日志查看的过程,提高了开发效率。结合提供的"步骤1.png"和"步骤2.png",你可以更直观地理解安装和使用方法。对于Java...
在执行`getUserByUsernameAndStatus`方法时,Mybatis会自动填充SQL参数,并将完整的SQL语句(包括参数值)打印到控制台。例如,如果传入的参数是`username='test'`和`status='active'`,控制台将输出如下内容: ```...
拦截器监控慢SQL并将完整的可执行的SQL语句打印在日志文件中,复制该SQL语句即可在数据库工具中执行。 使用方法: 找到你springboot项目中的配置文件,增加如下配置即可 application.yml 配置如下: sql: slow...
该工具可以将mybatis输出的sql日志提取出来,并将其格式化为可以直接执行的sql语句,节约开发人员时间
IntelliJ IDEA有一个名为`mybatis-log`的插件,它可以增强MyBatis的SQL日志输出,提供更友好的格式。安装该插件后,你可以在IDEA的底部工具栏看到一个新面板,显示执行的SQL和时间。 总的来说,通过配置日志框架、...
MyBatis3是其最新版本,带来了许多改进和优化,旨在提高开发效率和代码的可维护性。这篇《MyBatis-3-User-Guide-Simplified-Chinese》是针对中国开发者的一份详细指南,提供了全面的MyBatis3使用方法和最佳实践。 ...
在MyBatis与Spring整合的框架中,为了便于调试和性能优化,我们常常需要在日志中打印出执行的SQL语句。以下是如何在这样的环境中配置日志来显示SQL语句的详细步骤。 首先,我们需要了解MyBatis的日志实现。MyBatis...
mybatis SQL日志解析;查看日志时mybatis打印的日志查询条件以及参数不是拼接好的,想复制对应sql在本地执行时比较麻烦,通过前端编写页面进行日志解析,拼接sql中的问号以及参数变课轻松实现
1. **SQL日志打印**:插件会在日志中详细输出每个SQL语句,包括原始的SQL模板、实际的参数值以及执行后的结果,这对于理解代码与数据库交互的情况非常有帮助。 2. **执行时间统计**:MybatisX还提供了SQL执行时间的...
把SQL日志里面的?替换为真正的参数值。 选中要还原的MyBatis日志,右键点击菜单Restore Sql,还原SQL语句. Java接口方法与Mapper xml文件互相跳转。 按钮作用 Text: 从文本内容还原SQL语句 Settings: 导航跳转开关,...
要使MyBatis-Plus在控制台打印带参数的SQL,我们可以选择使用`StdOutImpl`,这是一个简单的标准输出日志实现。在Spring Boot项目中,我们可以在`application.yml`或`application.properties`中进行配置。以下是两种...
2. **参数映射优化**:3.2.8版本进一步优化了参数映射机制,提高了参数绑定的效率,减少了潜在的类型转换错误。 3. **结果集映射**:支持自动结果映射,通过配置`<resultMap>`元素,可以轻松处理复杂的一对多、一对...
2. **XML配置与注解**:Mybatis 使用XML或注解的方式定义SQL映射文件,这些文件包含了SQL语句及其参数绑定、结果映射等信息。开发者可以灵活地编写复杂的SQL,同时避免了大量DAO层的代码。 3. **动态SQL**:Mybatis...
MyBatis逆向工程是开发过程中一个非常实用的工具,它可以帮助我们自动生成基于数据库的Mapper接口、XML映射文件以及对应的实体类,极大地提高了开发效率。在本案例中,我们关注的核心是`mybatis-generator-core-...
4. **动态SQL**:MyBatis支持动态SQL,可以在映射文件中使用条件判断、循环等结构,根据传入参数动态生成SQL,极大地提高了灵活性。 5. **Mapper接口**:MyBatis允许开发者定义Mapper接口,每个方法对应一个SQL查询...
在这个"springboot+mybatis+sql日志"的主题中,我们将探讨如何在Spring Boot应用中整合MyBatis,并通过Logback实现动态打印SQL日志,以及根据不同包名将日志输出到不同的文件。 首先,Spring Boot与MyBatis的集成...