MybatisPlus—自定义SQL

目录

1. 自定义SQL介绍

2. 自定义SQL使用步骤 

3. 自定义SQL实例

4.总结


1. 自定义SQL介绍

        介绍:自定义SQL并不是由我们来编写全部SQL语句,而是通过利用MyBatisPlus的Wrapper来构建复杂的Where条件,然后自己定义SQL语句中剩下的部分。


        使用需求:如果我们想要对数据库某字段进行直接赋值,那么可以在Mapper层或者.xml层编写对应的SQL语句。如果我们要对数据库某字段进行特殊赋值或者动态赋值,又或者其他复杂的操作,如:更新字段balance=balance+20,我们不得不在业务层进行编写,而这样会导致代码编写不符合规范(SQL语句需要在Mapper层中编写),但直接编写SQL语句又十分冗长麻烦。因此我们可以使用自定义SQL的功能,将where条件交给MP编写,而剩余的Update、Select等语句由我们自定义编写(如下图所示)。


2. 自定义SQL使用步骤 

        自定义SQL方法在业务层定义where条件和需要使用的参数,并将where条件与参数传入自定义Mapper方法中,最后在Mapper方法或者xml文件中自定义编写剩余的SQL语句。 

 


3. 自定义SQL实例

通过自定义SQL实现如下SQL语句:

