如何在项目中打印sql和执行的时间

目标:打印DAO方法中sql和执行的时间

一种方式是去实现Mybatis的拦截器Interceptor ,比较麻烦;
这里介绍一种比较简单的实现方式;

1、如何打印sql?

配置文件加这个可以打印出com.zhenhui.ids.busi.watch包下执行的sql

xml 复制代码
logging.level.com.zhenhui.ids.busi.watch=debug

2、如何打印sql执行时间
com.zhenhui.ids.busi.watch 包下有多个子包,大部分子包下有DAO结尾的类,或者是Dao结尾

新建AOP切面类:MapperAspect

java 复制代码
package com.zhenhui.ids.busi.watch.config;
import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.stereotype.Component;

import java.util.Arrays;

@Aspect
@Component
@Slf4j
public class MapperAspect {

    @Pointcut("execution(* com.zhenhui.ids.busi.watch..*DAO.*(..))|| " +
            "execution(* com.zhenhui.ids.busi.watch..*Dao.*(..))) "
    )

    private void pointCutMethod() {

    }

    @Around("pointCutMethod()")
    public Object doAround(ProceedingJoinPoint pjp)  {
        long begin = System.nanoTime();
        Object obj = null;
        try {
            obj = pjp.proceed();
        }
        catch (Throwable throwable) {
            log.info("执行异常");
        }
        long end = System.nanoTime();

        log.info("调用Mapper方法:{},参数:{},\n耗时:{}毫秒",
                pjp.getSignature().toString(), Arrays.toString(pjp.getArgs()), (end - begin) / 1000000);
        return obj;
    }
}
相关推荐
五味香23 分钟前
android音频录音,(一)MediaRecorder简介
android·java·音视频
Phoenixtree_DongZhao42 分钟前
基于 Deep Flare Net 的可操作太阳耀斑预测模型
数据库·人工智能·空间科学
半ོ糖ོ1 小时前
SQL报错注入之floor
数据库·sql
小白在路上~2 小时前
基于STC89C52单片机的U盘设计
数据库·单片机·mongodb
技术猿188702783512 小时前
数据库扩展新篇章:主流分库分表中间件全解析
数据库·中间件
梁诚斌2 小时前
Android HandlerThread泄漏FD问题
android
木小同3 小时前
redis面试(八)watchdog看门狗代码逻辑
数据库·redis·面试
一个热爱java的小白3 小时前
MySQL中常用工具
数据库·mysql
penguin_bark3 小时前
【Mysql】第七章 内置函数(日期函数+字符串函数+数学函数等)
数据库·sql·mysql
怀后同学.3 小时前
web安全-SQL注入的类型以及提交注入
数据库·sql·web安全