前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >2分钟带你快速了解什么是MyBatisPlus及其核心功能!

2分钟带你快速了解什么是MyBatisPlus及其核心功能!

原创
作者头像
reload
发布2024-04-24 10:50:32
1030
发布2024-04-24 10:50:32
举报
文章被收录于专栏:Java后端Java后端

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

一、MP入门

MyBatisPlus(MP)是基于MyBatis框架基础上开发的增强型工具,旨在简化开发提高效率。

官网:https://baomidou.com/

1、使用步骤

1.1 引入依赖

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

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

代码语言:xml
复制
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.5.2</version>
        </dependency>
1.2 定义Mapper

定义Mapper接口并继承BaseMapper。

代码语言:java
复制
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接口

代码语言:java
复制
public interface IUserService extends IService<User>{
}

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

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

代码语言:java
复制
@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,性能最好

我正在参与2024腾讯技术创作特训营最新征文,快来和我瓜分大奖!

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、MP入门
    • 1、使用步骤
      • 1.1 引入依赖
      • 1.2 定义Mapper
    • 2、常见注解
      • 3、常见配置
      • 二、核心功能
        • 1、条件构造器
          • 2、自定义SQL
            • 3、IService接口
              • 3.1 IService的Lambda查询
              • 3.2 lService的Lambda更新
              • 3.3 IService批量新增
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
          http://www.vxiaotou.com