你知道 MyBatis-Plus 的有哪些 Plus 高级功能吗?

MyBatis-Plus(简称 MP)是基于 MyBatis 的增强工具,它简化了 MyBatis 的配置和开发工作,提供了更加便捷的 CRUD 操作、分页查询、条件构造等功能。除此之外,MyBatis-Plus 还提供了一些“Plus”高级功能,旨在提高开发效率,减少重复工作,增强开发体验。如果你还没有完全挖掘 MyBatis-Plus 的潜力,那么你可能会错过许多实用且高效的功能。

在这篇文章中,我们将带你一起深入了解 MyBatis-Plus 提供的几项“Plus”功能,让你在使用 MP 时能够充分发挥其优势。

1. 自动填充(Auto Fill)

自动填充功能是 MyBatis-Plus 的一个非常实用的特性,尤其在处理数据表中的创建时间、更新时间等字段时,开发者往往需要手动为这些字段赋值。通过 MyBatis-Plus 的自动填充功能,我们可以自动为指定的字段赋值,从而避免了手动赋值的繁琐。

如何配置:
  • 在实体类的字段上使用 @TableField 注解的 fill 属性,指定自动填充的策略。
  • 自定义一个实现 MetaObjectHandler 接口的类,重写 insertFillupdateFill 方法,用来实现自动填充的逻辑。
public class MyMetaObjectHandler implements MetaObjectHandler {@Overridepublic void insertFill(MetaObject metaObject) {this.strictInsertFill(metaObject, "createTime", LocalDateTime.class, LocalDateTime.now());this.strictInsertFill(metaObject, "updateTime", LocalDateTime.class, LocalDateTime.now());}@Overridepublic void updateFill(MetaObject metaObject) {this.strictUpdateFill(metaObject, "updateTime", LocalDateTime.class, LocalDateTime.now());}
}

 

自动填充字段的配置,可以避免在每次插入或更新数据时手动填写常见字段,如创建时间、更新时间等,减少了代码的重复性。

2. 逻辑删除(Logical Deletion)

在很多项目中,我们通常会使用逻辑删除来避免数据的物理删除,防止数据丢失。MyBatis-Plus 提供了内置的逻辑删除功能,只需要在实体类中标记逻辑删除字段和相应的注解,系统就能自动完成逻辑删除的操作。

如何配置:
  • 在实体类的逻辑删除字段上使用 @TableLogic 注解。
  • 在查询时,系统会自动过滤被标记为删除的数据。
public class User {@TableIdprivate Long id;@TableLogicprivate Integer deleted;  // 0 表示未删除,1 表示已删除
}

 

当进行删除操作时,MyBatis-Plus 会将删除标志(例如 deleted 字段)置为 1,而不是直接删除数据记录,从而实现逻辑删除。你还可以通过配置自定义的删除标志,或设置不同的删除策略。

3. 分页插件(Pagination Plugin)

分页是 Web 开发中一个常见的功能,MyBatis-Plus 提供了一个强大的分页插件,可以非常方便地对查询结果进行分页处理。该插件不仅支持传统的分页,还支持自动识别 SQL 中的分页语句。

如何配置:
  • application.propertiesapplication.yml 中添加分页插件配置。
  • 通过 Page 对象封装分页请求,并自动完成分页功能。
public IPage<User> selectPage(Page<User> page, QueryWrapper<User> queryWrapper) {return userMapper.selectPage(page, queryWrapper);
}

 

使用 MyBatis-Plus 的分页插件,开发者不需要手动编写分页 SQL 语句,插件会自动为你处理分页逻辑,大大提高了开发效率。

4. 自定义 SQL(Custom SQL)

MyBatis-Plus 提供了自定义 SQL 的支持,你可以在 Mapper 中使用 @Select@Insert 等注解来自定义复杂的 SQL 查询。这使得在特殊的业务场景下,你可以灵活地编写自己的 SQL,而不是受限于 MyBatis-Plus 默认的 CRUD 操作。

