MyBatis Plus从入门到熟练使用(二、中级使用)

本文深入探讨MyBatisPlus的自定义SQL、分页查询、数据修改及删除接口开发,通过实例演示如何优化分页查询,实现高效的数据操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前面一节我们进行了MyBatis Plus的入门介绍,并且进行了新增和查询的相关接口介绍和编写,这一节我们继续深入学习MP。

一、自定义SQL

1、自定义SQL语句使用方法

有时候我们使用MP自带的条件构造器满足不了我们的查询条件了,MP也支持我们自定义SQL。但是要求MP的版本大于等于3.0.7!下面我们来实际应用一下。

我们首先在Mapper里写一个自定义的接口方法,这里使用注解的方式编写SQL语句,大家可以看到这是一个简单的查询所有信息的SQL语句,然后我们调用这个接口的方法如下图:

运行测试一下:

测试成功!

2、自定义SQL条件构造器使用方法

这里如果想要在这个方法里面使用条件构造器该怎么写呢?这里我们在新建一个接口如下图:

这里我们自定义了一个Lambda表达式的条件构造器,然后我们写个接口测试一下:

运行测试一下:

 

测试成功!

二、分页查询

1、分页配置

首先我们写一个配置文件来配置MP的物理分页插件,代码如下:

然后我们来看一下MP所提供的分页接口如下图:

这两个一个返回实体数据信息,一个返回Map信息,下面我们来实践一下!

2、selectPage方法使用

这里我们使用selectPage方法,需要传入Page对象和条件构造器,最后返回一个Ipage对象,里面包含下列信息:

分别为总记录数,总页数,总数据集,当前页,当前页数据量,下面我们运行一下进行测试!

从执行的sql中可以看出执行了两次sql查询,一次是查询记录数的,一次查询具体数据,查询数据的有两个参数0(Long)代表偏移量,2(Long)代表最大返回两条记录。然后可以看到总页数2页,总记录数4个,我们看一下测试结果:

果然只返回了两条数据,我们把内页数量调为4测试一下,如下图:

可以看到,现在只有1页了,且这一页4条数据,说明我们测试成功!

3、selectMapsPage方法使用

下面我们再来测试一下返回Map数据的方法,其实和上面类似,只不过返回的是Map对象,如下图所示:

运行一下看效果:

也没问题,只不过返回的数据类型是Map对象,可以按需要取出使用。

4、分页查询优化

这样分页部分基本就讲解完成了,但是还有一个问题就是每次我们的分页查询都是跑了两次SQL语句,当我们不需要查询记录数的时候那系统性能就会有损耗,这里我们来处理一下这个问题。

我们加入这一句代码,MP在分页查询时就不会去查询记录数了,运行测试一下:

 

只执行了查询数据的,没有执行查询总记录数的,说明我们测试成功了!

三、数据修改更新接口开发

前面讲了数据新增、查询的各种接口的开发,这里我们开始介绍数据修改更新接口的开发。

1、根据id进行修改

这里我们还是选择json数据格式进行数据传输:

运行看一下效果如下图:

测试成功!并且我们看到MP也是可以满足局部更新的,就是你输入什么参数就更新什么值。

2、update方法修改

下面我们来看一下另外一种更新数据的方法update方法:

这里我们使用update方法传入了两个参数,一个是实体,一个是条件构造器wrapper,我们看一下执行的sql语句:

我们的条件构造器中的参数在where的位置,实体类中的参数在set位置上,即条件构造器用来设置条件,实体用来设置修改内容。看一下执行结果:

测试成功!但是你可能觉得每次都要新建一个实体类比较麻烦,别着急,也有不用新建实体类的方法:

3、不构建实体的修改方法

这里我们直接把要set的对象放到了wrapper中,然后在update方法中的实体类位置传入了null,运行测试一下:

也是可以的。我们也可以使用具有防误写功能的Lambda表达式来写,如下图:

4、Lambda条件构造器的修改方法

这里我们把名字改为张三三,年龄改为88,运行一下看效果:

OK,测试成功!我们也可以使用链式的Lambda条件构造器进行修改,如下图:

5、链式Lambda条件构造器的修改方法

运行看一下效果,

这里我们把张三三的年龄修改为18,看一下结果:

测试成功!

三、数据删除接口开发

1、根据id删除

首先我们来介绍简单的通过id删除的方法如下图:

运行测试一下:

可以看到数据库中id为1的数据已经被删除了。

2、deleteByMap方法删除

这个跟我们前面的查询时使用的selectByMap类似,传入一个Map对象进行删除,可以满足根据数据库中的某一列或多列信息进行删除,这里我们写代码介绍一下:

这里我们根据性别进行信息删除,比如我们删除所有的女生信息,运行看一下效果:

显示删除了两条信息,看一下sql语句:

