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

米饭8个月前行业资讯435

三、扩展功能

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背后的容器管理——Libcontainer深度解析

Docker背后的容器管理——Libcontainer深度解析

原文地址:http://www.infoq.com/cn/articles/docker-container-management-libcontainer-depth-analysisLibcont...

C++二分算法:1713得到子序列的最少操作次数

C++二分算法:1713得到子序列的最少操作次数

本文涉及的基础知识点二分查找算法合集LeetCode1713题目给你一个数组 target ,包含若干 互不相同 的整数,以及另一个整数数组 arr ,arr 可能 包含重复元素。每一次操作中,你可以...

MySQL数据库运维篇

MySQL数据库运维篇

一、日志1.1、错误日志它记录了当mysqld启动和停止时,以及服务器在运行过程中发生任何严重错误时的相关信息。当数据库出现任何故障导致无法正常使用时,建议首先查看此日志。该日志是默认开启的,默认存放...

【Docker】在 CentOS 上安装 Docker 的完整指南

【Docker】在 CentOS 上安装 Docker 的完整指南

Docker 是现代软件开发中不可或缺的工具,它提供了一种轻量级的虚拟化解决方案,帮助开发者更方便地打包、分发和管理应用程序。本文将详细介绍如何在 CentOS 系统上安装 Docker,包括必要的前...

windows10家庭版禁用Device/Credential Guard解决方案

windows10家庭版禁用Device/Credential Guard解决方案

背景(禁用的原因)在安装Windows版的docker后,由于Windows版本自带虚拟机,折腾完后却发现原来安装的VMware Workstation Pro和Oracle VM VirtualBo...

Docker 基础与实战指南(3)

Docker 基础与实战指南(3)

2.2 数据卷:容器是隔离环境,容器内程序的文件、配置、运行时产生的容器都在容器内部,我们要读写容器内的文件非常不方便。大家思考几个问题:如果要升级 MySQL 版本,需要销毁旧容器,那么数据岂不是跟...

发表评论    

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