【MybatisPlus】条件构造器、自定义SQL、Service接口

🐌个人主页: 🐌 叶落闲庭
💨我的专栏:💨
c语言
数据结构
javaEE
操作系统
Redis
石可破也,而不可夺坚;丹可磨也,而不可夺赤。
MybatisPlus
- 一、条件构造器
- 1.1 基于QueryWrapper查询
- 1.2 基于QueryWrapper修改
- 1.3 基于UpdateWrapper修改
- 1.4 基于LambdaQueryWrapper查询
- 二、自定义SQL
- 2.1 基于Wrapper来构建where条件
- 2.2 在mapper>方法参数中用Param注解声明wrapper变量名称,必须是ew
- 2.3 自定义SQL,并使用Wrapper条件
- 三、Service接口
- 3.1 Service接口基本用法
一、条件构造器
MybatisPlus支持各种复杂的where条件,可以满足日常开发的所有需求:




BaseMapper中的方法参数可以是一个条件构造器Wrapper,通过继承关系可以看出查询的条件构造器(QueryWrapper)和修改的条件构造器(UpdateWrapper)都继承自AbstractWrapper,在AbstractWrapper中有多个方法可以使用,如eq表示等于,ge表示大于等于等等,只要在where条件中用到的都可以在AbstractWrapper中对应的方法实现。
而QueryWrapper和UpdateWrapper处理继承父类AbstractWrapper的所有功能外,还拓展了自己的功能,QueryWrapper就是在父类的基础上拓展类select的功能,同理UpdateWrapper就是拓展了更新相关的功能,即setSql方法,通过字符串的形式把set的部分写出来,然后拼到sql语句中。


