动态SQL学习及使用场景(简略)
假设我们有一个商品表,包含id、name、price和category四个字段。现在需要实现修改商品价格的功能,我们可以使用动态SQL实现。
首先,我们需要构造一个SQL语句,根据用户提供的参数来动态生成,具体实现如下:
<update id="updateProductPrice">update product set<if test="price != null">price = #{price},</if><if test="category != null">category = #{category},</if><if test="name != null">name = #{name},</if>where id=#{id}
</update>
以上SQL语句中使用了if标签来判断参数是否为空,如果不为空,就将该参数拼接到SQL语句中。其中,#{变量名}表示变量占位符,可以将参数值动态绑定到SQL语句中。
接下来,我们需要在Java代码中调用这个SQL语句,示例代码如下:
public void updateProductPrice(Product product) {SqlSession sqlSession = sqlSessionFactory.openSession();try {ProductMapper productMapper = sqlSession.getMapper(ProductMapper.class);productMapper.updateProductPrice(product);sqlSession.commit();} finally {sqlSession.close();}
}
以上代码中通过调用SqlSession.getMapper方法来获取Mapper接口实例,然后调用updateProductPrice方法来执行SQL语句。执行SQL语句前需要将参数传入,并将其封装成一个Product对象。
最后,我们在Controller中调用updateProductPrice方法,示例代码如下:
@RequestMapping(value = "/updateProduct", method = RequestMethod.POST)
@ResponseBody
public Map<String, Object> updateProduct(@RequestBody Product product) {Map<String, Object> result = new HashMap<>();try {productDao.updateProductPrice(product);result.put("success", true);result.put("message", "商品信息修改成功");} catch (Exception e) {result.put("success", false);result.put("message", "商品信息修改失败:" + e.getMessage());}return result;
}
以上Controller代码接收前端传来的Product对象,并调用updateProductPrice方法进行商品信息修改。最后将执行结果封装成一个Map对象返回给前端。
<where>标签: 在MyBatis中,<where>标签用于将动态SQL中的WHERE子句包裹起来。它可以自动去除不需要的AND和OR,从而避免在条件中拼接不必要的条件关键字。举个例子:
<select id="getUserList" resultType="User">SELECT * FROM user<where><if test="name != null">AND name = #{name}</if><if test="age != null">AND age = #{age}</if><if test="sex != null">AND sex = #{sex}</if></where>
</select>
在上面的例子中,<where>标签将WHERE子句包裹起来,并在其中使用了<if>标签来判断是否需要添加额外的条件。
<set>标签: <set>标签主要用于将动态SQL中的SET子句包裹起来。SET子句用于更新表中的数据,<set>标签用于动态构建这些更新语句。举个例子:
<update id="updateUser" parameterType="User">UPDATE user<set><if test="name != null">name = #{name},</if><if test="age != null">age = #{age},</if><if test="sex != null">sex = #{sex},</if></set>WHERE id = #{id}
</update>
上面的例子中,<set>标签将SET子句包裹起来,并使用<if>标签动态添加需要更新的列。
<foreach>标签: <foreach>标签主要用于遍历集合或数组,并将其中的元素插入到SQL语句中。它非常适合在IN条件或VALUES列表中使用。举个例子:
<select id="getUserList" resultType="User">SELECT * FROM userWHERE id IN<foreach collection="ids" item="id" open="(" close=")" separator=",">#{id}</foreach>
</select>
上面的例子中,<foreach>标签将ids集合中的元素插入到了IN条件中。
<sql>标签: <sql>标签主要用于将常见的SQL代码块重用。举个例子:
<sql id="selectColumns">name, age, sex
</sql><select id="getUserList" resultType="User">SELECT <include refid="selectColumns"/> FROM user
</select>
上面的例子中,<sql>标签定义了一个常见的SQL代码块,然后在SELECT语句中通过<include>标签来引用它,从而避免了代码重复。
<include>标签: <include>标签用于将其他的SQL代码块插入到当前的SQL语句中。它有助于将大的SQL语句拆分成多个小的代码块,并且可以方便地重用它们。举个例子:
<sql id="selectColumns">name, age, sex
</sql><select id="getUserList" resultType="User">SELECT <include refid="selectColumns"/> FROM user WHERE id = #{id}
</select>
上面的例子中,<include>标签将<sql>标签定义的SQL代码块插入到了SELECT语句中。
相关文章:
动态SQL学习及使用场景(简略)
假设我们有一个商品表,包含id、name、price和category四个字段。现在需要实现修改商品价格的功能,我们可以使用动态SQL实现。 首先,我们需要构造一个SQL语句,根据用户提供的参数来动态生成,具体实现如下: …...
【算法每日一练]-动态规划(保姆级教程 篇13)POJ2686马车旅行 #POJ3254 玉米田 #POJ1185:炮兵阵地
目录 今天知识点 dp每个票的使用情况,然后更新此票状态下的最优解,dp到没有票就行了 dp每行的种植状态,从i-1行进行不断转移 dp每行的种植状态,从i-1和i-2行进行不断转移 POJ2686马车旅行 思路: POJ3254 玉米田…...
工业固体废物智能化综合管控平台
工业固体废物智能化综合管控平台,涵盖产废企业、运输企业、固废处置企 业等不同群体应用,根据不同群体设计不同的业务应用子系统功能,以及各个不 同群体的环保物联网平台子系统功能模块,同时具有移动端的应用APP。 建立产废企业端…...
玩转大数据12:大数据安全与隐私保护策略
1. 引言 大数据的快速发展,为各行各业带来了巨大的变革,也带来了新的安全和隐私挑战。大数据系统通常处理大量敏感数据,包括个人身份信息、财务信息、健康信息等。如果这些数据被泄露或滥用,可能会对个人、企业和社会造成严重的损…...
Qt工程文件分离、Qtimer定时器、Qt Creator 常用快捷键
Qt 工程文件分离 不含 UI 的文件分离 以堆栈窗体的代码为例。 firstpagewidget.h #ifndef FIRSTPAGEWIDGET_H #define FIRSTPAGEWIDGET_H#include <QtWidgets> // 记得修改class firstPageWidget : public QWidget {Q_OBJECT public:explicit firstPageWidget(QW…...
验收支撑-软件项目验收计划书
软件项目验收计划的作用主要有以下几点: 确保项目质量:通过项目验收,客户或相关方可以对项目的成果进行全面、系统的评估,以确保项目达到预期的质量标准。发现和解决问题:在项目开发过程中,难免会存在一些问…...
SQL注入绕过技术
预计更新SQL注入概述 1.1 SQL注入攻击概述 1.2 SQL注入漏洞分类 1.3 SQL注入攻击的危害 SQLMap介绍 2.1 SQLMap简介 2.2 SQLMap安装与配置 2.3 SQLMap基本用法 SQLMap进阶使用 3.1 SQLMap高级用法 3.2 SQLMap配置文件详解 3.3 SQLMap插件的使用 SQL注入漏洞检测 4.1 SQL注入…...
锂电池基础知识及管理方式总结
这两天在排查一个锂电池无法充电的问题,用的是电池管理芯片BQ25713,网上相关的资料也很少,查看数据手册时,里面也有很多术语参数等不是很理解,所以,在此对锂电池的基础知识做个简单的总结,方面后…...
小红书基于零信任 SASE 办公安全解决方案,斩获 “IDC 中国 20 大杰出安全项目”
近日,由 IDC 主办的 2023 全球 CSO 网络安全峰会(中国站)在京举行,峰会荟萃 300 生态伙伴和行业领袖,共同探讨新形势下的数据安全保护,畅议未来网络安全的可靠航道。 会上,“2023 IDC 中国20大杰…...
html通过CDN引入Vue使用Vuex以及Computed、Watch监听
html通过CDN引入Vue使用Vuex以及Computed、Watch监听 近期遇到个需求,就是需要在.net MVC的项目中,对已有的项目的首页进行优化,也就是写原生html和js。但是咱是一个写前端的,写html还可以,.net的话,开发也…...
【LabVIEW学习】5.数据通信之TCP协议,控制电脑的一种方式
一。tcp连接以及写数据(登录) 数据通信--》协议--》TCP 1.tcp连接 创建while循环,中间加入事件结构,创建tcp连接,写入IP地址与端口号 2.写入tcp数据 登录服务器除了要知道IP地址以及端口以外,需要用户名与密…...
uview1 的u-tabs组件在微信小程序中会出现横向滚动条
uview1 的u-tabs组件在微信小程序中会出现横向滚动条,真机才会生效,微信开发者工具没问题包括官方示例也会 原因:未屏蔽微信小程序的滚动条 解决办法:uview-ui中uview-ui/components/u-tabs/u-tabs.vue文件把h5屏蔽滚动条的条件编…...
服务器ipv6地址显示“scope global dadfailed tentative noprefixroute”无法连通的问题处理一例
服务器规模启用ipv6地址后,遇到一起案例 ,配置的服务ipv6地址显示“scope global dadfailed tentative noprefixroute”,无法连通,现将解决过程记录如下。 一、问题情况 1、ipv6信息检查 某台服务器配置ipv6地址后,…...
深度学习学习顺序梳理
https://www.bilibili.com/video/BV1to4y1G7xq/?spm_id_from333.999.0.0&vd_source9607a6d9d829b667f8f0ccaaaa142fcb 1.吴恩达机器学习课程 已学完,时间较久了,后续可以重新听一遍,整理一下笔记 2. 白板推导读西瓜书 统计学习方法看…...
机器学习实验六:聚类
系列文章目录 机器学习实验一:线性回归机器学习实验二:决策树模型机器学习实验三:支持向量机模型机器学习实验四:贝叶斯分类器机器学习实验五:集成学习机器学习实验六:聚类 文章目录 系列文章目录一、实验…...
逆向思考 C. Fence Painting
Problem - 1481C - Codeforces 思路:逆序考虑,因为每一块木板都是被最后一次粉刷所决定的。 从后往前开始,对于 c i c_i ci来说, 如果这个颜色还有没有涂的木板,那么涂到其中一个木板即可如果这个颜色下没有未涂的…...
当当狸AR智能学习图集跨越千年文明传承,邀您“面对面”与虚拟诗人互动对诗
中华传统文化底蕴深厚,余韵悠长。即使经过千年的历史裂变,依然历久铭心慰藉着一代又一代人的灵魂。千百年后的今天,成为了我们独一无二的财富。 如今,国人学习中华传统文化的方式有很多,诗词集、动画影片、诗歌传颂等…...
CESM笔记——component活动状态+compset前缀解析+B1850,BHIST区别
时隔一年没写CSDN笔记了,一些CESM的知识点我都快忘了。诶,主要是在国外办公室的网屏蔽了好多国内的网络,CSDN登不上,回家又不想干活。。。好吧,好多借口。。。 昨天师弟问我一些问题,想想要不可以水一篇小…...
vue 页面跳转时,浏览器上方显示进度条
vue 页面跳转时,浏览器上方显示进度条 文章目录 vue 页面跳转时,浏览器上方显示进度条先看效果一、安装 nprogress二、main.js 引入nprogress1.引入库 三、在router.js中对路由钩子进行设置四、测试 先看效果 vue 页面跳转时,浏览器上方显示进…...
tqdm输出字符串被截断
tqdm输出截断 1.遇到的问题2.tqdm默认的字符串长度是80(ncols属性)3.修改tqdm的ncols属性4.本人字符串长度是64 1.遇到的问题 字符串打印,显示不完整, 2.tqdm默认的字符串长度是80(ncols属性) 3.修改tqdm的…...
谷歌 5 月算法大更新|独立站必看
2026年5月11日至15日,Google完成了本月核心算法的全面推送。这场覆盖全球搜索生态的更新,没有冗长的预热,却在上线后迅速引发跨境SEO、独立站运营、内容创作者群体的剧烈震动。本次更新是Google继3月核心算法后,对搜索质量体系的又…...
FreeRTOS互斥信号量实战:用STM32CubeIDE解决多任务访问共享串口的优先级翻转问题
FreeRTOS互斥信号量实战:用STM32CubeIDE解决多任务访问共享串口的优先级翻转问题 在嵌入式系统开发中,多任务并发访问共享资源是一个常见且棘手的问题。想象一下这样的场景:你的STM32设备上有两个任务需要向同一个串口发送数据——一个高优先…...
Pandas 图表的威力:后端
原文:towardsdatascience.com/the-power-of-pandas-plots-backends-6a08d52071d2?sourcecollection_archive---------9-----------------------#2024-08-30 从 Pandas 中轻松创建交互式图形 https://medium.com/petoulemonde?sourcepost_page---byline--6a08d520…...
为开发者工具注入情感分析能力:开源库ai-devtools-sentiment实战指南
1. 项目概述:一个为开发者工具注入情感分析能力的开源库最近在折腾一些开发者工具,比如代码审查机器人、文档生成器或者IDE插件,我总感觉它们冷冰冰的。它们能告诉你代码有语法错误,能提示你某个API已废弃,但它们无法感…...
5G入网第一步:手把手拆解Msg3 PUSCH传输的时频资源分配(附避坑指南)
5G入网第一步:手把手拆解Msg3 PUSCH传输的时频资源分配(附避坑指南) 当5G终端尝试接入网络时,随机接入流程中的Msg3 PUSCH传输往往是工程师们遇到的第一个技术深水区。作为首个由基站调度的上行共享信道传输,Msg3承载着…...
Cyber Engine Tweaks终极指南:3步解锁赛博朋克2077的完整定制体验
Cyber Engine Tweaks终极指南:3步解锁赛博朋克2077的完整定制体验 【免费下载链接】CyberEngineTweaks Cyberpunk 2077 tweaks, hacks and scripting framework 项目地址: https://gitcode.com/gh_mirrors/cy/CyberEngineTweaks 你是否想让《赛博朋克2077》运…...
别再只会用DC-DC了!手把手教你用电荷泵搞定液晶屏的VGH和VGL电压
电荷泵实战:低成本实现LCD屏VGH/VGL电压的工程方案 在TFT-LCD驱动电路设计中,VGH(栅极开启电压)和VGL(栅极关闭电压)的生成一直是硬件工程师面临的挑战。传统方案多依赖DC-DC转换器,但面对16.4V…...
Windows Node.js版本管理实战:NVM-Windows配置与部署解决方案
Windows Node.js版本管理实战:NVM-Windows配置与部署解决方案 【免费下载链接】nvm-windows A node.js version management utility for Windows. Ironically written in Go. 项目地址: https://gitcode.com/gh_mirrors/nv/nvm-windows NVM-Windows是Windows…...
kernelbase.dll 怎么修复?按电脑小白能看懂的步骤来
看到 kernelbase.dll 缺失,很多人会担心是不是系统坏了。其实大多数 kernelbase.dll 报错都能按步骤排查,不需要一开始就重装系统,也不需要马上去下载单个 DLL 文件。下面这套方法按普通用户能操作的顺序来写。每一步只处理一个方向ÿ…...
OpenWebUI智能管道:连接本地AI模型与高性能推理后端
1. 项目概述:一个连接OpenWebUI与本地AI模型的智能管道最近在折腾本地大语言模型(LLM)的朋友,估计都绕不开OpenWebUI(原名Ollama WebUI)这个项目。它提供了一个极其美观、功能强大的Web界面,让我…...
