首页 > 其他分享 >17个Mybatis Plugs注解:Mybatis Plugs插件架构设计与注解案例(必须收藏)

17个Mybatis Plugs注解:Mybatis Plugs插件架构设计与注解案例(必须收藏)

时间:2024-09-10 19:52:04浏览次数:3  
标签:插件 MyBatis Plus SQL Mybatis 注解 Plugs public

在这里插入图片描述

MyBatis Plugins框架提供了一种强大而灵活的机制,允许开发者通过实现Interceptor接口来扩展MyBatis的核心功能。这种插件化的方法无需修改MyBatis源码,即可引入诸如性能监控、日志记录、数据加密、查询缓存等额外功能。通过注解如@Intercepts、@Signature等,开发者可以精确地指定插件的介入点和行为,从而在MyBatis的数据处理流程中嵌入自定义逻辑。这种设计不仅增强了MyBatis的可定制性,也使得数据库交互更加高效和安全。MyBatis Plugins框架的引入,为构建高度可维护和可扩展的数据访问层提供了坚实的基础。

肖哥弹架构 跟大家“弹弹” 框架注解使用,需要代码关注

欢迎 点赞,关注,评论。

关注公号Solomon肖哥弹架构获取更多精彩内容

历史热点文章

mybatis 插件架构图

在这里插入图片描述

在这个架构图中:

  • MyBatis 框架 是核心,提供了一系列的拦截点。
  • 拦截点 定义了插件可以介入的关键步骤。
  • 插件接口 是开发者实现自定义逻辑的接口。
  • 插件链 表示多个插件按照注册顺序形成的链。
  • 执行流程 展示了MyBatis执行过程中插件的调用顺序。
  • 自定义插件 表示具体的插件实现,如性能监控、日志记录等。

1. 实体映射注解

@TableName
  • 注解作用介绍

用于将实体类与数据库表进行映射,指定实体类对应的数据库表名。

  • 注解属性介绍
    • value: 指定实体类对应的数据库表名。
  • 注解业务案例
@TableName("user_table")
public class User {
    @TableId
    private Long id;
    private String name;
    // 其他字段和方法
}
  • 注解使用效果: 使用@TableName后,MyBatis Plus会将User实体映射到数据库中的user_table表。
@TableId
  • 注解作用介绍

用于标识实体类中与数据库表的主键列对应的字段,并指定主键的生成策略。

  • 注解属性介绍
    • value: 指定主键字段名。
    • type: 指定主键生成策略。
  • 注解业务案例
public class User {
    @TableId(type = IdType.AUTO)
    private Long id;
    private String name;
    // 其他字段和方法
}
  • 注解使用效果: 使用@TableId后,MyBatis Plus会将User实体的id字段作为主键,并且使用自动增长策略。
@TableField
  • 注解作用介绍

用于将实体类中的非主键字段与数据库表的列名进行映射,特别是当字段名与数据库列名不一致时。

  • 注解属性介绍
    • value: 指定数据库表的列名。
    • exist: 指定字段是否存在于数据库表中。
  • 注解业务案例
public class User {
    private Long id;
    @TableField("user_name")
    private String name;
    // 其他字段和方法
}
  • 注解使用效果: 使用@TableField后,MyBatis Plus会将User实体的name字段映射到数据库中的user_name列。

2. 乐观锁和逻辑删除注解

@Version
  • 注解作用介绍

用于实现乐观锁机制,通过版本号避免数据的并发冲突。

  • 注解属性介绍

无特定属性。

  • 注解业务案例
public class User {
    private Long id;
    private String name;
    @Version
    private Integer version;
    // 其他字段和方法
}
  • 注解使用效果: 使用@Version后,MyBatis Plus会在更新操作时检查版本号,确保数据的一致性。
@TableLogic
  • 注解作用介绍

用于实现逻辑删除,通过标记字段的值来实现记录的逻辑删除而非物理删除。

  • 注解属性介绍
    • value: 指定逻辑未删除的值。
    • delval: 指定逻辑删除的值。
  • 注解业务案例
public class User {
    private Long id;
    private String name;
    @TableLogic(value = "0", delval = "1")
    private Integer deleted;
    // 其他字段和方法
}
  • 注解使用效果: 使用@TableLogic后,MyBatis Plus会在查询、更新和删除操作时考虑deleted字段的值,实现逻辑删除。