还有一个构造器是在构造条件时基于Lambda的语法实现上述功能的
1.1 基于QueryWrapper查询
@Test
void testQueryWrapper() {//1.构建查询条件QueryWrapper<User2> wrapper = new QueryWrapper<User2>().select("id","username","password").like("username","a");//2.查询List<User2> user2s = user2Mapper.selectList(wrapper);user2s.forEach(System.out::println);
}
1.2 基于QueryWrapper修改
@Test
void testUpdateByQueryWrapper() {//要更新的数据User2 user2 = new User2();user2.setPassword("000");//更新的条件QueryWrapper<User2> wrapper = new QueryWrapper<User2>().eq("username","zhaoliu");//执行更新user2Mapper.update(user2,wrapper);
}
1.3 基于UpdateWrapper修改
@Test
void testUpdateWrapper() {UpdateWrapper<User2> wrapper = new UpdateWrapper<User2>().setSql("password = '111'").in("id",1,3,4);//执行更新user2Mapper.update(null,wrapper);
}
1.4 基于LambdaQueryWrapper查询
@Test
void testLambdaQueryWrapper() {//1.构建查询条件LambdaQueryWrapper<User2> wrapper = new LambdaQueryWrapper<User2>().select(User2::getId,User2::getUsername,User2::getPassword).like(User2::getUsername,"a");//2.查询List<User2> user2s = user2Mapper.selectList(wrapper);user2s.forEach(System.out::println);
}
二、自定义SQL
- 我们可以利用MybatisPlus的Wrapper来构建复杂的where条件,然后自己定义SQL语句中剩下的部分
2.1 基于Wrapper来构建where条件
@Test
void testCustomSqlUpdate() {//更新条件String password = "333";//执行更新QueryWrapper<User2> wrapper = new QueryWrapper<User2>().in("id",2,5,6);//调用自定义方法user2Mapper.updatePwdByIds(wrapper,password);
}
2.2 在mapper>方法参数中用Param注解声明wrapper变量名称,必须是ew
void updatePwdByIds(@Param("ew") QueryWrapper<User2> wrapper,@Param("password") String password);
2.3 自定义SQL,并使用Wrapper条件
@Update("update tb_user2 set password = #{password} ${ew.customSqlSegment}")
void updatePwdByIds(@Param("ew") QueryWrapper<User2> wrapper,@Param("password") String password);
三、Service接口
3.1 Service接口基本用法
- 自定义Service接口继承IService接口
public interface IUserService extends IService<User2> {
}
- 自定义Service实现类,实现自定义接口并继承Servicelmpl类
public class UserServiceImpl extends ServiceImpl<User2Mapper,User2> implements IUserService {
}
- Service新增:
@Test
void testSaveUser() {User2 user = new User2();user.setId(7);user.setUsername("老七");user.setPassword("777");userService.save(user);
}
- Service查询:
@Test
void testQuery() {List<Integer> ids = new ArrayList<>();ids.add(1);ids.add(3);ids.add(5);List<User2> user2s = userService.listByIds(ids);user2s.forEach(System.out::println);
}
相关文章:
【MybatisPlus】条件构造器、自定义SQL、Service接口
🐌个人主页: 🐌 叶落闲庭 💨我的专栏:💨 c语言 数据结构 javaEE 操作系统 Redis 石可破也,而不可夺坚;丹可磨也,而不可夺赤。 MybatisPlus 一、条件构造器1.1 基于QueryW…...
数组计算广播
Numpy数组不需要循环遍历,即可对每个元素执行批量的算术运算操作(矢量化运算)。当两个数组大小(Numpy.shape)不同时,进行算术运算会出现广播机制。 数组广播 数组在进行矢量化运算的时,要求数组…...
代码解读:Zero-shot 视频生成任务 Text2Video-Zero
Diffusion Models视频生成-博客汇总 前言:上一篇博客《【ICCV 2023 Oral】解读Text2Video-Zero:解锁 Zero-shot 视频生成任务》解读了这篇论文《Text2Video-Zero: Text-to-Image Diffusion Models are Zero-Shot Video Generators》。这篇论文的创新点比较多,含金量很高,而…...
hub.docker访问不了的问题(一步解决)
暂时我也不清楚,但是下面这个网址可以用(可以先用着)Docker Hub Container Image Library | App Containerization (axlinux.top)https://hub.axlinux.top/...
[.NET] Speex 语音编解码介绍, 使用, 代码示例
Speex 是一个开源的, 适合语音编解码的算法, 常应用于网络电话中. 在下面的的介绍中, 我们将使用 SpeexSharp 对 Speex 编码在 .NET 中的使用做介绍 SpeexSharp 可以在 nuget 中直接安装, 并且已经封装了编解码器的类供使用. 如果你不希望了解 Speex 的具体编解码过程, 可以忽…...
小样本目标检测(Few-Shot Object Detection)综述
背景 前言:我的未来研究方向就是这个,所以会更新一系列的文章,就关于FSOD,如果有相同研究方向的同学欢迎沟通交流,我目前研一,希望能在研一发文,目前也有一些想法,但是具体能不能实现还要在做的过程中慢慢评估和实现.写文的主要目的还是记录,避免重复劳动,我想用尽量简洁的语言…...
【解决问题】---- 解决 avue-crud 表格勾选数据翻页后界面保持选中
1. 错误预览 第一页选择【7、8、9、10】 直接点击第三页未进行选择 直接点击第四页未进行选择 2. 问题总结 通过测试可以看到,页面的选择项会影响到其他页面的选择;点击保存,返回的数据却是真真选择的数据;数据在选择渲染…...
JL-03小型气象站气象环境在线监测设备自动上传并保存数据
JL-03小型气象站产品概述 小型气象站用于对风速、风向、雨量、空气温度、空气湿度、太阳辐射、光照强度、土壤温度、土壤湿度、蒸发量、大气压力等气象要素进行现场监测。既可以通过无线通讯将数据传送至云平台,又可以通过配套的数据采集通讯线与计算机进行连接&am…...
Ansible的变量(vars,register,set_fact)
环境 控制节点:Ubuntu 22.04Ansible 2.10.8管理节点:CentOS 8 概述 vars :Ansible关键字,用在play、role、block、task上register :Ansible关键字,用在task上。注意它是一个返回值,可能需要用…...
麒麟KYLINIOS软件仓库搭建03-软件仓库添加新版本的软件包
原文链接:麒麟KYLINIOS软件仓库搭建03-软件仓库添加新版本的软件包 hello,大家好啊,今天给大家带来麒麟桌面操作系统软件仓库搭建的文章03-软件仓库添加新版本的软件包,本篇文章主要给大家介绍了如何在麒麟桌面操作系统2203-x86版…...
监控系统是怎么组的(sentry)
搭建sentry监控平台,实现前后端异常监控。——从零开始搭建一个高颜值后台管理系统全栈框架(十六) - 掘金...
Java --- 直接内存
一、直接内存 1、不是虚拟机运行时数据区的一部分,也不是《Java虚拟机规范》中定义的内存区域。 2、直接内存是在Java堆外的,直接向系统申请的内存区间。 3、来源于NIO,通过存在堆中的DirectByteBuffer操作Native内存。 4、访问直接内存的…...
数据结构与算法之排序: Leetcode 21. 合并两个有序链表 (Typescript版)
合并两个有序链表 https://leetcode.cn/problems/merge-two-sorted-lists/ 描述 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例 1 输入:l1 [1,2,4], l2 [1,3,4] 输出:[1,1,2,3,4,4]示例 …...
AIGC:使用bert_vits2实现栩栩如生的个性化语音克隆
1 VITS2模型 1.1 摘要 单阶段文本到语音模型最近被积极研究,其结果优于两阶段管道系统。以往的单阶段模型虽然取得了较大的进展,但在间歇性非自然性、计算效率、对音素转换依赖性强等方面仍有改进的空间。本文提出VITS2,一种单阶段的文本到…...
2023年CKA考试真题及注意事项
2023年CKA考试真题及注意事项 注意事项考试题目原题解析1.RBAC2.节点维护3.K8S组件升级 1.28.0升级到1.28.14.Etcd备份与恢复5.NetworkPolicy6.Service7.Ingress8.指定节点部署9.检查Node节点健康状态10.一个Pod多个容器11.监控Pod度量指标12.监控Pod日志13.PersistentVolumeCl…...
云计算运维面试
一、Linux的启动过程 1.加电 2.加载bios设置 3.加载grub 4. 加载内核系统到内存中 5.加载配置文件 6.加载内核模块 7.完成相应初始化工作和启动相应服务 8.启动系统进程 9.出现登录界面 10.开机自启动完成 二、查看系统的版本和内核 1、 查看版本 cat /etc/redha…...
Qt实现TCP调试助手 - 简述如何在Qt中实现TCP多并发
简介 软件开发中,可能经常会用到TCP调试工具。本人使用QT开发了一款TCP调试工具,方便大家使用。本文章主要介绍下,该工具的功能,以及如何在Qt中实现TCP服务器的并发。 界面展示 安装界面 桌面图标。安装后会生成桌面图标&#…...
【Python OpenCV】OpenCV介绍
文章目录 前言一、OpenCV简介二、基本功能三、实际应用场景四、Python安装OpenCV总结 前言 OpenCV(Open Source Computer Vision Library)是一个开源的计算机视觉和图像处理库,它提供了丰富的工具和函数,用于处理图像和视频。由于…...
11-09 周四 CNN 卷积神经网络基础知识
11-09 周四 CNN 卷积神经网络 时间版本修改人描述2023年11月9日09:38:12V0.1宋全恒新建文档 简介 学习一下CNN,卷积神经网络。使用的视频课程。视觉相关的任务: 人脸识别 卷积网络与传统网络的区别: <img altimage-20231109094400591 s…...
Vue.js中的路由(router)和Vue Router的作用?
聚沙成塔每天进步一点点 ⭐ 专栏简介 前端入门之旅:探索Web开发的奇妙世界 欢迎来到前端入门之旅!感兴趣的可以订阅本专栏哦!这个专栏是为那些对Web开发感兴趣、刚刚踏入前端领域的朋友们量身打造的。无论你是完全的新手还是有一些基础的开发…...
shell脚本--常见案例
1、自动备份文件或目录 2、批量重命名文件 3、查找并删除指定名称的文件: 4、批量删除文件 5、查找并替换文件内容 6、批量创建文件 7、创建文件夹并移动文件 8、在文件夹中查找文件...
使用分级同态加密防御梯度泄漏
抽象 联邦学习 (FL) 支持跨分布式客户端进行协作模型训练,而无需共享原始数据,这使其成为在互联和自动驾驶汽车 (CAV) 等领域保护隐私的机器学习的一种很有前途的方法。然而,最近的研究表明&…...
HTML 列表、表格、表单
1 列表标签 作用:布局内容排列整齐的区域 列表分类:无序列表、有序列表、定义列表。 例如: 1.1 无序列表 标签:ul 嵌套 li,ul是无序列表,li是列表条目。 注意事项: ul 标签里面只能包裹 li…...
vue3+vite项目中使用.env文件环境变量方法
vue3vite项目中使用.env文件环境变量方法 .env文件作用命名规则常用的配置项示例使用方法注意事项在vite.config.js文件中读取环境变量方法 .env文件作用 .env 文件用于定义环境变量,这些变量可以在项目中通过 import.meta.env 进行访问。Vite 会自动加载这些环境变…...
蓝桥杯3498 01串的熵
问题描述 对于一个长度为 23333333的 01 串, 如果其信息熵为 11625907.5798, 且 0 出现次数比 1 少, 那么这个 01 串中 0 出现了多少次? #include<iostream> #include<cmath> using namespace std;int n 23333333;int main() {//枚举 0 出现的次数//因…...
Android第十三次面试总结(四大 组件基础)
Activity生命周期和四大启动模式详解 一、Activity 生命周期 Activity 的生命周期由一系列回调方法组成,用于管理其创建、可见性、焦点和销毁过程。以下是核心方法及其调用时机: onCreate() 调用时机:Activity 首次创建时调用。…...
Python Ovito统计金刚石结构数量
大家好,我是小马老师。 本文介绍python ovito方法统计金刚石结构的方法。 Ovito Identify diamond structure命令可以识别和统计金刚石结构,但是无法直接输出结构的变化情况。 本文使用python调用ovito包的方法,可以持续统计各步的金刚石结构,具体代码如下: from ovito…...
在 Spring Boot 中使用 JSP
jsp? 好多年没用了。重新整一下 还费了点时间,记录一下。 项目结构: pom: <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://ww…...
Vue 模板语句的数据来源
🧩 Vue 模板语句的数据来源:全方位解析 Vue 模板(<template> 部分)中的表达式、指令绑定(如 v-bind, v-on)和插值({{ }})都在一个特定的作用域内求值。这个作用域由当前 组件…...
DeepSeek源码深度解析 × 华为仓颉语言编程精粹——从MoE架构到全场景开发生态
前言 在人工智能技术飞速发展的今天,深度学习与大模型技术已成为推动行业变革的核心驱动力,而高效、灵活的开发工具与编程语言则为技术创新提供了重要支撑。本书以两大前沿技术领域为核心,系统性地呈现了两部深度技术著作的精华:…...