再看一下数据库验证一下:

测试成功,所有的女生信息都已经被删除了。

3、deleteBatchIds方法删除

这个方法和我们前面使用的批量查询功能也是类似的,只不过我们这儿是批量删除,写代码测试一下:

这里我们以传入两个id进行删除为例进行讲解,运行看一下效果:

这里我们把id为2,3的数据删除了,最后去数据库验证一下:

测试成功!

4、带条件构造器的删除方法

运行测试一下:

再去数据库中验证一下:

测试成功!

这样我们结合上一篇文章已经使用MP把增删改查的所有接口都写完了!

这一节就先暂时介绍到这儿!

 

 

 

 

 

 

 

<think>好的,我现在需要帮助用户寻找关于Web后端开发的实际项目案例或教程。首先,用户提到了几个引用来源,我需要仔细看看这些引用内容,看看有没有相关的项目案例可以推荐。 引用[1]提到了后端Web实战-MySQL数据库的课程,链接是优快云的,可能是一个MySQL的入门教程。引用[2]是一个详细的Java后端案例,使用了Spring Boot、Spring Data JPA和H2数据库,还展示了项目结构,看起来像是一个完整的项目示例。引用[3]讨论的是knife4j和Swagger生成API文档的内容,可能和API开发相关。 用户的需求是寻找实战项目实例、教程或案例,所以需要综合这些引用中的信息,并结合常见的后端项目类型来推荐。首先,引用[2]中的Spring Boot项目案例应该是一个很好的起点,因为它结构清晰,包含控制器、模型、仓库和服务层,适合学习。然后,引用[1]中的MySQL课程可能涉及数据库操作,这也是后端开发的重要部分。此外,引用[3]提到的API文档工具knife4j,可能在实际项目中会用到,可以建议用户学习如何集成这样的工具。 接下来,我需要考虑用户可能的背景。他们可能有一定的编程基础,想通过实际项目来提升后端开发技能。因此,推荐的案例应该覆盖主流技术栈,比如Spring Boot、MySQL、RESTful API设计等,并且有详细的代码讲解和步骤说明。 另外,用户可能还需要项目结构的解释,代码分层的理解,以及如何从零开始搭建一个项目。所以,在回答中应该分步骤介绍每个推荐项目,并说明它们的特点和适合的学习阶段。例如,电商平台项目适合进阶学习,而博客系统可能适合入门。 最后,需要确保推荐的内容符合用户提供的引用资料,比如引用[2]中的案例结构可以作为示例,引用[1]和引用[3]中的技术点可以作为补充学习内容。同时,要生成相关问题,帮助用户进一步深入探索,比如如何设计RESTful API或如何优化数据库性能等。 总结来说,我需要整理出几个不同类型的项目案例,结合引用中的信息,分步骤详细说明每个项目的技术栈、学习重点和相关资源链接,并生成相关问题引导用户深入学习。</think>根据您对Web后端实战项目的需求,我为您整理以下实际案例教程资源,结合主流的Java技术栈进行说明: ### 一、Spring Boot基础电商平台(入门级) ```java // ProductController.java示例 @RestController @RequestMapping("/api/products") public class ProductController { @Autowired private ProductService productService; @GetMapping public ResponseEntity<List<Product>> getAllProducts() { return ResponseEntity.ok(productService.getAllProducts()); } @PostMapping public ResponseEntity<Product> createProduct(@RequestBody ProductDTO productDto) { return new ResponseEntity<>(productService.createProduct(productDto), HttpStatus.CREATED); } } ``` 技术栈:Spring Boot 2.x + MyBatis Plus + MySQL 8 + Swagger/Knife4j[^3] 项目亮点: 1. 完整的MVC分层架构(Controller/Service/DAO) 2. RESTful API设计与实现 3. 使用DTO进行数据封装和验证 4. 集成API文档工具 ### 、外卖配送系统(中级实战) 参考苍穹外卖项目,包含以下核心模块: 1. 员工管理模块(JWT身份验证) 2. 订单状态机设计 3. 配送调度算法 4. 支付对接模拟 ```properties # application.properties配置示例 spring.datasource.url=jdbc:mysql://localhost:3306/takeaway spring.jpa.hibernate.ddl-auto=update knife4j.enable=true ``` ### 三、微服务架构实战(高级) 推荐Spring Cloud Alibaba项目: 1. 服务注册与发现(Nacos) 2. 分布式配置中心 3. 服务熔断(Sentinel) 4. 链路追踪(Sleuth + Zipkin) ### 四、学习资源推荐 1. 优快云后端Web实战-MySQL课程(含完整项目代码)[^1] 2. Spring Boot官方教程(含H2内存数据库案例)[^2] 3. 博客系统开发实战(含用户权限管理)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值