MyBatisPlus(1)
哈喽,大家好呀!这里是码农后端。本篇将带你快速了解什么是MyBatisPlus及其核心功能!
一、MP入门
MyBatisPlus(MP)是基于MyBatis框架基础上开发的增强型工具,旨在简化开发提高效率。
官网:https://baomidou.com/
1、使用步骤
1.1 引入依赖
引入MyBatisPlus依赖,代替MyBatis依赖。
MyBatisPlus官方提供了starter,集成了Mybatis和MybatisPlus的所有功能,实现了自动装配效果。
1 | <dependency> |
1.2 定义Mapper
定义Mapper接口并继承BaseMapper。
1 | 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 | public interface IUserService extends IService<User>{ |
注:需要指定对应实体类的泛型。
自定义Service实现类(如UserServiceImpl),实现自定义接口并继承Servicelmpl类
1 |
|
注:需要指定两个泛型:对应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,性能最好