mybatisplus介绍以及使用(下)
目录一、mybatisplus扩展功能
1、代码生成
1.1 安装插件
1.2 使用
2、逻辑删除
二、插件功能
1、分页插件
2、示例
写在前面:
在上篇的mybatisplus中介绍到了其概念,其中包罗了什么是mybatisplus以及已经有了mybatis但是我们为什么使用它,介绍到了他给我们带来的便利之处(本篇会继续讲解mybatisplus的功能),还介绍到了安装以及一些常用的注解和条件构造器(很重要),那就继续开启新篇章吧!上篇文章入口。
一、mybatisplus扩展功能
1、代码生成
在使用MybatisPlus以后,基础的Mapper、Service、PO代码相对固定,重复编写也比较麻烦。因此MybatisPlus官方提供了代码生成器根据数据库表结构生成PO、Mapper、Service等相关代码。只不外代码生成器同样要编码使用,也很麻烦。
这里推荐各人使用一款MybatisPlus的插件,它可以基于图形化界面完成MybatisPlus的代码生成,非常简单。
1.1 安装插件
在Idea的plugins市场中搜刮并安装MyBatisPlus插件:
https://i-blog.csdnimg.cn/direct/a6d589404ec2465dae3319c9c44841eb.png
然后重启你的idea即可使用
1.2 使用
对于一些比较重要的数据,我们往往会采取逻辑删除的方案,即:
[*] 在表中添加一个字段标志数据是否被删除
[*] 当删除数据时把标志置为true
[*] 查询时过滤掉标志为true的数据
一旦采取了逻辑删除,所有的查询和删除逻辑都要跟着变化,非常麻烦。为了解决这个题目,MybatisPlus就添加了对逻辑删除的支持。
留意,只有MybatisPlus生成的SQL语句才支持自动的逻辑删除,自定义SQL必要自己手动处理逻辑删除。
起首要预备一张数据库的表(留意:必要是一个没有编写三层架构的表不然就不能体现到这款插件的魅力了),然后在菜单栏找到此处
https://i-blog.csdnimg.cn/direct/76afef157ac9429d8a91273c3edc07a7.png
在弹出的窗口中填写数据库连接的根本信息
https://i-blog.csdnimg.cn/direct/a3f1627bba594f6a9e7b7a179f98b660.png
点击OK生存。
然后再次点击Idea顶部菜单中的other,然后选择Code Generator:
https://i-blog.csdnimg.cn/direct/9b7e2ec5d5ae464294e74a7981cca9b3.png
在弹出的表单中填写信息:
https://i-blog.csdnimg.cn/direct/6c0873f4920f4c34af1eb2c7cdc91e8e.png
终极,代码自动生成到指定的位置了:
https://i-blog.csdnimg.cn/direct/ab10c768b959490ca3b5e813a61b7d22.png
2、逻辑删除
对于一些比较重要的数据,我们往往会采取逻辑删除的方案,即:
[*] 在表中添加一个字段标志数据是否被删除
[*] 当删除数据时把标志置为true
[*] 查询时过滤掉标志为true的数据
一旦采取了逻辑删除,所有的查询和删除逻辑都要跟着变化,非常麻烦。为了解决这个题目,MybatisPlus就添加了对逻辑删除的支持。
要实现逻辑删除着实也很简单,起首必要在数据库表中新增一个逻辑删除的字段,接着要在其对应的实体类中新增逻辑删除的字段对应的属性,接着必要在yaml文件中做如下配置
mybatis-plus:
global-config:
db-config:
ogic-delete-field: deleted # 全局逻辑删除的实体字段名(since 3.3.0,配置后可以忽略不配置步调2)
logic-delete-value: 1 # 逻辑已删除值(默认为 1)
logic-not-delete-value: 0 # 逻辑未删除值(默认为 0)
开启了逻辑删除功能以后,我们就可以像普通删除一样做CRUD,根本不用考虑代码逻辑题目。还是非常方便的。
但是有一点必要留意:逻辑删除只有MybatisPlus生成的SQL语句才支持自动的逻辑删除,自定义SQL必要自己手动处理逻辑删除。
留意:
逻辑删除本身也有自己的题目,比如:
[*] 会导致数据库表垃圾数据越来越多,从而影响查询服从
[*] SQL中全都必要对逻辑删除字段做判断,影响查询服从
因此,我不太推荐采取逻辑删除功能,如果数据不能删除,可以采取把数据迁移到别的表的办法。
二、插件功能
1、分页插件
MybatisPlus提供了很多的插件功能,进一步拓展其功能。目前已有的插件有:
[*] PaginationInnerInterceptor:自动分页
[*] TenantLineInnerInterceptor:多租户
[*] DynamicTableNameInnerInterceptor:动态表名
[*] OptimisticLockerInnerInterceptor:乐观锁
[*] IllegalSQLInnerInterceptor:sql 性能规范
[*] BlockAttackInnerInterceptor:防止全表更新与删除
留意:
使用多个分页插件的时候必要留意插件定义次序,建议使用次序如下:
[*] 多租户,动态表名
[*] 分页,乐观锁
[*] sql 性能规范,防止全表更新与删除
这里我们以分页插件为里来学习插件的用法。如果想要了解其他插件请前往官网自行了解。
在未引入分页插件的情况下,MybatisPlus是不支持分页功能的,IService和BaseMapper中的分页方法都无法正常起效。
所以,我们必须配置分页插件。
起首在项目中新建一个配置类:
https://i-blog.csdnimg.cn/direct/11bd5b497fe4433c9dc877b5bb28a37f.png
其代码如下:
package com.itheima.mp.config;
import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class MybatisConfig {
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
// 初始化核心插件
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
// 添加分页插件
interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
return interceptor;
}
} 配置完成之后就可以使用mybatisplus中提供的分页功能了
2、示例
编写一个分页查询的测试:
@Test
void testPageQuery() {
// 1.分页查询,new Page()的两个参数分别是:页码、每页大小
Page<User> p = userService.page(new Page<>(2, 2));
// 2.总条数
System.out.println("total = " + p.getTotal());
// 3.总页数
System.out.println("pages = " + p.getPages());
// 4.数据
List<User> records = p.getRecords();
records.forEach(System.out::println);
} 使用提供的分页插件功能之前必要先提供一个page对象,其中封装的有当前页码,每页大小,还有分页效果的排序条件,全部封装完之后调用mybatisplus提供的分页方法然后将分页对象传入进去即可,此处直接在参数部门new了一个page对象未指定排序字段以及排序规则。
运行效果如下:
https://i-blog.csdnimg.cn/direct/daea1e0f678f49ca8c596d15a6d2ff52.png
从运行效果中的sql语句中可以看出mybaitsplus帮我们拼接了limit分页条件
如果想要指定排序方法以及指定字段可以参考以下方法
int pageNo = 1, pageSize = 5;
// 分页参数
Page<User> page = Page.of(pageNo, pageSize);
// 排序参数, 通过OrderItem来指定
page.addOrder(new OrderItem("balance", false));
userService.page(page); orderItem即是封装排序字段以及指定升序还是降序的对象、此处指定排序字段为balance且为降序分列。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页:
[1]