百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 编程网 > 正文

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

yuyutoo 2024-10-12 00:02 7 浏览 0 评论

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 还提供了丰富的扩展接口供开发者使用。

相关推荐

ETCD 故障恢复(etc常见故障)

概述Kubernetes集群外部ETCD节点故障,导致kube-apiserver无法启动。...

在Ubuntu 16.04 LTS服务器上安装FreeRADIUS和Daloradius的方法

FreeRADIUS为AAARadiusLinux下开源解决方案,DaloRadius为图形化web管理工具。...

如何排查服务器被黑客入侵的迹象(黑客 抓取服务器数据)

---排查服务器是否被黑客入侵需要系统性地检查多个关键点,以下是一份详细的排查指南,包含具体命令、工具和应对策略:---###**一、快速初步检查**####1.**检查异常登录记录**...

使用 Fail Ban 日志分析 SSH 攻击行为

通过分析`fail2ban`日志可以识别和应对SSH暴力破解等攻击行为。以下是详细的操作流程和关键分析方法:---###**一、Fail2ban日志位置**Fail2ban的日志路径因系统配置...

《5 个实用技巧,提升你的服务器安全性,避免被黑客盯上!》

服务器的安全性至关重要,特别是在如今网络攻击频繁的情况下。如果你的服务器存在漏洞,黑客可能会利用这些漏洞进行攻击,甚至窃取数据。今天我们就来聊聊5个实用技巧,帮助你提升服务器的安全性,让你的系统更...

聊聊Spring AI Alibaba的YuQueDocumentReader

序本文主要研究一下SpringAIAlibaba的YuQueDocumentReaderYuQueDocumentReader...

Mac Docker环境,利用Canal实现MySQL同步ES

Canal的使用使用docker环境安装mysql、canal、elasticsearch,基于binlog利用canal实现mysql的数据同步到elasticsearch中,并在springboo...

RustDesk:开源远程控制工具的技术架构与全场景部署实战

一、开源远程控制领域的革新者1.1行业痛点与解决方案...

长安汽车一代CS75Plus2020款安装高德地图7.5

不用破解原车机,一代CS75Plus2020款,安装车机版高德地图7.5,有红绿灯读秒!废话不多讲,安装步骤如下:一、在拨号状态输入:在电话拨号界面,输入:*#518200#*(进入安卓设置界面,...

Zookeeper使用详解之常见操作篇(zookeeper ui)

一、Zookeeper的数据结构对于ZooKeeper而言,其存储结构类似于文件系统,也是一个树形目录服务,并通过Key-Value键值对的形式进行数据存储。其中,Key由斜线间隔的路径元素构成。对...

zk源码—4.会话的实现原理一(会话层的基本功能是什么)

大纲1.创建会话...

Zookeeper 可观测性最佳实践(zookeeper能够确保)

Zookeeper介绍ZooKeeper是一个开源的分布式协调服务,用于管理和协调分布式系统中的节点。它提供了一种高效、可靠的方式来解决分布式系统中的常见问题,如数据同步、配置管理、命名服务和集群...

服务器密码错误被锁定怎么解决(服务器密码错几次锁)

#服务器密码错误被锁定解决方案当服务器因多次密码错误导致账户被锁定时,可以按照以下步骤进行排查和解决:##一、确认锁定状态###1.检查账户锁定状态(Linux)```bash#查看账户锁定...

zk基础—4.zk实现分布式功能(分布式zk的使用)

大纲1.zk实现数据发布订阅...

《死神魂魄觉醒》卡死问题终极解决方案:从原理到实战的深度解析

在《死神魂魄觉醒》的斩魄刀交锋中,游戏卡死犹如突现的虚圈屏障,阻断玩家与尸魂界的连接。本文将从技术架构、解决方案、预防策略三个维度,深度剖析卡死问题的成因与应对之策,助力玩家突破次元壁障,畅享灵魂共鸣...

取消回复欢迎 发表评论: