java sql 美化插件_Mybatis插件-sql日志美化输出

本文介绍了如何使用Mybatis拦截器实现SQL日志的美化输出,包括处理通用mapper Example查询、日期参数和自定义String[] TypeHandle参数。通过插件,将原本分散的SQL和参数合并显示,提高日志可读性。
摘要由CSDN通过智能技术生成

同步自本人博客

mybatis有基本的sql日志,但是看起来很不舒服,sql一行参数在另一行,查询多的时候sql行和参数行分开很远。下面就是相同颜色的是一组:

1536204341228.jpg

看了大哥的文章决定试试弄个美化日志的mybatis插件,其中还增加了对通用mapper Example查询、日期参数和自定义String[] TypeHandle参数的处理,废话不多说上代码:

@Component

@Profile({"dev", "test"})

@Intercepts({@Signature(type = StatementHandler.class, method = "query", args = {Statement.class, ResultHandler.class}),

@Signature(type = StatementHandler.class, method = "update", args = {Statement.class}),

@Signature(type = StatementHandler.class, method = "batch", args = {Statement.class})})

@Slf4j

public class SqlCastInInterceptor implements Interceptor {

@Override

public Object intercept(Invocation invocation) throws Throwable {

Object target = invocation.getTarget();

long startTime = System.currentTimeMillis();

StatementHandler statementHandler = (StatementHandler) target;

int size = 0;

try {

Object o = invocation.proceed();

if (isList(o.getClass())) {

size = ((List) o).size();

}

return o;

} finally {

long endTime = System.currentTimeMillis();

long sqlCost = endTime - startTime;

BoundSql boundSql = statementHandler.getBoundSql();

String sql = boundSql.getSql();

Object parameterObject = boundSql.getParameterObject();

List parameterMappingList = boundSql.getParameterMappings();

// 格式化Sql语句,去除换行符,替换参数

sql = formatSql(sql, parameterObject, parameterMappingList);

log.debug("SQL:[" + sql + "]执行耗时[" + sqlCost + "ms]结果集[" + size + "]");

}

}

@Override

public Object plugin(Object target) {

return Plugin.wrap(target, this);

}

@Override

public void setProperties(Properties properties) {

log.info("set properties");

}

/**

* @param sql 没花钱sql

* @param parameterObject 参数

* @param parameterMappingList 参数map

* @return 美化后sql

* 增加代码可以处理通用mapper的Example参数美化sql

*/

@SuppressWarnings("unchecked")

private String formatSql(String sql, Object parameterObject, List parameterMappingList) {

// 输入sql字符串空判断

if (sql == null || sql.length() == 0) {

return "";

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值