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

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
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);
相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
打赏
0
0
0
0
35
分享
相关文章
二、搭建MyBatis采用xml方式,验证CRUD(增删改查操作)
二、搭建MyBatis采用xml方式,验证CRUD(增删改查操作)
78 21
MyBatis Plus 使用 Service 接口进行增删改查
本文介绍了基于 MyBatis-Plus 的数据库操作流程,包括配置、实体类、Service 层及 Mapper 层的创建。通过在 `application.yml` 中配置 SQL 日志打印,确保调试便利。示例中新建了 `UserTableEntity` 实体类映射 `sys_user` 表,并构建了 `UserService` 和 `UserServiceImpl` 处理业务逻辑,同时定义了 `UserTableMapper` 进行数据交互。测试部分展示了查询、插入、删除和更新的操作方法及输出结果,帮助开发者快速上手 MyBatis-Plus 数据持久化框架。
MyBatis-Plus:简化 CRUD 操作的艺术
MyBatis-Plus 是一个基于 MyBatis 的增强工具,它旨在简化 MyBatis 的使用,提高开发效率。
165 1
MyBatis-Plus:简化 CRUD 操作的艺术
mybatis使用四:dao接口参数与mapper 接口中SQL的对应和对应方式的总结,MyBatis的parameterType传入参数类型
这篇文章是关于MyBatis中DAO接口参数与Mapper接口中SQL的对应关系,以及如何使用parameterType传入参数类型的详细总结。
122 10
Mybatis方式完成CRUD操作
Mybatis方式完成CRUD操作
84 0
微服务——SpringBoot使用归纳——Spring Boot集成MyBatis——基于注解的整合
本文介绍了Spring Boot集成MyBatis的两种方式:基于XML和注解的形式。重点讲解了注解方式,包括@Select、@Insert、@Update、@Delete等常用注解的使用方法,以及多参数时@Param注解的应用。同时,针对字段映射不一致的问题,提供了@Results和@ResultMap的解决方案。文章还提到实际项目中常结合XML与注解的优点,灵活使用两者以提高开发效率,并附带课程源码供下载学习。
22 0
Java后端开发-使用springboot进行Mybatis连接数据库步骤
本文介绍了使用Java和IDEA进行数据库操作的详细步骤,涵盖从数据库准备到测试类编写及运行的全过程。主要内容包括: 1. **数据库准备**:创建数据库和表。 2. **查询数据库**:验证数据库是否可用。 3. **IDEA代码配置**:构建实体类并配置数据库连接。 4. **测试类编写**:编写并运行测试类以确保一切正常。
114 2
mybatis使用一:springboot整合mybatis、mybatis generator,使用逆向工程生成java代码。
这篇文章介绍了如何在Spring Boot项目中整合MyBatis和MyBatis Generator,使用逆向工程来自动生成Java代码,包括实体类、Mapper文件和Example文件,以提高开发效率。
255 2
mybatis使用一:springboot整合mybatis、mybatis generator,使用逆向工程生成java代码。
|
6月前
|
mybatis使用三:springboot整合mybatis,使用PageHelper 进行分页操作,并整合swagger2。使用正规的开发模式:定义统一的数据返回格式和请求模块
这篇文章介绍了如何在Spring Boot项目中整合MyBatis和PageHelper进行分页操作,并且集成Swagger2来生成API文档,同时定义了统一的数据返回格式和请求模块。
165 1
mybatis使用三:springboot整合mybatis,使用PageHelper 进行分页操作,并整合swagger2。使用正规的开发模式:定义统一的数据返回格式和请求模块
Springboot整合shiro,带你学会shiro,入门级别教程,由浅入深,完整代码案例,各位项目想加这个模块的人也可以看这个,又或者不会mybatis-plus的也可以看这个
本文详细讲解了如何整合Apache Shiro与Spring Boot项目,包括数据库准备、项目配置、实体类、Mapper、Service、Controller的创建和配置,以及Shiro的配置和使用。
1190 1
Springboot整合shiro,带你学会shiro,入门级别教程,由浅入深,完整代码案例,各位项目想加这个模块的人也可以看这个,又或者不会mybatis-plus的也可以看这个
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等