如何使用:
  • 通过在 Mapper 接口中使用 @Select@Update 等注解来定义自定义 SQL。
  • 你还可以使用 @ResultMap 来映射自定义查询结果。
@Mapper
public interface UserMapper {@Select("SELECT * FROM user WHERE age > #{age}")List<User> selectUsersByAge(int age);
}

自定义 SQL 功能使得 MyBatis-Plus 具备了更多的灵活性,能够适应复杂的查询需求。

5. 代码生成器(Code Generator)

MyBatis-Plus 提供了代码生成器,可以根据数据库表结构自动生成实体类、Mapper 接口、XML 映射文件等代码。这个功能能够大大提高开发效率,尤其是在项目初期,开发者可以通过自动生成的代码快速搭建起基本的持久层结构。

如何使用:
  • 配置代码生成器的相关参数,指定数据库连接、包路径等信息。
  • 通过执行代码生成命令,自动生成相关代码。
AutoGenerator mpg = new AutoGenerator();// 数据源配置
DataSourceConfig dsc = new DataSourceConfig();
dsc.setUrl("jdbc:mysql://localhost:3306/mydb");
dsc.setDriverName("com.mysql.cj.jdbc.Driver");
dsc.setUsername("root");
dsc.setPassword("password");
mpg.setDataSource(dsc);// 包配置
PackageConfig pc = new PackageConfig();
pc.setParent("com.example");
mpg.setPackageInfo(pc);// 执行生成
mpg.execute();

 

使用代码生成器可以节省大量的开发时间,减少了重复的代码编写,让开发者能集中精力在业务逻辑上。

6. 多租户支持(Multi-Tenant)

MyBatis-Plus 还支持多租户功能,对于需要支持多租户的 SaaS 项目,这个功能非常有用。通过配置租户字段和租户策略,MyBatis-Plus 会自动处理多租户数据的隔离和查询。

如何配置:
  • application.propertiesapplication.yml 中配置多租户的策略。
  • 设置租户字段,用于区分不同租户的数据。
