首页 > 其他分享 >MyBatis-Plus 的核心插件及其使用介绍

MyBatis-Plus 的核心插件及其使用介绍

时间:2024-10-09 17:19:12浏览次数:9  
标签:插件 annotation Plus MyBatis import public

MyBatis-Plus 是基于 MyBatis 的增强工具,为简化 MyBatis 的开发提供了诸多功能扩展。它的目标是减少重复代码、提高开发效率,提供了 CRUD(Create, Read, Update, Delete)操作的简化方法以及多种实用插件。以下是 MyBatis-Plus 的核心插件及其使用介绍:

1. 分页插件(PaginationInterceptor)

分页是开发中常见的需求,MyBatis-Plus 提供了简单易用的分页插件。

配置分页插件

在 Spring Boot 项目中,配置分页插件很简单:

import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class MyBatisPlusConfig {

    @Bean
    public PaginationInterceptor paginationInterceptor() {
        return new PaginationInterceptor();
    }
}
分页查询示例
// 使用Page对象进行分页查询
Page<User> page = new Page<>(1, 10);  // 第1页,每页10条数据
IPage<User> userPage = userMapper.selectPage(page, null);

selectPage方法通过 Page 对象自动封装了分页的参数。

2. 乐观锁插件(OptimisticLockerInterceptor)

乐观锁用于在更新数据时避免脏数据的出现,MyBatis-Plus 支持乐观锁插件,它主要通过版本号 version 来控制。

配置乐观锁插件
import com.baomidou.mybatisplus.extension.plugins.OptimisticLockerInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class MyBatisPlusConfig {

    @Bean
    public OptimisticLockerInterceptor optimisticLockerInterceptor() {
        return new OptimisticLockerInterceptor();
    }
}
使用乐观锁

在实体类中增加 @Version 注解标记乐观锁字段,通常是 version 字段。

import com.baomidou.mybatisplus.annotation.Version;
import lombok.Data;

@Data
public class User {
    private Long id;
    private String name;
    @Version
    private Integer version;  // 版本号
}
更新时自动处理版本号
// 假设当前version为1
User user = userMapper.selectById(1L);
user.setName("New Name");
userMapper.updateById(user);  // 执行后,version会自动更新

MyBatis-Plus 会在更新时自动检查 version,如果 version 不匹配,则更新失败。

3. 逻辑删除插件(LogicDelete)

逻辑删除是一种常见的数据处理方式,MyBatis-Plus 支持通过逻辑删除插件将删除操作转换为更新操作,使数据不会真正从数据库中删除。

配置逻辑删除插件

MyBatis-Plus 默认已经支持逻辑删除,无需额外插件配置。只需要在实体类中配置 @TableLogic 注解。

使用逻辑删除
import com.baomidou.mybatisplus.annotation.TableLogic;
import lombok.Data;

@Data
public class User {
    private Long id;
    private String name;
    @TableLogic
    private Integer deleted;  // 逻辑删除字段,1表示已删除,0表示未删除
}
调用逻辑删除
// 调用逻辑删除
userMapper.deleteById(1L);  // 实际上是更新deleted字段为1,而不是物理删除

4. 自动填充插件(MetaObjectHandler)

自动填充插件用于在插入或更新数据时,自动设置一些特定字段的值(如创建时间、更新时间)。

实现自动填充功能

首先需要自定义一个类,实现 MetaObjectHandler 接口,定义填充逻辑。

import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import org.apache.ibatis.reflection.MetaObject;
import org.springframework.stereotype.Component;

import java.time.LocalDateTime;

@Component
public class MyMetaObjectHandler implements MetaObjectHandler {

    @Override
    public void insertFill(MetaObject metaObject) {
        // 插入时自动填充字段
        this.strictInsertFill(metaObject, "createTime", LocalDateTime.class, LocalDateTime.now());
        this.strictInsertFill(metaObject, "updateTime", LocalDateTime.class, LocalDateTime.now());
    }

    @Override
    public void updateFill(MetaObject metaObject) {
        // 更新时自动填充字段
        this.strictUpdateFill(metaObject, "updateTime", LocalDateTime.class, LocalDateTime.now());
    }
}
实体类中配置自动填充字段
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField;
import lombok.Data;

import java.time.LocalDateTime;

@Data
public class User {
    private Long id;
    private String name;

    @TableField(fill = FieldFill.INSERT)
    private LocalDateTime createTime;  // 插入时自动填充

    @TableField(fill = FieldFill.INSERT_UPDATE)
    private LocalDateTime updateTime;  // 插入和更新时自动填充
}

5. SQL 性能分析插件(SqlExplainInterceptor)

为了提高开发效率和排查 SQL 问题,MyBatis-Plus 提供了 SQL 性能分析插件,可以在开发环境中输出执行的 SQL 及其消耗时间。

配置 SQL 性能分析插件
import com.baomidou.mybatisplus.extension.plugins.SqlExplainInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class MyBatisPlusConfig {

    @Bean
    public SqlExplainInterceptor sqlExplainInterceptor() {
        return new SqlExplainInterceptor();
    }
}

该插件主要用于开发环境,不建议在生产环境中使用。

6. 防止全表更新与删除插件(BlockAttackInterceptor)

MyBatis-Plus 提供了防止全表更新或删除的插件,防止误操作导致整个表的数据被更新或删除。

配置防止全表更新与删除插件
import com.baomidou.mybatisplus.extension.plugins.BlockAttackInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class MyBatisPlusConfig {

    @Bean
    public BlockAttackInterceptor blockAttackInterceptor() {
        return new BlockAttackInterceptor();
    }
}

