MyBatisPlus从零到一:快速入门与核心功能详解(4)

米饭6个月前行业资讯379

三、扩展功能

3.1 代码生成插件:

在使用MybatisPlus以后,基础的Mapper、Service、PO代码相对固定,重复编写也比较麻烦。因此MybatisPlus官方提供了代码生成器根据数据库表结构生成PO、Mapper、Service等相关代码。只不过代码生成器同样要编码使用,也很麻烦。


这里推荐大家使用一款MybatisPlus的插件,它可以基于图形化界面完成MybatisPlus的代码生成,非常简单。


3.1.1 安装插件:

在Idea的 plugins 市场中搜索并安装MyBatisPlus插件:

在这里插入图片描述

然后记得重启 IDEA。

3.1.2 使用演示:

首先需要配置数据库地址,在 Idea 顶部菜单中,找到tools,选择Config Database

image-20241109212533553 在弹出的窗口中填写数据库连接的基本信息:

image-20241109212351008

点击 OK 保存。

然后再次点击 IDEA 顶部菜单中的 tools,然后选择Code Generator

image-20241109212620168

在弹出的表单中填写信息:

image-20241109213050055

最终,代码自动生成到指定的位置了。


3.2 静态工具类:

有的时候 Service 之间也会相互调用,为了避免出现循环依赖问题,MybatisPlus 提供一个静态工具类:Db,其中的一些静态方法与IService中方法签名基本一致(大多数需要多传递一个,数据库对应实体类的字节码),也可以帮助我们实现 CRUD 功能:

image-20241109213213879

示例:

@Test
void testDbGet() {
    User user = Db.getById(1L, User.class);
    System.out.println(user);
}

@Test
void testDbList() {
    // 利用Db实现复杂条件查询
    List<User> list = Db.lambdaQuery(User.class)
            .like(User::getUsername, "o")
            .ge(User::getBalance, 1000)
            .list();
    list.forEach(System.out::println);
}

@Test
void testDbUpdate() {
    Db.lambdaUpdate(User.class)
            .set(User::getBalance, 2000)
            .eq(User::getUsername, "Rose");
}


3.3 逻辑删除

对于一些比较重要的数据,我们往往会采用逻辑删除的方案,即:


在表中添加一个字段标记数据是否被删除

当删除数据时把标记置为 true

查询时过滤掉标记为 true 的数据

一旦采用了逻辑删除,所有的查询和删除逻辑都要跟着变化(原先没有采用逻辑删除),非常麻烦。


为了解决这个问题,MybatisPlus 就添加了对逻辑删除的支持。


注意:只有MybatisPlus生成的SQL语句才支持自动的逻辑删除,自定义SQL需要自己手动处理逻辑删除。


具体操作如下:


首先需要给表和对应的实体类添加对应的逻辑删除字段。


接下来,我们要在application.yml中配置逻辑删除字段:(对 Mybatis 的版本有要求,大于 3.3.0)

mybatis-plus:
  global-config:
    db-config:
      logic-delete-field: deleted # 全局逻辑删除的实体字段名(since 3.3.0,配置后可以忽略不配置步骤2)
      logic-delete-value: 1 # 逻辑已删除值(默认为 1)
      logic-not-delete-value: 0 # 逻辑未删除值(默认为 0)

测试代码如下:

@Test
void testDeleteById(){
    Db.removeById(60L, Address.class);
}

代码执行结果如下:

3da477ff89bfc6a5099fc8357e1b2d5b.png

综上, 开启了逻辑删除功能以后,我们就可以像普通删除一样做 CRUD,基本不用考虑代码逻辑问题。还是非常方便的。


注意:


逻辑删除本身也有自己的问题,比如:


会导致数据库表垃圾数据越来越多,从而影响查询效率。

SQL 中全都需要对逻辑删除字段做判断,影响查询效率。

因此,如果数据不能删除,可以采用把数据迁移到其它表的方法。


本文系转载,版权归原作者所有,如若侵权请联系我们进行删除!  

云掣基于多年在运维领域的丰富时间经验,编写了《云运维服务白皮书》,欢迎大家互相交流学习:

《云运维服务白皮书》下载地址:https://fs80.cn/v2kbbq

想了解更多大数据运维托管服务、数据库运维托管服务、应用系统运维托管服务的的客户,欢迎点击云掣官网沟通咨询:https://yunche.pro/?t=shequ


相关文章

Linux 配置Tomcat环境(二)

Linux 配置Tomcat环境(二)

二、配置Tomcat1、创建一个Tomcat文件夹用于存放Tomcat压缩包输入指令 cd /usr/local 进入到 usr/local输入指令 ls 查看...

什么是 SRE?一文详解 SRE 运维体系

什么是 SRE?一文详解 SRE 运维体系

可观测性系统在任何有一定规模的企业内部,一旦推行起来整个SRE的运维模式,那么对于可观测性系统的建设将变得尤为重要,而在整个可观测性系统中,通常我们会分为如下三个方面:指标监控:即各种指标监控,比如基...

Docker:容器化和虚拟化

Docker:容器化和虚拟化

虚拟化虚拟化是一种资源管理技术,它将计算机的各种实体资源(如CPU、内存、磁盘空间、网络适配器等)予以抽象、转换后呈现出来,并可供分割、组合为一个或多个电脑配置环境。这些资源的新虚拟部分是不受现有资源...

【Docker】1.Docker的前身LXC

【Docker】1.Docker的前身LXC

LXC简介:Linux Containers ,一种操作系统层虚拟化技术,为Linux内核容器功能的一个用户空间接口。将应用软件系统打包成一个软件容器内涵应用软件本身的代码,操作系统核心和库...

Linux CGroup资源限制(概念&限制进程CPU使用)

Linux CGroup资源限制(概念&限制进程CPU使用)

Linux CGroup资源限制(详解)最近客户认为我们程序占用cpu过高,希望我们限制,排查之后发现是因为程序频繁gc导致,为了精细化、灵活的的限制,想到了使用Linux CGroup。0...

【Docker 】提升开发效率的 Docker 实践技巧

【Docker 】提升开发效率的 Docker 实践技巧

在现代软件开发中,Docker 已成为重要的工具之一。本文将介绍如何利用 Docker 的构建缓存、自定义镜像、私有镜像仓库,以及环境变量来优化开发流程。一、构建缓存合理安排 Dockerfile 中...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。