MyBatisPlus从零到一:快速入门与核心功能详解(4)
三、扩展功能
3.1 代码生成插件:
在使用MybatisPlus以后,基础的Mapper、Service、PO代码相对固定,重复编写也比较麻烦。因此MybatisPlus官方提供了代码生成器根据数据库表结构生成PO、Mapper、Service等相关代码。只不过代码生成器同样要编码使用,也很麻烦。
这里推荐大家使用一款MybatisPlus的插件,它可以基于图形化界面完成MybatisPlus的代码生成,非常简单。
3.1.1 安装插件:
在Idea的 plugins 市场中搜索并安装MyBatisPlus插件:
3.1.2 使用演示:
在弹出的窗口中填写数据库连接的基本信息:
最终,代码自动生成到指定的位置了。
3.2 静态工具类:
有的时候 Service 之间也会相互调用,为了避免出现循环依赖问题,MybatisPlus 提供一个静态工具类:Db,其中的一些静态方法与IService中方法签名基本一致(大多数需要多传递一个,数据库对应实体类的字节码),也可以帮助我们实现 CRUD 功能:
示例:
@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); }
代码执行结果如下:
综上, 开启了逻辑删除功能以后,我们就可以像普通删除一样做 CRUD,基本不用考虑代码逻辑问题。还是非常方便的。
注意:
逻辑删除本身也有自己的问题,比如:
会导致数据库表垃圾数据越来越多,从而影响查询效率。
SQL 中全都需要对逻辑删除字段做判断,影响查询效率。
因此,如果数据不能删除,可以采用把数据迁移到其它表的方法。
本文系转载,版权归原作者所有,如若侵权请联系我们进行删除!
云掣基于多年在运维领域的丰富时间经验,编写了《云运维服务白皮书》,欢迎大家互相交流学习:
《云运维服务白皮书》下载地址:https://fs80.cn/v2kbbq
想了解更多大数据运维托管服务、数据库运维托管服务、应用系统运维托管服务的的客户,欢迎点击云掣官网沟通咨询:https://yunche.pro/?t=shequ