3. 批量操作注解

@InsertBatch
  • 注解作用介绍

用于批量插入数据,提高数据插入的效率。

  • 注解属性介绍

无特定属性。

  • 注解业务案例
public interface UserMapper {
    @InsertBatch
    int insertBatchSelective(List<User> users);
}
  • 注解使用效果: 使用@InsertBatch后,MyBatis Plus会一次性插入多个User实体,提高插入效率。
@UpdateBatch
  • 注解作用介绍

用于批量更新数据,提高数据更新的效率。

  • 注解属性介绍

无特定属性。

  • 注解业务案例
public interface UserMapper {
    @UpdateBatch
    int updateBatchSelective(List<User> users);
}
  • 注解使用效果: 使用@UpdateBatch后,MyBatis Plus会一次性更新多个User实体,提高更新效率。
@DeleteBatch
  • 注解作用介绍

用于批量删除数据,提高数据删除的效率。

  • 注解属性介绍

无特定属性。

  • 注解业务案例
public interface UserMapper {
    @DeleteBatch
    int deleteBatchSelective(List<Long> ids);
}
  • 注解使用效果: 使用@DeleteBatch后,MyBatis Plus会一次性删除多个User实体,提高删除效率。

4. SQL解析器配置注解

@SqlParserConfig
  • 注解作用介绍

用于配置SQL解析器,如过滤参数等。

  • 注解属性介绍
    • value: 指定SQL解析器的配置。
  • 注解业务案例
public interface UserMapper {
    @SqlParserConfig(filterParams = true)
    List<User> selectUsers();
}
  • 注解使用效果: 使用@SqlParserConfig后,MyBatis Plus会根据配置过滤参数,优化SQL解析过程。
@SqlParserCustomize
  • 注解作用介绍

用于自定义SQL解析器的行为。

  • 注解属性介绍
    • value: 指定自定义SQL解析器的类。
  • 注解业务案例
public interface UserMapper {
    @SqlParserCustomize(MyCustomSqlParser.class)
    List<User> selectUsers();
}
  • 注解使用效果: 使用@SqlParserCustomize后,MyBatis Plus会使用自定义的SQL解析器处理SQL语句。
@SqlParserCount
  • 注解作用介绍

用于标记查询总数的SQL语句。

  • 注解属性介绍
    • value: 指定查询总数的SQL语句。
  • 注解业务案例
public interface UserMapper {
    @SqlParserCount("SELECT COUNT(*) FROM users")
    int countUsers();
}
  • 注解使用效果: 使用@SqlParserCount后,MyBatis Plus会执行指定的SQL语句来获取记录总数。
@SqlParserIgnore
  • 注解作用介绍

用于标记忽略SQL解析器的解析。

  • 注解属性介绍
    • value: 指定是否忽略解析。
  • 注解业务案例
public interface UserMapper {
    @SqlParserIgnore
    List<User> selectUsers();
}
  • 注解使用效果: 使用@SqlParserIgnore后,MyBatis Plus会忽略对指定方法的SQL解析,直接执行SQL语句。
@SqlParserFilter
  • 注解作用介绍

用于标记SQL解析过滤器,过滤不需要进行SQL解析的SQL语句。

  • 注解属性介绍
    • value: 指定SQL解析过滤器的类。
  • 注解业务案例
public interface UserMapper {
    @SqlParserFilter(MySqlParserFilter.class)
    List<User> selectUsers();
}
  • 注解使用效果: 使用@SqlParserFilter后,MyBatis Plus会根据过滤器过滤不需要解析的SQL语句。
@SqlParserOrder
  • 注解作用介绍

用于标记SQL解析器的执行顺序。

  • 注解属性介绍
    • value: 指定执行顺序。
  • 注解业务案例
public interface UserMapper {
    @SqlParserOrder(1)
    List<User> selectUsers();
}
  • 注解使用效果: 使用@SqlParserOrder后,MyBatis Plus会根据指定的顺序执行SQL解析器。

5. 查询排序注解

@OrderBy
  • 注解作用介绍

用于指定实体类中的字段在执行查询操作时的默认排序方式。

  • 注解属性介绍
    • value: 指定排序字段和顺序。
  • 注解业务案例
public interface UserMapper {
    @OrderBy("age DESC")
    List<User> selectUsers();
}
  • 注解使用效果: 使用@OrderBy后,MyBatis Plus会按照指定的字段和顺序对查询结果进行排序。

5. MyBatis Plugins 设计目的:

  1. 扩展性:MyBatis 作为一个成熟的持久层框架,其核心设计哲学之一是提供足够的扩展性。Plugins 机制允许开发者在不修改MyBatis源码的前提下,通过实现自定义逻辑来扩展框架的功能。
  2. 解耦:通过插件化,可以将特定的业务逻辑或通用功能与MyBatis核心代码解耦,使得框架更加灵活,便于维护和升级。
  3. 复用性:插件可以被多个项目或模块复用,这样开发者可以共享和重用代码,减少重复工作,提高开发效率。
  4. 定制化:不同的项目可能需要不同的数据处理策略,如日志记录、性能监控、数据加密等。Plugins 机制提供了一种方式来定制这些策略,而无需更改MyBatis的默认行为。
  5. 社区驱动:MyBatis 拥有一个活跃的开源社区,Plugins 机制鼓励社区成员贡献自己的插件,从而丰富了整个生态系统。
  6. 简化开发:某些常见的任务,如分页查询、缓存管理等,可以通过插件来简化开发过程,开发者无需在每个项目中重复编写相同的代码。
  7. 性能优化:通过插件,开发者可以对MyBatis的执行流程进行优化,如减少数据库访问次数、优化SQL执行计划等,从而提高应用的性能。
  8. 安全性增强:插件可以用来实施安全措施,如防止SQL注入、敏感数据脱敏等,增强应用程序的安全性。

6. MyBatis Plugins 综合性使用案例

1. 创建性能监控插件

首先,我们创建一个插件类,它实现了MyBatis的Interceptor接口:

import org.apache.ibatis.executor.statement.StatementHandler;
import org.apache.ibatis.plugin.*;

import java.sql.Statement;
import java.util.Properties;

@Intercepts({
    @Signature(
        type = StatementHandler.class,
        method = "prepare",
        args = {Statement.class}
    )
})
public class PerformanceMonitorPlugin implements Interceptor {
    private long startTime;
    private long endTime;

    @Override
    public Object intercept(Invocation invocation) throws Throwable {
        startTime = System.currentTimeMillis();
        try {
            return invocation.proceed();
        } finally {
            endTime = System.currentTimeMillis();
            long executeTime = endTime - startTime;
            System.out.println("Execute Time : " + executeTime + " ms");
        }
    }

    @Override
    public Object plugin(Object target) {
        return Plugin.wrap(target, this);
    }

    @Override
    public void setProperties(Properties properties) {
        // 设置插件属性
    }
}

2. 配置MyBatis使用插件

接下来,我们需要在MyBatis配置文件中注册这个插件:

<configuration>
    <plugins>
        <plugin interceptor="com.example.PerformanceMonitorPlugin"/>
    </plugins>
    <!-- 其他MyBatis配置 -->
</configuration>

3. 创建日志记录插件

我们还可以创建另一个插件来记录所有SQL查询:

import org.apache.ibatis.executor.statement.StatementHandler;
import org.apache.ibatis.plugin.*;

import java.sql.Statement;
import java.util.Properties;

@Intercepts({
    @Signature(
        type = StatementHandler.class,
        method = "query",
        args = {}
    )
})
public class LoggingPlugin implements Interceptor {
    @Override
    public Object intercept(Invocation invocation) throws Throwable {
        Statement statement = (Statement) invocation.getTarget();
        System.out.println("Executing SQL: " + statement.toString());
        return invocation.proceed();
    }

    @Override
    public Object plugin(Object target) {
        return Plugin.wrap(target, this);
    }

    @Override
    public void setProperties(Properties properties) {
        // 设置插件属性
    }
}

4. 注册日志记录插件

在MyBatis配置文件中注册日志记录插件:

<configuration>
    <plugins>
        <plugin interceptor="com.example.LoggingPlugin"/>
    </plugins>
    <!-- 其他MyBatis配置 -->
</configuration>

5. 使用MyBatis进行数据库操作

现在,当我们使用MyBatis执行数据库操作时,我们的插件会自动记录性能数据和SQL查询:

public interface UserMapper {
    @Select("SELECT * FROM users")
    List<User> findAllUsers();
}

