Mybatis-Plus(Service CRUD 接口)(+24篇MyBatis-Plus文章)

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群版 2核4GB 100GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: Mybatis-Plus(Service CRUD 接口)(+24篇MyBatis-Plus文章)

1、简介

说明:

  • 通用 Service CRUD 封装IService接口,进一步封装 CRUD 采用 get 查询单行remove 删除list 查询集合page 分页 前缀命名方式区分 Mapper 层避免混淆,
  • 泛型 T 为任意实体对象
  • 建议如果存在自定义通用 Service 方法的可能,请创建自己的 IBaseService 继承 Mybatis-Plus 提供的基类
  • 对象 Wrapper 为 条件构造器

官网地址:

https://baomidou.com/pages/49cc81/#service-crud-%E6%8E%A5%E5%8F%A3

2、 Save

// 插入一条记录(选择字段,策略插入)
boolean save(T entity);
// 插入(批量)
boolean saveBatch(Collection<T> entityList);
// 插入(批量)
boolean saveBatch(Collection<T> entityList, int batchSize);

参数说明

类型 参数名 描述
T entity 实体对象
Collection entityList 实体对象集合
int batchSize 插入批次数量

案例:

MyUser user01 = MyUser.builder().name("张三").age(12).address("北京").build();
MyUser user02 = MyUser.builder().name("李四").age(26).address("上海").build();
ArrayList<MyUser> myUsers = new ArrayList<>();
myUsers.add(user01);
myUsers.add(user02);
//  插入一条记录(选择字段,策略插入)
boolean save = myUserService.save(user01);
// 插入(批量)
boolean b = myUserService.saveBatch(myUsers);
// 插入(批量)(batchSize)插入批次数量
boolean c = myUserService.saveBatch(myUsers, 1);

3、 SaveOrUpdate

// TableId 注解存在更新记录,否插入一条记录
boolean saveOrUpdate(T entity);
// 根据updateWrapper尝试更新,否继续执行saveOrUpdate(T)方法
boolean saveOrUpdate(T entity, Wrapper<T> updateWrapper);
// 批量修改插入
boolean saveOrUpdateBatch(Collection<T> entityList);
// 批量修改插入
boolean saveOrUpdateBatch(Collection<T> entityList, int batchSize);

参数说明

类型 参数名 描述
T entity 实体对象
Wrapper updateWrapper 实体对象封装操作类 UpdateWrapper
Collection entityList 实体对象集合
int batchSize 插入批次数量

案例:

MyUser user01 = MyUser.builder().name("张三").age(12).address("北京").build();
MyUser user02 = MyUser.builder().name("李四").age(26).address("上海").build();
ArrayList<MyUser> myUsers = new ArrayList<>();
myUsers.add(user01);
myUsers.add(user02);
// TableId 注解存在更新记录,否插入一条记录
boolean a = myUserService.saveOrUpdate(user01);
boolean b = myUserService.saveOrUpdateBatch(myUsers);
boolean c = myUserService.saveOrUpdateBatch(myUsers, 1);

4、 Remove

// 根据 entity 条件,删除记录
boolean remove(Wrapper<T> queryWrapper);
// 根据 ID 删除
boolean removeById(Serializable id);
// 根据 columnMap 条件,删除记录
boolean removeByMap(Map<String, Object> columnMap);
// 删除(根据ID 批量删除)
boolean removeByIds(Collection<? extends Serializable> idList);

参数说明

类型 参数名 描述
Wrapper queryWrapper 实体包装类 QueryWrapper
Serializable id 主键 ID
Map<String, Object> columnMap 表字段 map 对象
Collection<? extends Serializable> idList 主键 ID 列表

案例:

MyUser user01 = MyUser.builder().name("张三").age(12).address("北京").build();
MyUser user02 = MyUser.builder().name("李四").age(26).address("上海").build();
ArrayList<MyUser> myUsers = new ArrayList<>();
myUsers.add(user01);
myUsers.add(user02);
LambdaQueryWrapper<MyUser> eq = new QueryWrapper<MyUser>().lambda().eq(MyUser::getAge, 1);
boolean remove = myUserService.remove(eq);
boolean b = myUserService.removeById(1);
HashMap<String, Object> removeMap = new HashMap<>();
removeMap.put("age", 1);
boolean b1 = myUserService.removeByMap(removeMap);
ArrayList<Integer> ids = new ArrayList<>();
ids.add(1);
ids.add(2);
boolean b2 = myUserService.removeByIds(ids);

5、 Update

// 根据 UpdateWrapper 条件,更新记录 需要设置sqlset
boolean update(Wrapper<T> updateWrapper);
// 根据 whereWrapper 条件,更新记录
boolean update(T updateEntity, Wrapper<T> whereWrapper);
// 根据 ID 选择修改
boolean updateById(T entity);
// 根据ID 批量更新
boolean updateBatchById(Collection<T> entityList);
// 根据ID 批量更新
boolean updateBatchById(Collection<T> entityList, int batchSize);