public class TenantHandler implements TenantLineHandler {@Overridepublic String getTenantId() {return TenantContext.getTenantId();  // 获取当前租户 ID}@Overridepublic String getTenantIdColumn() {return "tenant_id";}
}

 

多租户功能使得 MyBatis-Plus 在开发 SaaS 应用时,能够高效地管理不同租户的数据,避免数据泄漏。

7. 性能分析(Performance Analysis)

MyBatis-Plus 提供了性能分析插件,帮助开发者在开发阶段分析 SQL 的执行效率。通过配置性能分析插件,开发者可以在控制台输出 SQL 执行的时间、语句的执行计划等信息,方便进行性能调优。

如何使用:
  • 在配置文件中启用性能分析插件。
  • 根据日志输出信息,分析 SQL 性能,找到可能的性能瓶颈。
public class PerformanceInterceptor extends Interceptor {@Overridepublic Object intercept(Invocation invocation) throws Throwable {// 输出 SQL 执行的时间return invocation.proceed();}
}

通过性能分析,开发者可以及时发现 SQL 执行中的问题,并优化查询语句,提高系统性能。

结语

MyBatis-Plus 通过提供一系列“Plus”高级功能,极大地提升了开发效率并简化了代码的复杂性。自动填充、逻辑删除、分页插件、自定义 SQL、代码生成器、多租户支持和性能分析等功能,使得 MyBatis-Plus 成为一个非常适合快速开发和高效维护的工具。如果你还没有充分利用这些“Plus”功能,那么不妨在项目中尝试一下,提升你的开发体验和工作效率。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/8952.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

stm8开发笔记--STVD开发软件的安装

文章目录 1 开发软件安装1.1 安装软件1.2 编译器下载安装1.2.1 下载编译器1.2.2 安装1.2.3 添加密钥 1.3 编译器地址配置 2 编程开发2.1 下载软件开发包2.2 解压&#xff0c;打开工程2.3 选择对应芯片2.4 点击重新编译&#xff0c;不要有错误2.5 如果提示你&#xff0c;需要加载…

RNN天气预测

本文为为&#x1f517;365天深度学习训练营内部文章 原作者&#xff1a;K同学啊 与上篇一样&#xff0c;依然是二维数据结构。这里通过构建基础的网络块来做天气类别的预测&#xff0c;网络如下&#xff1a; 预测是否下雨# 1.搭建神经网络 model Sequential() # 添加第一密集…

Elasticsearch如果集群出现节点故障,我应该如何快速定位问题?

当 Elasticsearch (ES) 集群发生故障时&#xff0c;快速定位问题源头非常重要。Elasticsearch 是一个分布式系统&#xff0c;故障可能由多种原因引起&#xff0c;涉及到硬件、配置、网络、集群本身的健康状况等多个层面。以下是一些定位问题的步骤和工具&#xff1a; 检查集群…

科研绘图系列:R语言热图和点图(heatmap dotplot)

禁止商业或二改转载,仅供自学使用,侵权必究,如需截取部分内容请后台联系作者! 文章目录 介绍加载R包准备画图主题数据链接导入数据热图1热图2其他图1其他图2系统信息介绍 热图(Heatmap)是一种数据可视化技术,用于通过颜色的变化来展示数据矩阵中的数值大小。它通常由行和…

【Leecode】Leecode刷题之路第44天之通配符匹配

题目出处 44-通配符匹配-题目出处 题目描述 个人解法 思路&#xff1a; todo代码示例&#xff1a;&#xff08;Java&#xff09; todo复杂度分析 todo官方解法 44-通配符匹配-官方解法 前言 本题与10. 正则表达式匹配非常类似&#xff0c;但相比较而言&#xff0c;本题稍…

智象未来(HiDream.ai):从科技创新启程,绘制智能未来新篇章

在人工智能领域飞速演进的当下&#xff0c;智象未来&#xff08;HiDream.ai&#xff09;作为全球领先的多模态生成式人工智能技术供应商&#xff0c;正以其独树一帜的视觉多模态大模型及创新应用&#xff0c;推动行业趋势的前进。智象未来&#xff08;HiDream.ai&#xff09;自…

用 Python搭建一个微型的HTTP服务器用于传输 2024/11/9

使用内置的 http.server 模块,来搭建微型服务器。 快速启动服务器http.server --- HTTP 服务器Python 3.13.0 文档 声明:文章代码部分 由 ai 生成 创建一个简单的文件共享服务器 进入 需要共享的目录 再打开cmd 输入以下代码 python -m http.server 8000 打开服务器 设置主…

【分布式事务】二、NET8分布式事务实践: DotNetCore.CAP 框架 、 消息队列(RabbitMQ)、 数据库(MySql、MongoDB)

介绍 [CAP]是一个用来解决微服务或者分布式系统中分布式事务问题的一个开源项目解决方案, 同样可以用来作为 EventBus 使用 github地址:https://github.com/dotnetcore/CAP官网地址: https://cap.dotnetcore.xyz/官网文档:https://cap.dotnetcore.xyz/userguide/zh/cap/id…

【Syncfusion系列】Diagram 杂谈第一篇

前言 我认为 Diagram 是 Syncfusion 中首屈一指的优秀控件&#xff01;最近在写一个工作流引擎&#xff0c;前端界面就用的是Diagram &#xff0c;接下来就来看一看。 Diagram的事件 查看 SfDiagram的属性&#xff0c;如果想实现什么事件&#xff0c;就看这些Command结尾的…

【服务器】使用命令行文本编辑器(如 vim、nano 或 vi)创建文件并编辑

【服务器】使用命令行文本编辑器&#xff08;如 vim、nano 或 vi&#xff09;创建文件并编辑 准备&#xff1a;连接至服务器&#xff08;如ssh&#xff09;创建 .ncl 文件方法 1: 使用 vim 创建 .ncl 文件方法 2: 使用 nano 创建 .ncl 文件确认文件已创建运行 .ncl 文件 总结参…

[DB] Project-1-MySQL

下载并安装了MySQL-8.0.40 root; 密码为6位 MySQL安装教程&#xff08;详细版&#xff09;_mysql安装教程8.0.36-CSDN博客 解决&#xff1a;管理员身份运行cmd出现mysql : 无法将“mysql”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写&#xff0c;…

【JavaEE进阶】导读

本节⽬标 了解什么是JavaEE 在JavaEE中, 我们学习什么, 如何学, 难点是什么 一、Java EE 发展历程 Java EE(Java Platform Enterprise Edition), Java 平台企业版. 是JavaSE的扩展, ⽤于解决企业级的开发需求, 所以也可以称之为是⼀组⽤于企业开发的Java技术标准. 所以, 学习…

.NET 黑名单上传 突破WAF防护的SoapShell (免杀版)

01阅读须知 此文所提供的信息只为网络安全人员对自己所负责的网站、服务器等&#xff08;包括但不限于&#xff09;进行检测或维护参考&#xff0c;未经授权请勿利用文章中的技术资料对任何计算机系统进行入侵操作。利用此文所提供的信息而造成的直接或间接后果和损失&#xf…

多线程和线程同步复习

多线程和线程同步复习 进程线程区别创建线程线程退出线程回收全局写法传参写法 线程分离线程同步同步方式 互斥锁互斥锁进行线程同步 死锁读写锁api细说读写锁进行线程同步 条件变量生产者消费者案例问题解答加强版生产者消费者 总结信号量信号量实现生产者消费者同步-->一个…

MySQL_第13章_视图

1. 常见的数据库对象 2. 视图概述 2.1 为什么使用视图&#xff1f; 视图一方面可以使用表的一部分而不是所有的表&#xff0c;另一方面也可以针对不同的用户制定不同的查询视图。 2.2 视图的理解 视图是一种虚拟表&#xff0c;本身是不具有数据的&#xff0c;占用很少的内存…

Python数据分析-Netflix数据分析和可视化

一、研究背景 在当今时代&#xff0c;流媒体技术迅猛发展&#xff0c;如风暴般席卷全球娱乐产业&#xff0c;重塑了大众的娱乐消费模式。Netflix 在这一潮流中一马当先&#xff0c;成为全球首屈一指的在线流媒体平台。自 2007 年开启流媒体服务后&#xff0c;Netflix 就马不停…

数据集市是什么?有什么优势?

一、数据集市是什么&#xff1f; 1、数据集市的产生背景&#xff1a; 因为数据仓库的工作范围和成本比较巨大&#xff0c;技术部门必须对所有的以全企业的眼光对待任何一次决策分析&#xff0c;这样就变成了成本高、耗时高的大项目&#xff0c;而且这种集中式的数据处理方式往往…

Cross Modal Transformer: Towards Fast and Robust 3D Object Detection

代码地址 https://github.com/junjie18/CMT 1. 引言 在本文中&#xff0c;我们提出了Cross-Modal Transformer&#xff08;CMT&#xff09;&#xff0c;这是一种简单而有效的端到端管道&#xff0c;用于鲁棒的3D对象检测&#xff08;见图1&#xff08;c&#xff09;&#xf…

Oracle数据库 查看SQL执行计划的几种方法

前言 在日常的运维工作中&#xff0c;SQL优化是DBA的进阶技能&#xff0c;SQL优化的前提是要看SQL的执行计划是否正确&#xff0c;下面分享几种查看执行计划的方法&#xff0c;每一种方法都各有各的好处&#xff0c;可以根据特定场景选择某种方法。 一.使用AUTOTRACE查看执行…

简单介绍Nginx服务器的反向代理、负载均衡

欢迎来到“雪碧聊技术”CSDN博客&#xff01; 在这里&#xff0c;您将踏入一个专注于Java开发技术的知识殿堂。无论您是Java编程的初学者&#xff0c;还是具有一定经验的开发者&#xff0c;相信我的博客都能为您提供宝贵的学习资源和实用技巧。作为您的技术向导&#xff0c;我将…