标签:插件,MyBatis,Plus,SQL,Mybatis,注解,Plugs,public
From: https://blog.csdn.net/alises1314/article/details/142107659

相关文章

  • 23个Mybatis注解:Mybatis架构分析与注解案例(必须收藏)
    MyBatis是一款优秀的持久层框架,它通过提供数据访问对象(DAO)和数据访问层(DAL)的抽象,简化了数据库交互的复杂性。利用注解如@Select、@Insert、@Update、@Delete,MyBatis支持定制化SQL、存储过程以及高级映射,使得开发者能够灵活地处理数据库操作。其核心特性包括动态SQL构......
  • 线程池以及详解使用@Async注解异步处理方法
    目录一.什么是线程池:二.使用线程池的好处:三.线程池的使用场景:四.使用线程池来提高Springboot项目的并发处理能力:1.在application.yml配置文件中配置:2.定义配置类来接受配置文件内的属性值:3.启用异步支持:4.实例: 五.详细解析@Async注解的使用:1.@Async注解作用:2.@Asyn......
  • Mybatis踩坑记录:探究Mybatis源码为何当传入参数Integer类型为0时,if条件生效
    目录前言 ​编辑问题背景 深入源码 解决问题方案一方案二方案三 结果结语前言在MyBatis中,<if>标签用于动态生成SQL查询条件。然而,在一些特定的场景下,<if>标签的条件判断可能会出现意料之外的结果。例如,当传入的Integer参数为0时,条件判断可能不会如......
  • springboot+vue+mybatis计算机毕业设计老年人健康管理系统+PPT+论文+讲解+售后
    近些年来,随着科技的飞速发展,互联网的普及逐渐延伸到各行各业中,给人们生活带来了十分的便利,老年人健康管理系统利用计算机网络实现信息化管理,使整个老年人健康管理的发展和服务水平有显著提升。本文拟采用Eclipse开发工具,JSP技术,SSM框架进行开发,后台使用MySQL数据库进行信息......
  • springboot+vue+mybatis计算机毕业设计网上购物系统+PPT+论文+讲解+售后
    本文首先实现了网上购物系统设计与实现管理技术的发展随后依照传统的软件开发流程,最先为系统挑选适用的言语和软件开发平台,依据需求分析开展控制模块制做和数据库查询构造设计,随后依据系统整体功能模块的设计,制作系统的功能模块图、E-R图。随后,设计框架,依据设计的框架撰写编码......
  • mybatis常见面试题
    mybatis常见面试题#{}和${}的区别是什么?Mybatis在处理#{}时,会将sql中的#{}替换为?号,调用PreparedStatement的set方法来赋值;能够防止sql注入.Mybatis在处理\({}时,就是把\){}替换成变量的值。mybatis的一级缓存和二级缓存https://www.bilibili.com/video/BV1sM4m1f7L1/?......
  • Mybatis骚操作-通用查询工具类
    老项目大多都有对JDBC进行了封装,可以直接执行SQL的工具类,在做项目升级改造的时候(这里仅指整合mybatis),要么全部调整成dao-xml的形式(会有改动代码多的问题,而且看代码时需要xml和java来回切换),要么维持原逻辑不改动(跟mybatis基本无关,同样难以用到mybatis的配置)这里实现个可以让工具使......
  • mybatis plus 常用知识汇总(保姆级教程!~)
    介绍:MyBatis-Plus是基于MyBatis框架的一个增强工具,主要目的是简化MyBatis的开发过程,提供更加简洁、方便的CRUD操作。它是在保留MyBatis强大功能的基础上,通过封装和优化一些常见操作来提高开发效率。MyBatis-Plus提供了许多开箱即用的功能,包括自动CRUD代码生成、分页......
  • mybatis plus 常用知识汇总(保姆级教程!~)
    介绍:MyBatis-Plus是基于MyBatis框架的一个增强工具,主要目的是简化MyBatis的开发过程,提供更加简洁、方便的CRUD操作。它是在保留MyBatis强大功能的基础上,通过封装和优化一些常见操作来提高开发效率。MyBatis-Plus提供了许多开箱即用的功能,包括自动CRUD代码生成......
  • SpringBoot集成MyBatis-Plus
    初始化SpringBoot项目(添加Lombok和MySQLDriver依赖)  关键依赖包:<?xmlversion="1.0"encoding="UTF-8"?><projectxmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xs......