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

米饭10个月前行业资讯768

三、扩展功能

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


相关文章

Docker: ubuntu系统下Docker的安装

Docker: ubuntu系统下Docker的安装

安装依赖操作系统版本Ubuntu Kinetic 22.10Ubuntu Jammy 24.04 (LTS)Ubuntu Jammy 22.04 (LTS)Ubuntu Focal 20.04 (LT...

深入了解Linux命名空间中cgroups相关概念:打开容器技术的黑匣子

深入了解Linux命名空间中cgroups相关概念:打开容器技术的黑匣子

一、cgroups概念cgroup全称是control groups,被整合在了linux内核当中,把进程(tasks)放到组里面,对组设置权限,对进程进行控制。可以理解为用户和组的概念,用户会继承它...

MySQL 数据出海之数据同步方案

MySQL 数据出海之数据同步方案

数据库出海流程【1】业务出海:1)数据库出海;2)应用出海;3)流量分发;【2】数据库出海:涉及业务方、信安、DBA和框架组。数据库出海,流量在国内 --> 应用出海,流量在国内 -->...

Docker-OSX安装与配置完全指南:在Docker中运行接近原生的macOS环境

Docker-OSX安装与配置完全指南:在Docker中运行接近原生的macOS环境

Docker-OSX安装与配置完全指南:在Docker中运行接近原生的macOS环境Docker-OSXsickcodes/Docker-OSX: Docker-OSX 项目尝试通过 Docker 容...

深度学习之经典网络-AlexNet详解

深度学习之经典网络-AlexNet详解

 AlexNet 是一种经典的卷积神经网络(CNN)架构,在 2012 年的 ImageNet 大规模视觉识别挑战赛(ILSVRC)中表现优异,将 CNN 引入深度学习的新时代。AlexNe...

Docker全攻略:从入门到精通,掌握容器构建关键技能

Docker全攻略:从入门到精通,掌握容器构建关键技能

引言        Dockerfile 是构建 Docker 镜像的核心文件。它定义了如何将应用程序及其依赖打包成一个可以跨平台运行的容器。本篇博客将从基础概...

发表评论    

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