启用后,当执行 update(null)delete(null)(即没有 where 条件)时会抛出异常。

7. 多租户插件(TenantLineInnerInterceptor)

多租户插件允许你在多租户环境中为每个 SQL 自动添加租户 ID,以实现数据隔离。

配置多租户插件
import com.baomidou.mybatisplus.extension.plugins.inner.TenantLineInnerInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class MyBatisPlusConfig {

    @Bean
    public TenantLineInnerInterceptor tenantLineInnerInterceptor() {
        return new TenantLineInnerInterceptor(new TenantLineHandler() {
            @Override
            public Expression getTenantId() {
                // 实现返回当前租户 ID 的逻辑
                return new LongValue(1L); // 例如租户 ID 为1
            }

            @Override
            public boolean ignoreTable(String tableName) {
                // 可以指定某些表不进行多租户处理
                return "user".equals(tableName);
            }
        });
    }
}

通过这些插件,MyBatis-Plus 可以显著简化开发过程,减少重复代码,提高效率,同时保障安全性和性能。如果需要使用更多插件或自定义功能,MyBatis-Plus 还提供了丰富的扩展接口供开发者使用。

标签:插件,annotation,Plus,MyBatis,import,public
From: https://blog.csdn.net/2301_78144888/article/details/142758443

相关文章

  • 富文本编辑器UEDITOR支持从WORD复制粘贴保留格式和图片的插件
    编辑器:百度ueditor前端:vue2,vue3,vue-cli,html5需求:复制粘贴word内容图片,word图片转存交互,导入pdf,导入PowerPoint(PPT)要求:开源,免费,技术支持用户体验:Ctrl+V快捷键操作该说不说,最近这块应该也是挻火的,今天早上又有网友加我微信私聊,说是想了解一下这块的技术和方案。实......
  • 20241009--Java--MyBatis-Plus快速上手(1)
     一、MyBatis-Plus是什么?MyBatis是一个流行的开源持久层框架,用于简化数据库交互。它提供了一个简单的方法来执行数据库操作,同时保留了SQL的灵活性。MyBatis曾经被称为iBatis,是一个半自动化的ORM(Object-RelationalMapping对象关系映射)框架,它允许开发者将Java对象映......
  • 铁威马新品F8 SSD Plus:假期出行的完美存储“伙伴”
    国庆小长假刚刚结束大家都去哪里玩了呢?假期出行如何安全、便捷地存储和管理大量的照片、视频和其他文件也是一个不容忽视的问题 铁威马秋季系列新品NAS的发售为我们提供了多种选择  而F8SSDPlus性能与便携的完美融合成为假期出行不可或缺的“好伙伴” F8......
  • springboot 加mybatis 配置多数据源
    案例:比如说,接口接收到的数据,放到多个数据库。1、先引入dynamic<dependency><groupId>com.baomidou</groupId><artifactId>dynamic-datasource-spring-boot-starter</artifactId><version>4.3.1</version>......
  • Spring Boot、MyBatis、MyBatis-Plus 依赖版本对应关系总结
    SpringBoot、MyBatis、MyBatis-Plus依赖版本对应关系总结在使用SpringBoot、MyBatis和MyBatis-Plus时,确保它们的依赖版本兼容是项目正常运行的关键。版本不兼容可能会导致诸如sqlSessionFactory、sqlSessionTemplate未正确配置等错误。因此,合理选择各个依赖的版本......
  • 使用标签实现MyBatis的基础操作
    目录前言1.配置MyBatis⽇志打印2.参数传递 2.1 #{}和${}区别 2.2传递多个参数 3.增删改查3.1增(Insert)3.2删(Delete)3.3改(Update) 3.4查(Select)前言 接下来我们会使用的数据表如下:对应的实体类为:UserInfoMapper所有的准备工作都在如下文章。MyBat......
  • IDEA 神器!效率爆棚的技巧和插件,你都用上了吗?
    IDEA神器!效率爆棚的技巧和插件,你都用上了吗?各位老铁们,大家好!今天咱们来聊聊程序员的“瑞士军刀”——IntelliJIDEA。这玩意儿功能太强大了,用好了简直就是如虎添翼。今天就给大家分享一些我平时开发中总结的IDEA使用技巧和超级好用的插件,保证让你效率翻倍!IDEA神级技巧,让你代......
  • Eplan插件 - 自由文本编辑器
    前言使用此插件可以快速完成对项目中的自由文本、路径功能文本的修改、删除等操作。插件介绍用户界面插件UI界面进行了更新,相比较之前的插件界面风格更清爽简洁。功能介绍插件批量将选中文本中的源文本替换为修改文本。插件支持多种选择方式,可以在绘图区选中文本,也可在......
  • 在vscode开发平台中编写HTML的基础快门键以及安装插件
    1、HTML5是HTML的第五次重大修改;2、相关快门键使用如下:   (1)放大缩小视图:放大:Ctrl和+;缩小:Ctrl和-;   (2)向上复制一行:alt+shift+......
  • AI虚拟主播生成插件中的关键代码!
    AI虚拟主播,作为新媒体领域的创新力量,正逐渐改变着我们的信息传播方式,它们不仅能够模拟真实主播的言行举止,还能通过智能算法生成个性化、高质量的内容。在这背后,离不开一套强大的生成插件,而这套插件中的关键代码则是其核心所在,今天,我们就来揭开AI虚拟主播生成插件的神秘面纱,分......