news 2026/4/22 5:17:39

SpringCloud 系列教程:微服务的未来(二)Mybatis-Plus的条件构造器、自定义SQL、Service接口基本用法

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
SpringCloud 系列教程:微服务的未来(二)Mybatis-Plus的条件构造器、自定义SQL、Service接口基本用法

本篇博客将深入探讨MyBatis-Plus的三个核心功能:条件构造器自定义 SQLService 接口的基本用法。通过对这些功能的学习和掌握,开发者能够更加高效地使用 MyBatis-Plus 进行业务开发。

目录

前言

条件构造器

?自定义SQL

?Service接口基本用法

总结


前言

在现代 Java 开发中,MyBatis-Plus(简称 MP)作为 MyBatis 的增强工具,已经成为了开发者提高开发效率的利器。它通过简化 MyBatis 的操作,提供了多种便捷的功能,如自动生成 SQL、内置条件构造器、分页查询等。与 MyBatis 相比,MyBatis-Plus 更加简洁和高效,尤其适用于快速开发场景。

本篇博客将深入探讨MyBatis-Plus的三个核心功能:条件构造器自定义 SQLService 接口的基本用法。通过对这些功能的学习和掌握,开发者能够更加高效地使用 MyBatis-Plus 进行业务开发。


条件构造器

MyBatisPlus支持各种复杂的where条件,可以满足日常开发的所有需求。

查询名字中带o的,存款大于等于1000猿的人的id、username、info、balance字段