update tb_user set balance = balance - 200 WHERE (id IN (1,2,4))
 /*Service层*/@Testvoid testCustomSqlUpdate() {//1. 设置更新条件List<Long> ids = List.of(1L, 2L, 4L);int amount = 200;//2. 定义where条件LambdaQueryWrapper wrapper = new LambdaQueryWrapper<User>().in(User::getId, ids);//3. 调用自定义SQL方法userMapper.updateBalanceByIds(wrapper, amount);}
/*Mapper层*/@Mapperpublic interface UserMapper extends BaseMapper<User> {//如果忘记"ew"可以用WRAPPER的常量代替:@Param(Constants.WRAPPER) void updateBalanceByIds(@Param("ew") LambdaQueryWrapper wrapper, @Param("amount") int amount);}
<!-- xml文件 --><update id="updateBalanceByIds">update tb_user set balance = balance - #{amount} ${ew.customSqlSegment}</update>

4.总结

        总结:自定义SQL方法在业务层定义where条件和需要使用的参数,并将where条件与参数传入自定义Mapper方法中,最后在Mapper方法或者xml文件中自定义编写剩余的SQL语句。

        使用场景:当遇到SQL语句中,除where条件之外的语句很难用MP编写的情况下,可以使用自定义SQL。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/604549.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java 抽象类和接口以及抽象类和接口的区别

抽象类和接口以及抽象类和接口的区别。 类到对象是实例化。对象到类是抽象。 抽象类&#xff1a; 1、什么是抽象类&#xff1f; 类和类之间具有共同特征&#xff0c;将这些共同特征提取出来&#xff0c;形成的就是抽象类。 类本身是不存在的&#xff0c;所以抽象类无法创建对象…

【AI视野·今日CV 计算机视觉论文速览 第283期】Thu, 4 Jan 2024

AI视野今日CS.CV 计算机视觉论文速览 Thu, 4 Jan 2024 Totally 85 papers &#x1f449;上期速览✈更多精彩请移步主页 Daily Computer Vision Papers LEAP-VO: Long-term Effective Any Point Tracking for Visual Odometry Authors Weirong Chen, Le Chen, Rui Wang, Marc P…

13年测试老鸟,性能测试-全链路压测总结,一文打通...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 1、什么是全链路压…

2023 PAT exam (Advanced level) in winter Dec.12nd

A-1 Fill in the NumbersA-2 PeekMax in StackA-3 AB with Binary Search TreesA-4 Transportation Hub A-1 Fill in the Numbers diagonal this word is the most import key in this question. As many people don’t know the meaning of that including me, there’re lo…

2023湾区产城创新大会:培育数字化供应链金融新时代

2023年12月26日&#xff0c;由南方报业传媒集团指导&#xff0c;南方报业传媒集团深圳分社主办的“新质新力——2023湾区产城创新大会”在深圳举行。大会聚集里国内产城研究领域的专家学者以及来自产业园区、金融机构、企业的代表&#xff0c;以新兴产业发展为议题&#xff0c;…

Godot4.2——爬虫小游戏简单制作

目录 一、项目 二、项目功能 怪物 人物 快捷键 分数 游戏说明 提示信息 三、学习视频 UI制作 游戏教程 四、总结 一、项目 视频演示&#xff1a;Godot4爬虫小游戏简单制作_哔哩哔哩bilibili 游戏教程&#xff1a;【小猫godot4入门教程 C#版 已完结】官方入门案例 第…

云渲染有几种方式?适合设计师的渲染方式是哪种?

云渲染是很多公司首选的渲染方式&#xff0c;它能加快渲染速度提高工作效率&#xff0c;那么云渲染有几种渲染方式呢&#xff1f;这次我们一起来看看。 1、离线渲染 离线渲染也被称作预渲染&#xff0c;通常用于对真实感和复杂细节有高要求的场合&#xff0c;如电影、动画、特效…

GPT实战系列-LangChain + ChatGLM3构建天气查询助手

GPT实战系列-LangChain ChatGLM3构建天气查询助手 用ChatGLM的工具可以实现很多查询接口和执行命令&#xff0c;而LangChain是很热的大模型应用框架。如何联合它们实现大模型查询助手功能&#xff1f;例如调用工具实现网络天气查询助手功能。 LLM大模型相关文章&#xff1a; …

深度学习数据集大合集—鱼类数据集

最近收集了一大波有关于各类鱼类的数据集&#xff0c;有淡水鱼、有深海鱼、有鱼的状态、有鱼的分类。大家可以详细查看。废话不多说&#xff0c;接下下来逐一的给大家介绍&#xff01;&#xff01; 1、鱼类检测数据集 包含鱼类的对象检测数据集 本数据集包含4种鱼类及其相关…

移动通信原理与关键技术学习(3)

1.什么是相干解调&#xff1f;什么是非相干解调&#xff1f;各自的优缺点是什么&#xff1f; 相干解调需要在接收端有一个与发送端一样的载波&#xff08;同样的频率和相位&#xff09;&#xff0c;在接收端的载波与发送端载波进行互相关操作&#xff0c;去除载波的影响。相干…

如何使用 CMake 生成一个静态库

文章目录 tutorial_3/CMakeLists.txttutorial_3/src/CMakeLists.txtcmake_tutorial/tutorial_3/src/hello.cpptutorial_3/src/hello.h根目录的 CMakeLists.txtsrc 目录的 CMakeLists.txthello.cpp 和 hello.h构建过程总结 tutorial_3/CMakeLists.txt cmake_minimum_required(V…

cf918div4的F题

Problem - F - Codeforces 这道题有个很简单的思路&#xff0c;也有一个很难的思路&#xff0c;这个很难的思路用到了树状数组(但是是大佬写的)&#xff0c;而简单的思路仅仅用到了归并排序求逆序对(也是一个大佬写的)&#xff0c;而我连简单的思路都没想到&#xff0c;(*/ω&…

Latex + Overleaf 论文写作新手笔记

.tex 文件main.tex 文件 Latex 的文档层次结构不同文档类型的层次结构report 6 层结构实例article 5 层结构实例 Latex 语法图表插入与引用使用 figure 环境来插入图片使用 ref 命令来引用已有的图表格的插入与引用 代码块列表无序列表 itemize有序列表 enumerate 学位论文项目…

Crow:路由局部插件3 调用after_handle

紧接Crow:路由局部插件2 调用before_handle-CSDN博客 完成middleware_call_helper的调用后 把res.complete_request_handler设置为后续处理完handle后将要处理的lambda 然后调用rule->handle,之后返回到Connect::handle,参考 Crow:http请求到Rule绑定的handler_的调用链…

DQL命令查询数据(一)

本课目标 理解查询的相关概念 掌握MySQL的简单查询语句 掌握MySQL中的函数 DQL 语言 DQL&#xff08;Data Query Language 数据查询语言&#xff09;&#xff1a;用于查询数据库对象中所包含的数据 DQL语言主要的语句&#xff1a;SELECT语句 DQL语言是数据库语言中最核心…

CSS3(Flex布局详解)

Flex 基本概念&#xff1a; 在 flex 容器中默认存在两条轴&#xff0c;水平主轴(main axis) 和垂直的交叉轴(cross axis)&#xff0c;这是默认的设置&#xff0c;当然你可以通过修改使垂直方向变为主轴&#xff0c;水平方向变为交叉轴&#xff0c;这个我们后面再说。 在容器中…

vue3学习记录

vue3有选项式API&#xff08;和vue2一样保留this用法&#xff09;和组合式API&#xff08;没有了this的概念&#xff09;&#xff1b;选项式 API 是在组合式 API 的基础上实现的&#xff01; 增加了组合式api&#xff0c;利于代码逻辑的组合&#xff0c;相关联的逻辑汇集在一处…

UseContentHash选项能否在打包AssetBundle时计算可靠的Hash

1&#xff09;UseContentHash选项能否在打包AssetBundle时计算可靠的Hash 2&#xff09;如何清理Native Reserved部分的内存 3&#xff09;Addressables资源完整性校验 4&#xff09;通过Image.color和CanvasRenderer.SetColor修改UI组件颜色的区别 这是第368篇UWA技术知识分享…

C++垃圾回收机制

非托管C C 有垃圾收集&#xff0c;采用Hans-Boehm Garbage Collector的形式。也可能有其他垃圾收集库。 您可以使用使用RAII的智能指针&#xff08;如果指针允许共享访问&#xff0c;则使用引用计数&#xff09;来确定何时删除对象。一个好的智能指针库是Boost的智能指针。绝大…

问题 C: 求逆序对

题目描述 给定一个序列a1,a2,…,an&#xff0c;如果存在i<j并且ai>aj&#xff0c;那么我们称之为逆序对&#xff0c;求逆序对的数目。 注意&#xff1a;n<105&#xff0c;ai<105 输入 第一行为n,表示序列长度。 接下来的n行&#xff0c;第i1行表示序列中的第i…