哈喽,大家好呀!这里是码农后端。本篇将带你快速了解什么是MyBatisPlus及其核心功能!

一、MP入门

MyBatisPlus(MP)是基于MyBatis框架基础上开发的增强型工具,旨在简化开发提高效率。
官网:https://baomidou.com/

1、使用步骤

1.1 引入依赖

引入MyBatisPlus依赖,代替MyBatis依赖。

MyBatisPlus官方提供了starter,集成了Mybatis和MybatisPlus的所有功能,实现了自动装配效果。

1
2
3
4
5
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.5.2</version>
</dependency>

1.2 定义Mapper

定义Mapper接口并继承BaseMapper。

1
2
public interface UserMapper extends BaseMapper<User> {
}

注:需指定泛型为实体类的类型

BaseMapper本身提供了很多增删改查的功能,可以直接拿来使用(先继承,再调用)。

2、常见注解

1)MyBatisPlus通过扫描实体类,并基于反射获取实体类信息作为数据库表信息。

2)当实体类不符合上述约定时,MybatisPlus中提供了以下几个常用注解

@TableName: 用来指定表名

@Tableld: 用来指定表中的主键字段信息

@TableField: 用来指定表中的普通字段信息

2.1)ldType枚举的常见类型:

1、AUTO: 自增长
2、INPUT: 通过set方法自行输入
3、ASSIGN_ID: 分配 ID,接口ldentifierGenerator的方法nextld来生成id默认实现类为DefaultldentifierGenerator雪花算法

2.2)使用@TableField的常见场景∶

1、成员变量名与数据库字段名不一致
2、成员变量名以is开头,且是布尔值
3、成员变量名与数据库关键字冲突(如order),需加转义字符
4、成员变量不是数据库字段

3、常见配置

MyBatisPlus的配置项继承了MyBatis原生配置和一些自己特有的配置,可根据需要自行在application.yml配置文件配置相关项。

二、核心功能

1、条件构造器

1)MyBatisPlus支持各种复杂的where条件,可满足日常开发的所有需求。

2)涉及到where条件部分时,使用条件构造器Querywrapper的示例代码如下:

3)LambdaQuerywrapper:使用Lambda表达式,传对应的get函数,防止硬编码问题。如下为两种方式的对比。

4)条件构造器用法总结

1、Querywrapper和 LambdaQuerywrapper通常用来构建select、delete、update的where条件部分

2、UpdateWrapper和 LambdaUpdateWrapper通常只有在set语句比较特殊才使用。

3、尽量使用 LambdaQueryWrapper和 LambdaUpdateWrapper,避免硬编码

2、自定义SQL

可以使用MyBatisPlus的Wrapper来构建复杂的where条件,然后自己定义SQL语句中剩下的部分。步骤如下:

当SQL语句的where条件之外的部分,没有办法利用MP更方便地实现时(非常规,只能拼接,违背了企业开发规范),使用自定义SQL。

3、IService接口

1)自带的常见方法如下:

2)相关的继承和实现关系如下图:

3)代码示例
自定义Service接口(如IUserService)继承IService接口

1
2
public interface IUserService extends IService<User>{
}

注:需要指定对应实体类的泛型。

自定义Service实现类(如UserServiceImpl),实现自定义接口并继承Servicelmpl类

1
2
3
@Service
public class UserServiceImpl extends ServiceImpl<UserMapper,User> implements IUserService{
}

注:需要指定两个泛型:对应Mapper和对应实体类的泛型。

3.1 IService的Lambda查询

1)需求:实现一个根据复杂条件查询用户的接口,查询条件如下

name: 用户名关键字,可以为空
status: 用户状态,可以为空.
minBalance: 最小余额,可以为空.
maxBalance: 最大余额,可以为空

2)回顾使用MyBatis的SQL写法

3)使用MyBatisPlus

3.2 lService的Lambda更新

1)需求:改造根据id修改用户余额的接口,要求如下
a、完成对用户状态校验
b、完成对用户余额校验
c、如果扣减后余额为0,则将用户status修改为冻结状态(2)

2)对应的代码如下

3.3 IService批量新增

1)需求:批量插入10万条用户数据,并作出对比

2)相关的批处理方案对比

a、普通for循环插入

速度非常慢﹐不推荐

b、IService的批量插入

MP的批量新增,基于预编译的批处理,性能还算不错

c、开启rewriteBatchedStatements=true参数

配置jdbc参数,开 rewriteBatchedStatements,性能最好