插件
Interceptor
这是一个 MyBatis 拦截器插件,核心功能是:把 MyBatis 日志中带 ? 占位符的 SQL,还原成参数回填后的完整可执行 SQL,并打印执行耗时。开发调试时非常实用。
实现这个接口之后,实现它的intercept方法,拦截sql,去处理 SQL 执行,记录耗时,打印完整 SQL。
核心注解 @Intercepts,放在类上面,拦截 MyBatis 的 Executor.query() 和 Executor.update() 两个方法,即所有查询和更新操作都会被拦截。
1 | @Intercepts({ |
更多信息可以查看官方文档:https://mybatis.net.cn/configuration.html#plugins
文章作者: coder-xuyong
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 coder-xuyong!
相关推荐

2025-10-15
Mybatis快速入门
MyBatis 快速入门 MyBatis 的前身就是 iBatis ,是一个作用在数据持久层的对象关系映射(Object Relational Mapping,简称 ORM)框架。 什么是 MyBatisMyBatis 是一款持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生类型、接口和 Java 的 POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。 快速入门 这里,我将以一个入门级的示例来演示 Mybatis 是如何工作的。 注:本文后面章节中的原理、源码部分也将基于这个示例来进行讲解。 数据库准备在本示例中,需要针对一张用户表进行 CRUD 操作。其数据模型如下: 12345678910111213CREATE TABLE IF NOT EXISTS user ( id BIGINT(10) UNSIGNED NOT NULL AUTO_INCREMENT CO...

2025-10-15
Mybatis原理
Mybatis 原理 Mybatis 的前身就是 iBatis ,是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。本文以一个 Mybatis 完整示例为切入点,结合 Mybatis 底层源码分析,图文并茂的讲解 Mybatis 的核心工作机制。 Mybatis 生命周期 SqlSessionFactoryBuilderSqlSessionFactoryBuilder 的职责SqlSessionFactoryBuilder 负责创建 SqlSessionFactory 实例。SqlSessionFactoryBuilder 可以从 XML 配置文件或一个预先定制的 Configuration 的实例构建出 SqlSessionFactory 的实例。 Configuration 类包含了对一个 SqlSessionFactory 实例你可能关心的所有内容。 SqlSessionFactoryBuilder 应用了建造者设计模式,它有五个 build 方法,允许你通过不同的资源创建 SqlSessionFactory 实例。 12345SqlSessionFa...

2026-08-14
MyBatisPlus快速入门
官方文档https://baomidou.com/introduce/ 入门案例引入依赖12345<dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.5.3.1</version></dependency> 日志相关配置12345logging: level: com.itheima: debug # 设置项目包 com.itheima 及其子包的日志级别为 DEBUG(输出详细信息) pattern: dateformat: HH:mm:ss # 日志时间格式仅显示小时:分钟:秒(不显示毫秒和日期) 定义Mapper首先,在启动类上面配置@MapperScan(“path/xx”),用于扫描持久层。 1public interface UserMapper extends ...

2026-08-18
MyBatisPlus核心功能
条件构造器在BaseMapper中,有一些Wrapper参数的方法,这就是复杂一点的where条件查询。复杂的条件查询会用到Wrapper类,以及它的各种子类,我们常用的就是QueryWrapper、UpdateWrapper和LambdaQueryWrapper。 QueryWrapper无论是修改、删除、查询,都可以使用QueryWrapper来构建查询条件。接下来看一些例子:查询:查询出名字中带o的,存款大于等于1000元的人。代码如下: 1234567891011@Testvoid testQueryWrapper() { // 1.构建查询条件 where name like "%o%" AND balance >= 1000 QueryWrapper<User> wrapper = new QueryWrapper<User>() .select("id", "username", "info", "bal...

2026-09-04
JDK17新特性
概述 JDK 17 是继 JDK 8 之后最重要的 LTS 版本,支持至 2029 年。Spring 6.x / Spring Boot 3.x 最低要求 Java 17。 Records关键字 一个新的关键字,和class、enum一个级别。是不可变数据载体的终极方案,类似于Lombok功能。特别的是声明的时候就带有参数 解决的问题:传统 POJO/DTO/VO 需要编写私有字段、构造器、getter、equals()、hashCode()、toString() 等大量样板代码。 核心用法: 12345678// 一行代码定义一个不可变数据类public record Point(int x, int y) { }// 使用Point p = new Point(10, 20);System.out.println(p.x()); // 10(注意:是 x(),不是 getX())System.out.println(p); // Point[x=10, y=20]System.out.prin...

2025-09-25
jvm类加载
类加载机制 类是在运行期间动态加载的。 类的加载指的是将类的 .class 文件中的二进制数据读入到内存中,并转为可执行的代码的过程。 类的生命周期 Java 类的完整生命周期包括图片中这几个阶段: 加载、验证、准备、初始化和卸载这 5 个阶段的顺序是确定的,类的加载过程必须按照这种顺序按部就班地开始。而解析过程在某些情况下可以在初始化阶段之后再开始,这是为了支持 Java 的动态绑定。 类加载过程是指加载、验证、准备、解析和初始化这 5 个阶段。 (一)加载加载流程: 通过类的全限定名获取定义此类的二进制字节流 将字节流所代表的静态存储结构转换为方法区的运行时数据结构 在内存中生成一个代表该类的java.lang.Class对象 加载来源: 本地文件系统: .class文件 网络下载: Applet 压缩包: JAR、WAR文件 运行时计算生成: 动态代理 其他文件生成: JSP (二)验证验证是链接阶段的第一步。验证的目标是确保 Class 文件的字节流中包含的信息符合当前虚拟机的要求,并且不会危害虚拟机自身的安全。 验证阶段大致会完成 4 个阶段的检验动作: 文...
评论
