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

米饭5个月前行业资讯223

三、扩展功能

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


相关文章

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

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

四、分页插件MybatisPlus 提供了很多的插件功能,进一步拓展其功能。目前已有的插件有:PaginationInnerInterceptor:自动分页TenantLineInnerInterce...

【K8S系列】Kubernetes Pod节点CrashLoopBackOff 状态及解决方案详解【已解决】

【K8S系列】Kubernetes Pod节点CrashLoopBackOff 状态及解决方案详解【已解决】

在 Kubernetes 中,Pod 的状态为 CrashLoopBackOff 表示某个容器在启动后崩溃,Kubernetes尝试重启该容器,但由于持续崩溃,重启的间隔时间逐渐增...

解决虚拟机卡死且无法强制结束进程的问题

解决虚拟机卡死且无法强制结束进程的问题

【Linux虚拟机死机】有很多种情况,最常见的是系统负载过高导致的。可以是运行内存耗用极大的程序,也会迅速提升系统负载。由于系统负载过高导致的卡死,一定是解决的越快越好!不能再试图依赖任何图形界面的东...

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

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

3.4 通用枚举:MybatisPlus 提供了一个处理枚举的类型转换器,可以帮我们把枚举类型与数据库类型自动转换。3.4.1 创建枚举对象并添加 @EnumValue 注解要让MybatisPlus...

微服务保护和分布式事务(1)

微服务保护和分布式事务(1)

一、微服务保护保证服务运行的健壮性,避免级联失败导致的雪崩问题,就属于微服务保护。为了方便讲解,下面的商品服务是故障方,购物车服务是故障调用方。1.1 微服务保护方案:微服务保护的方案有很多,比如:请...

一文讲透研发,SRE,运维,DevOps 的区别

一文讲透研发,SRE,运维,DevOps 的区别

研发,SRE ,运维是工种,而 DevOps 是体系。如果拿足球来打比方,研发,SRE ,运维对应的就是前锋,中场,后卫这样的位置,而 DevOps 则是诸如 4-3-3 这样的阵型。 研发...

发表评论    

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