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

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS PostgreSQL,集群系列 2核4GB
简介: 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
目录
相关文章
|
21天前
|
SQL Java 数据库连接
MyBatis-Plus:简化 CRUD 操作的艺术
MyBatis-Plus 是一个基于 MyBatis 的增强工具,它旨在简化 MyBatis 的使用,提高开发效率。
45 1
MyBatis-Plus:简化 CRUD 操作的艺术
|
1月前
|
SQL Java 数据库连接
mybatis使用四:dao接口参数与mapper 接口中SQL的对应和对应方式的总结,MyBatis的parameterType传入参数类型
这篇文章是关于MyBatis中DAO接口参数与Mapper接口中SQL的对应关系,以及如何使用parameterType传入参数类型的详细总结。
30 10
|
1月前
|
Java 数据库连接 mybatis
Springboot整合Mybatis,MybatisPlus源码分析,自动装配实现包扫描源码
该文档详细介绍了如何在Springboot Web项目中整合Mybatis,包括添加依赖、使用`@MapperScan`注解配置包扫描路径等步骤。若未使用`@MapperScan`,系统会自动扫描加了`@Mapper`注解的接口;若使用了`@MapperScan`,则按指定路径扫描。文档还深入分析了相关源码,解释了不同情况下的扫描逻辑与优先级,帮助理解Mybatis在Springboot项目中的自动配置机制。
123 0
Springboot整合Mybatis,MybatisPlus源码分析,自动装配实现包扫描源码
|
2月前
|
SQL XML Java
springboot整合mybatis-plus及mybatis-plus分页插件的使用
这篇文章介绍了如何在Spring Boot项目中整合MyBatis-Plus及其分页插件,包括依赖引入、配置文件编写、SQL表创建、Mapper层、Service层、Controller层的创建,以及分页插件的使用和数据展示HTML页面的编写。
springboot整合mybatis-plus及mybatis-plus分页插件的使用
|
1月前
|
SQL Java 数据库连接
Mybatis方式完成CRUD操作
Mybatis方式完成CRUD操作
38 0
|
3月前
|
Java 数据库连接 mybatis
成功解决: Invalid bound statement (not found) 在已经使用mybatis的项目里引入mybatis-plus,结果不能共存的解决
这篇文章讨论了在已使用MyBatis的项目中引入MyBatis-Plus后出现的"Invalid bound statement (not found)"错误,并提供了解决方法,主要是通过修改yml配置文件来解决MyBatis和MyBatis-Plus共存时的冲突问题。
成功解决: Invalid bound statement (not found) 在已经使用mybatis的项目里引入mybatis-plus,结果不能共存的解决
|
3月前
|
SQL Java 数据库
4、Mybatis-Plus 通用service的操作
这篇文章介绍了如何在Mybatis-Plus框架中进行通用Service层的操作。内容包括目录结构、创建继承了IService接口的UserService接口、实现该接口的UserServiceImpl类,以及如何在Controller层注入Service接口来进行业务操作。文章通过具体的代码示例,展示了如何利用Mybatis-Plus提供的通用Service和ServiceImpl类来简化数据库的CRUD操作,并提高开发效率。
|
3月前
|
XML Java 数据库连接
MyBatis中的接口代理机制及其使用
【8月更文挑战第5天】MyBatis的接口代理机制是其核心功能之一,允许通过定义接口并在运行时生成代理对象来操作数据库。开发者声明一个带有`@Mapper`注解的接口,MyBatis则依据接口方法、映射配置(XML或注解)及数据库信息动态生成代理类。此机制分为四步:创建接口、配置映射文件或使用注解、最后在业务逻辑中注入并使用代理对象。这种方式简化了数据库操作,提高了代码的可读性和可维护性。例如,在电商系统中可通过`OrderMapper`处理订单数据,在社交应用中利用`MessageMapper`管理消息,实现高效且清晰的数据库交互。
|
4月前
|
SQL Java 数据库连接
idea中配置mybatis 映射文件模版及 mybatis plus 自定义sql
idea中配置mybatis 映射文件模版及 mybatis plus 自定义sql
89 3
|
1月前
|
Java 数据库连接 Maven
mybatis使用一:springboot整合mybatis、mybatis generator,使用逆向工程生成java代码。
这篇文章介绍了如何在Spring Boot项目中整合MyBatis和MyBatis Generator,使用逆向工程来自动生成Java代码,包括实体类、Mapper文件和Example文件,以提高开发效率。
105 2
mybatis使用一:springboot整合mybatis、mybatis generator,使用逆向工程生成java代码。