参数说明

类型 参数名 描述
Wrapper updateWrapper 实体对象封装操作类 UpdateWrapper
T entity 实体对象
Collection entityList 实体对象集合
int batchSize 更新批次数量

案例:

LambdaUpdateWrapper<MyUser> eq = new UpdateWrapper<MyUser>().lambda().eq(MyUser::getAge, 1);
MyUser myUser = MyUser.builder().id(18L).name("李四").age(12).build();
// 根据 UpdateWrapper 条件,更新记录 需要设置sqlset
boolean update = myUserService.update(eq);
boolean update1 = myUserService.update(myUser, eq);
MyUser myUser01 = MyUser.builder().id(18L).name("李四").age(12).build();
MyUser myUser02 = MyUser.builder().id(18L).name("李四").age(12).build();
ArrayList<MyUser> myUsers = new ArrayList<>();
myUsers.add(myUser01);
myUsers.add(myUser02);
// 根据 ID 选择修改
boolean b = myUserService.updateById(myUser01);
// 根据ID 批量更新
boolean b1 = myUserService.updateBatchById(myUsers);
boolean b2 = myUserService.updateBatchById(myUsers,1);

6、 Get

// 根据 ID 查询
T getById(Serializable id);
// 根据 Wrapper,查询一条记录。结果集,如果是多个会抛出异常,随机取一条加上限制条件 wrapper.last("LIMIT 1")
T getOne(Wrapper<T> queryWrapper);
// 根据 Wrapper,查询一条记录
T getOne(Wrapper<T> queryWrapper, boolean throwEx);
// 根据 Wrapper,查询一条记录
Map<String, Object> getMap(Wrapper<T> queryWrapper);
// 根据 Wrapper,查询一条记录
<V> V getObj(Wrapper<T> queryWrapper, Function<? super Object, V> mapper);

参数说明

类型 参数名 描述
Serializable id 主键 ID
Wrapper queryWrapper 实体对象封装操作类 QueryWrapper
boolean throwEx 有多个 result 是否抛出异常
T entity 实体对象
Function<? super Object, V> mapper 转换函数

案例:

MyUser byId = myUserService.getById(1);
LambdaQueryWrapper<MyUser> eq = new QueryWrapper<MyUser>().lambda().eq(MyUser::getAge, 1);
MyUser one = myUserService.getOne(eq);
MyUser one1 = myUserService.getOne(eq, false);
Map<String, Object> map = myUserService.getMap(eq);
String obj1 = myUserService.getObj(eq, Object::toString);

7、 List

// 查询所有
List<T> list();
// 查询列表
List<T> list(Wrapper<T> queryWrapper);
// 查询(根据ID 批量查询)
Collection<T> listByIds(Collection<? extends Serializable> idList);
// 查询(根据 columnMap 条件)
Collection<T> listByMap(Map<String, Object> columnMap);
// 查询所有列表
List<Map<String, Object>> listMaps();
// 查询列表
List<Map<String, Object>> listMaps(Wrapper<T> queryWrapper);
// 查询全部记录
List<Object> listObjs();
// 查询全部记录
<V> List<V> listObjs(Function<? super Object, V> mapper);
// 根据 Wrapper 条件,查询全部记录
List<Object> listObjs(Wrapper<T> queryWrapper);
// 根据 Wrapper 条件,查询全部记录
<V> List<V> listObjs(Wrapper<T> queryWrapper, Function<? super Object, V> mapper);

参数说明

类型 参数名 描述
Wrapper queryWrapper 实体对象封装操作类 QueryWrapper
Collection<? extends Serializable> idList 主键 ID 列表
Map<String, Object> columnMap 表字段 map 对象
Function<? super Object, V> mapper 转换函数

案例:

LambdaQueryWrapper<MyUser> eq = new QueryWrapper<MyUser>().lambda().eq(MyUser::getAge, 1);
ArrayList<Integer> ids = new ArrayList<>();
ids.add(1);
List<MyUser> list = myUserService.list();
List<MyUser> list1 = myUserService.list(eq);
Collection<MyUser> myUsers = myUserService.listByIds(ids);
HashMap<String, Object> eqMap = new HashMap<>();
eqMap.put("age", 1);
Collection<MyUser> myUsers1 = myUserService.listByMap(eqMap);
List<Map<String, Object>> maps = myUserService.listMaps();
List<Map<String, Object>> maps1 = myUserService.listMaps(eq);
List<Object> objects = myUserService.listObjs();
List<Object> objects1 = myUserService.listObjs(eq);
List<String> strings1 = myUserService.listObjs(Objects::toString);
List<String> strings = myUserService.listObjs(eq, Object::toString);

8、 Page

// 无条件分页查询
IPage<T> page(IPage<T> page);
// 条件分页查询
IPage<T> page(IPage<T> page, Wrapper<T> queryWrapper);
// 无条件分页查询
IPage<Map<String, Object>> pageMaps(IPage<T> page);
// 条件分页查询
IPage<Map<String, Object>> pageMaps(IPage<T> page, Wrapper<T> queryWrapper);