select id,username,info,balance from user where username like ? and balance >= ? @Test void testQueryUser() { //构造查询条件 QueryWrapper<User> wrapper = new QueryWrapper<User>() .select("id","username","info","balance") .like("username","o") .ge("balance",1000); //查询 List<User> userList = userMapper.selectList(wrapper); userList.forEach(System.out::println); }

更新用户名为jack的用户的余额为2000

update user set balance = 2000 where username = "jack" @Test void testUpdateByQueryMapper() { //需要更新的数据 User user = new User(); user.setBalance(2000); //更新的条件 QueryWrapper<User> wrapper = new QueryWrapper<User>() .eq("username","jack"); //执行更新 userMapper.update(user,wrapper); } @Test void testUpdateByQueryMapper() { //更新的条件 UpdateWrapper<User> wrapper = new UpdateWrapper<User>() .set("balance",20) .eq("username","Jack"); //执行更新 userMapper.update(null,wrapper); }

更新id为1,2,4的用户的余额,扣200

update user set balance = balance - 200 where id in (1,2,4); @Test void testUpdateWrapper(){ List<Long> ids = List.of(1L, 2L, 4L); UpdateWrapper<User> wrapper = new UpdateWrapper<User>() .setSql("balance = balance - 200") .in("id",ids); userMapper.update(null,wrapper); }

查询表中username模糊匹配o和balance >= 100的user中id、username、info、balance。

@Test void testLambdaWrapper(){ //构造查询条件 LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<User>() .select(User::getId,User::getUsername,User::getInfo,User::getBalance) .like(User::getUsername,"o") .ge(User::getBalance,100); List<User> users = userMapper.selectList(wrapper); users.forEach(System.out::println); }

条件构造器的用法:

  • QueryWrapper和LambdaQueryWrapper通常用来构建select、delete、update的where条件部分
  • UpdateWrapper和LambdaUpdateWrapper通常只有在set语句比较特殊才使用
  • 尽量使用LambdaQueryWrapper和LambdaUpdateWrapper避免硬编码

自定义SQL

我们可以利用MyBatisPlus的Wrapper来构建复杂的Where条件,然后自己定义SQL语句中剩下的部分。

将id在指定范围内的用户(例如1,2,4)的余额扣减指定值。

<update id = "updateBalanceByIds"> update user set balance = balance - #{amount} where id in <foreach collection="ids" separator=",",item="id" open="(" close=")"> #{id} </foreach> </update>

我们可以利用MvBatis Plus的包装器来构建复杂的Where条件,然后自己定义SOL语句中剩下的部分。

(1)基于包装器构建其中条件

List<Long> ids = List.of(1L, 2L, 4L); //构建条件 LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<User>() .in(User::getId,ids); //自定义SQL方法调用 userMapper.updateBalanceByIds(wrapper,amount);

(2)在mapper方法参数中用Param注解声明wrapper变量名称,必须是ew

void updateBalanceByIds(@Param("ew") LambdaQueryWrapper<User> wrapper,@Param("amount") int amount);

(3)自定义SQL,并使用Wrapper条件

<update id="updateBalanceByIds"> update user set balance = balance - #{amount} ${ew.customSqlSegment} </update>

userMapper类

package com.itheima.mp.mapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.toolkit.Constants; import com.itheima.mp.domain.po.User; import org.apache.ibatis.annotations.Param; public interface UserMapper extends BaseMapper<User> { void updateBalanceByIds(@Param(Constants.WRAPPER)LambdaQueryWrapper<User> wrapper, @Param("amount") int amount); }

测试方法

@Test void testCustomSqlUpdate(){ //更新条件 List<Long> ids = List.of(1L, 2L, 4L); int amount = 200; //定义条件 LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<User>() .in(User::getId,ids); //自定义方法 userMapper.updateBalanceByIds(wrapper,amount); }

Service接口基本用法

自定义接口需要去继承IService接口,实现类需要继承ServiceImpl

IUserService接口

package com.itheima.mp.service; import com.baomidou.mybatisplus.extension.service.IService; import com.itheima.mp.domain.po.User; import org.springframework.stereotype.Service; public interface IUserService extends IService<User> { }

UserServiceImpl类

package com.itheima.mp.service.impl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.itheima.mp.domain.po.User; import com.itheima.mp.mapper.UserMapper; import com.itheima.mp.service.IUserService; import org.springframework.stereotype.Service; @Service public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IUserService { }

测试类

package com.itheima.mp.service; import com.itheima.mp.domain.po.User; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import java.time.LocalDateTime; @SpringBootTest class IUserServiceTest { @Autowired private IUserService userService; @Test void testsaveUser(){ User user = new User(); user.setUsername("XiaoHong"); user.setPassword("123456"); user.setPhone("18688990982"); user.setBalance(1500); user.setInfo("{"age": 23, "intro": "英文老师", "gender": "female"}"); user.setCreateTime(LocalDateTime.now()); user.setUpdateTime(LocalDateTime.now()); userService.save(user); } }


总结

通过本篇博客的讲解,开发者应该对 MyBatis-Plus 的三个核心功能有了一个清晰的认识:

  1. 条件构造器QueryWrapper)使得查询条件构建更加简洁,极大减少了编写 SQL 语句的复杂度。
  2. 自定义 SQL使得在复杂的业务需求下能够灵活应对,提供了更大的自由度。
  3. Service 接口基本用法通过继承ServiceImpl,大大简化了 CRUD 操作的实现,提升了开发效率。

这些功能不仅能够帮助我们提高开发效率,还能够减少代码冗余,提升代码的可读性和维护性。在实际的开发中,MyBatis-Plus 提供的这些工具将是日常工作中的好帮手。

希望通过本篇博客,读者能够更好地理解 MyBatis-Plus,提升自己的开发技能,快速构建高效、优雅的业务系统。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/20 17:08:15

PDF-Extract-Kit部署指南:多节点集群配置详解

PDF-Extract-Kit部署指南&#xff1a;多节点集群配置详解 1. 引言 1.1 技术背景与业务需求 随着企业级文档处理需求的快速增长&#xff0c;单机版PDF解析工具已难以满足高并发、大规模批量处理的场景。传统PDF提取方案在面对成千上万页的学术论文库、财务报表或法律文书时&a…

作者头像 李华
网站建设 2026/4/17 18:53:58

YimMenu终极使用指南:免费GTA5辅助工具完整配置手册

YimMenu终极使用指南&#xff1a;免费GTA5辅助工具完整配置手册 【免费下载链接】YimMenu YimMenu, a GTA V menu protecting against a wide ranges of the public crashes and improving the overall experience. 项目地址: https://gitcode.com/GitHub_Trending/yi/YimMen…

作者头像 李华
网站建设 2026/4/21 17:03:11

SpringCloud实战【九】 SpringCloud服务间调用

目录 1 服务间调用 2 RestTemplate方式调用 2.1 创建演示项目 2.2 RestTemplate 实例化 2.3?RestTemplate 调用方式一 2.4?RestTemplate 调用方式二 2.5?RestTemplate 调用方式三 3 负载均衡策略 3.1 默认负载均衡策略? 3.2 编码指定负载均衡策略 3.3 配置文件指…

作者头像 李华
网站建设 2026/4/18 6:45:43

四层STM32最小系统板设计:Altium Designer手把手教程

四层STM32最小系统板设计&#xff1a;从原理到实战的工程全解析你有没有遇到过这样的情况&#xff1f;明明代码写得没问题&#xff0c;外设也配置正确&#xff0c;可ADC采样就是跳动、USB通信老是断连、系统偶尔莫名其妙重启……最后排查半天&#xff0c;发现根源竟然是PCB布局…

作者头像 李华
网站建设 2026/4/18 23:44:02

网盘直链下载助手:告别龟速下载,享受极速体验![特殊字符]

网盘直链下载助手&#xff1a;告别龟速下载&#xff0c;享受极速体验&#xff01;&#x1f680; 【免费下载链接】Online-disk-direct-link-download-assistant 可以获取网盘文件真实下载地址。基于【网盘直链下载助手】修改&#xff08;改自6.1.4版本&#xff09; &#xff0c…

作者头像 李华
网站建设 2026/4/21 21:34:25

XAPK转换神器:3分钟极速解决安卓应用安装难题

XAPK转换神器&#xff1a;3分钟极速解决安卓应用安装难题 【免费下载链接】xapk-to-apk A simple standalone python script that converts .xapk file into a normal universal .apk file 项目地址: https://gitcode.com/gh_mirrors/xa/xapk-to-apk 还在为XAPK文件无法…

作者头像 李华