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

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