参数说明

类型 参数名 描述
IPage page 翻页对象
Wrapper queryWrapper 实体对象封装操作类 QueryWrapper

案例:

Page<MyUser> page = new Page<>(1, 2);
LambdaQueryWrapper<MyUser> eq = new QueryWrapper<MyUser>().lambda().eq(MyUser::getAge, 1);
// 无条件分页查询
IPage<MyUser> userIPagepage = myUserService.page(page);
// 条件分页查询
IPage<MyUser> page1 = myUserService.page(page, eq);
// 无条件分页查询
IPage<Map<String, Object>> mapIPage = myUserService.pageMaps(page);
// 条件分页查询
IPage<Map<String, Object>> mapIPage1 = myUserService.pageMaps(page, eq);

9、 Count

// 查询总记录数
int count();
// 根据 Wrapper 条件,查询总记录数
int count(Wrapper<T> queryWrapper);

参数说明

类型 参数名 描述
Wrapper queryWrapper 实体对象封装操作类 QueryWrapper

案例:

int count = myUserService.count();
LambdaQueryWrapper<MyUser> eq = new LambdaQueryWrapper<MyUser>().eq(MyUser::getAge, 1);
int count1 = myUserService.count(eq);

10、 Chain

10.1 查询

// 链式查询 普通
QueryChainWrapper<T> query();
// 链式查询 lambda 式。注意:不支持 Kotlin
LambdaQueryChainWrapper<T> lambdaQuery();
// 示例:
query().eq("column", value).one();
lambdaQuery().eq(Entity::getId, value).list();

案例(在server中):

MyUser age = query().eq("age", 1).one();
List<MyUser> list = lambdaQuery().eq(MyUser::getAge, 1).list();

10.2 更新

// 链式更改 普通
UpdateChainWrapper<T> update();
// 链式更改 lambda 式。注意:不支持 Kotlin
LambdaUpdateChainWrapper<T> lambdaUpdate();
// 示例:
update().eq("column", value).remove();
lambdaUpdate().eq(Entity::getId, value).update(entity);

案例:

update().eq("age", 1).remove();
MyUser myUser = new MyUser();
boolean update2 = lambdaUpdate().eq(MyUser::getAge, 12).update(myUser);
相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
3天前
|
缓存 Java 数据库连接
我们后端程序员不是操作MyBatis的CRUD Boy
大家好,我是南哥。一个对Java程序员进阶成长颇有研究的人,今天我们接着新的一篇Java进阶指南。为啥都戏称后端是CRUD Boy?难道就因为天天怼着数据库CRUD吗?要我说,是这个岗位的位置要的就是你CRUD,你不得不CRUD。哪有公司天天能给你搭建高并发、高可用、大数据框架的活呢,一条业务线总要成长吧,慢慢成熟了就要装修工来缝缝补补、美化美化,也就是CRUD的活。不能妄自菲薄CRUD Boy,我们是后端工程师。今天来指南下操作数据库之MyBatis框架。
10 2
我们后端程序员不是操作MyBatis的CRUD Boy
|
3天前
|
Java 数据库连接 mybatis
mybatis和mybatis-plus有哪些主要区别
这是一个代码生成工具,能快捷生成Mapper、Model、Service和Controller层代码,包含基本的CRUD操作。特色在于使用LambdaQueryWrapperX进行复杂查询条件构造,支持链式调用。此外,它还实现了MetaObjectHandler接口,能自动填充通用字段值,提高开发效率。
11 2
|
5天前
|
XML Java 数据库连接
一篇文章讲明白MyBatis魔法堂:即学即用篇
一篇文章讲明白MyBatis魔法堂:即学即用篇
|
6天前
|
SQL Java 数据库连接
MyBatis-Plus学习笔记(1):环境搭建以及基本的CRUD操作
MyBatis-Plus学习笔记(1):环境搭建以及基本的CRUD操作
|
8天前
|
存储 Java 数据库连接
SSMP整合案例第三步 业务层service开发及基于Mybatis的接口功能拓展
SSMP整合案例第三步 业务层service开发及基于Mybatis的接口功能拓展
9 0
|
11天前
|
SQL XML Java
【MyBatis】 MyBatis框架下的高效数据操作:深入理解增删查改(CRUD)
【MyBatis】 MyBatis框架下的高效数据操作:深入理解增删查改(CRUD)
13 1
|
1天前
|
Java 数据库连接 数据库
Spring Boot与MyBatis的集成应用
Spring Boot与MyBatis的集成应用
|
5天前
|
Java 数据库连接 数据库
Spring Boot与MyBatis的集成应用
Spring Boot与MyBatis的集成应用
|
5天前
|
SQL Java 数据库连接
Spring Boot整合MyBatis
Spring Boot整合MyBatis
|
5天前
|
Java 数据库连接 Spring
Spring 整合 MyBatis 底层源码解析
Spring 整合 MyBatis 底层源码解析