当前位置: 首页 > news >正文

SQL 查询中的动态字段过滤

这段代码是一个 SQL 查询中的动态字段过滤部分,使用了 MyBatis 的 标签和 标签。以下是逐步的解释:

<!-- 动态字段过滤 --><if test="parameters != null and parameters.size() > 0"><foreach collection="parameters" item="param" index="index" ><if test="param.columnsCode != null and param.searchValue != null">AND EXISTS (SELECT 1FROM JSON_TABLE(dynamic_fields,'$[*]' COLUMNS (columnsCode VARCHAR(255) PATH '$.columnsCode',value VARCHAR(255) PATH '$.value')) AS jtWHERE jt.columnsCode = #{param.columnsCode}AND jt.value LIKE CONCAT('%', #{param.searchValue}, '%'))</if></foreach></if>

1. 动态字段过滤判断

<if test="parameters != null and parameters.size() > 0">

这部分检查 parameters 是否为空且大小大于 0,即 parameters
是一个非空的集合。只有在这个条件为真时,后续的过滤逻辑才会执行。

2. 循环遍历 parameters 集合

<foreach collection="parameters" item="param" index="index">

这部分代码遍历 parameters 集合中的每个元素(每个元素被命名为 param)。 index 是当前遍历元素的索引,param
是当前元素。

3. 动态字段过滤条件判断

<if test="param.columnsCode != null and param.searchValue != null">

这个 标签判断 param.columnsCode 和 param.searchValue 是否都不为空,只有在这两个字段都不为
null 时,才会应用该条件。

4. 构建查询条件

AND EXISTS (SELECT 1FROM JSON_TABLE(dynamic_fields,'$[*]' COLUMNS (columnsCode VARCHAR(255) PATH '$.columnsCode',value VARCHAR(255) PATH '$.value')) AS jtWHERE jt.columnsCode = #{param.columnsCode}AND jt.value LIKE CONCAT('%', #{param.searchValue}, '%')
)
  1. AND EXISTS:这个条件判断是否存在符合特定条件的记录。EXISTS 会检查子查询是否返回结果。

  2. JSON_TABLE:这是MySQL 中的一个函数,用于将 JSON 数据转换成关系型表格形式。这里 dynamic_fields 应该是一个包含 JSON
    数据的列,$[*] 表示遍历 JSON 数组中的每个元素。 columnsCode 和 value:从 JSON 数据中提取字段

  3. columnsCode 和 value,并将其转换为关系型表的列。

  4. WHERE jt.columnsCode = #{param.columnsCode}:匹配 columnsCode 字段的值与传入参数 param.columnsCode 的值相等。

  5. AND jt.value LIKE CONCAT(‘%’, #{param.searchValue}, ‘%’):使用 LIKE
    模糊查询匹配 value 字段中包含 param.searchValue 的值。

5. 结束标签

</if>
</foreach>
</if>

这几个 和 标签用于结束前面相应的 if 和 foreach 标签。

6. DynamicSearchParam 类说明

@Data
public class DynamicSearchParam {private String columnsCode;private String searchValue;
}

DynamicSearchParam 类是一个包含两个属性的 Java 类:

columnsCode:字段名,用来指定 JSON 数据中的某一列。 searchValue:搜索值,用来匹配 JSON 数据中
columnsCode 对应的字段值。 通过 @Data 注解(Lombok 提供的)自动生成了
getter、setter、toString()、equals()、hashCode() 方法。

7. parameters 列表

private List<DynamicSearchParam> parameters;

parameters 是一个包含多个 DynamicSearchParam 对象的列表。每个 DynamicSearchParam对象包含了 columnsCode 和 searchValue,这些将被用来动态构建 SQL 查询条件。

总结:

parameters 是一个包含多个 DynamicSearchParam
对象的列表,每个对象指定了要搜索的字段(columnsCode)以及模糊搜索的值(searchValue)。

SQL 中的 会遍历 parameters 列表,为每个 DynamicSearchParam 对象生成一个 EXISTS子查询,查询 JSON 数据中是否包含指定的字段(columnsCode)和符合条件的(searchValue)。

这样可以实现动态过滤,根据不同的 columnsCode 和 searchValue 对 JSON 数据进行查询。

相关文章:

SQL 查询中的动态字段过滤

这段代码是一个 SQL 查询中的动态字段过滤部分&#xff0c;使用了 MyBatis 的 标签和 标签。以下是逐步的解释&#xff1a; <!-- 动态字段过滤 --><if test"parameters ! null and parameters.size() > 0"><foreach collection"parameters&qu…...

数字IC后端零基础入门基础理论(Day1)

数字IC后端设计导入需要用到的input数据如下图所示。 数字后端零基础入门系列 | Innovus零基础LAB学习Day9 Netlist: 设计的Gate level&#xff08;门级&#xff09;网表。下图所示为一个计数器设计综合后的门级netlist。 从这个netlist中我们看到这个设计顶层的名字叫counte…...

【LC】240. 搜索二维矩阵 II

题目描述&#xff1a; 编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target 。该矩阵具有以下特性&#xff1a; 每行的元素从左到右升序排列。每列的元素从上到下升序排列。 示例 1&#xff1a; 输入&#xff1a;matrix [[1,4,7,11,15],[2,5,8,12,19],[3,6,…...

Redis应用—4.在库存里的应用

大纲 1.库存模块设计 2.库存缓存分片和渐进式同步方案 3.基于缓存分片的下单库存扣减方案 4.商品库存设置流程与异步落库的实现 6.库存入库时"缓存分片写入 渐进式写入 写入失败进行MQ补偿"的实现 7.库存扣减时"基于库存分片依次扣减 合并扣减 扣不了…...

selenium获取请求头

【原创】Selenium获取请求头、响应头-腾讯云开发者社区-腾讯云 selenium 4.0.0 selenium-wire 5.1.0 python 3.10 from seleniumwire import webdriver import time from selenium.webdriver.common.by import By import re def get_request_headers(driver):"""…...

Rust中自定义Debug调试输出

在 Rust 中&#xff0c;通过为类型实现 fmt::Debug&#xff0c;可以自定义该类型的调试输出。fmt::Debug 是标准库中的一个格式化 trait&#xff0c;用于实现 {:?} 格式的打印。这个 trait 通常通过自动派生&#xff08;#[derive(Debug)]&#xff09;来实现&#xff0c;但你也…...

docker离线安装、linux 安装docker

之前写过一篇docker的离线安装&#xff0c;现在从头再看繁琐了&#xff0c;服务器换了&#xff0c;既然要重搭一遍就要改进一下了。下面步入正题&#xff1a; 1.下载离线软件包 https://download.docker.com/linux/static/stable/x86_64/docker-20.10.6.tgz 2.下载安装工具包…...

卓易通:鸿蒙Next系统的蜜糖还是毒药?

哈喽&#xff0c;我是老刘 最近很多人都在问鸿蒙next系统新上线的卓易通和出境易两款应用。 老刘分析了一下这个软件的一些细节&#xff0c;觉得还是蛮有意思的&#xff0c;我觉得可以从使用体验、底层原理和对鸿蒙生态的影响这三个角度来分析一下。 使用体验 性能 看到了一些测…...

AI大模型学习笔记|神经网络与注意力机制(逐行解读)

来源分享链接&#xff1a;通过网盘分享的文件&#xff1a;详解神经网络是如何训练的 链接: https://pan.baidu.com/s/12EF7y0vJfH5x6X-0QEVezg 提取码: k924 内容摘要&#xff1a;本文深入探讨了神经网络与注意力机制的基础&#xff0c;以及神经网络参数训练的过程。以鸢尾花数…...

Linux 操作系统中的管道与共享内存

目录 一、匿名管道 &#xff08;一&#xff09;基本概念 &#xff08;二&#xff09;关键现象 &#xff08;三&#xff09;管道特性 二、命名管道 &#xff08;一&#xff09;基本概念 &#xff08;二&#xff09;关键特性 三、共享内存 &#xff08;一&#xff09;基…...

恢复删除的文件:6个免费Windows电脑数据恢复软件

数据恢复软件可帮助您从众多存储设备中恢复损坏或删除的数据。您可以使用这些文件恢复软件来检索文件、文档、视频、图片等。这些应用程序支持多种标准文件格式&#xff0c;如 PNG、RTF、PDF、HTML、JPG、MP3 等。 经过超过 75 小时的研究&#xff0c;我分析了 25 最佳免费数据…...

linux网络编程 | c | select实现多路IO转接服务器

select实现多路IO转接服务器 基于该视频完成 15-select实现多路IO转接设计思路_哔哩哔哩_bilibili 通过响应式–多路IO转接实现 文章目录 select实现多路IO转接服务器1.思路&功能2.代码实现warp.hwarp.cmulti_select_sever.c运行图 3.代码解释&#xff08;细节&#xf…...

基于前后端分离的食堂采购系统源码:从设计到开发的全流程详解

本篇文章&#xff0c;笔者将从系统设计到开发的全过程进行详解&#xff0c;帮助开发者和企业了解如何高效构建一套完善的食堂采购系统。 一、系统需求分析 在开发一套基于前后端分离的食堂采购系统前&#xff0c;必须对业务需求和功能模块进行详细分析&#xff0c;确保系统设…...

小程序自定义tab-bar,踩坑记录

从官方下载代码 https://developers.weixin.qq.com/miniprogram/dev/framework/ability/custom-tabbar.html 1、把custom-tab-bar 文件放置 pages同级 修改下 custom-tab-bar 下的 JS文件 Component({data: {selected: 0,color: "#7A7E83",selectedColor: "#3…...

游戏引擎学习第52天

仓库 : https://gitee.com/mrxiao_com/2d_game 这节的内容相当多 回顾 在游戏中&#xff0c;实体被分为不同的类别&#xff1a;接近玩家的“高频实体”、距离较远并正在模拟的“低频实体”和不进行更新的“休眠实体”。这些实体会根据它们与玩家的距离进行处理&#xff0c;接…...

【热力学与工程流体力学】流体静力学实验,雷诺实验,沿程阻力实验,丘里流量计流量系数测定,局部阻力系数的测定,稳态平板法测定材料的导热系数λ

关注作者了解更多 我的其他CSDN专栏 过程控制系统 工程测试技术 虚拟仪器技术 可编程控制器 工业现场总线 数字图像处理 智能控制 传感器技术 嵌入式系统 复变函数与积分变换 单片机原理 线性代数 大学物理 热工与工程流体力学 数字信号处理 光电融合集成电路…...

【HTML】根据不同域名设置不同的网站图标(替换 link 中 href 地址)

文章目录 代码实现 <!DOCTYPE html> <html><head><meta charset"utf-8" /><meta http-equiv"x-ua-compatible" content"ieedge,chrome1" /><meta name"viewport" content"widthdevice-width&q…...

使用Navicat从SQL Server导入表数据到MySQL

在表上右键选择导入向导 选择ODBC 1.内输入ip即可&#xff0c;不需要端口号 一定要勾选允许保存密码 选择需要的表&#xff0c;下一步 根据需求&#xff0c;可修改表名、是否新建表 根据需求修改不同表的字段类型和长度 按需选择导入方式...

私有云dbPaaS为何被Gartner技术成熟度曲线标记为“废弃”?

当云计算席卷而来&#xff0c;基于云基础设施的数据库部署也改变了数据库。在传统的私有化部署&#xff08;On-premises&#xff09;和公有云部署&#xff08;Public Cloud&#xff09;之间&#xff0c;不断融合的混合IT&#xff08;Mixed IT&#xff09;形式成为最常见的企业级…...

牛客网 SQL1查询所有列

SQL1查询所有列 select id,device_id,gender,age,university,province from user_profile 每日问题 C 中面向对象编程如何实现数据隐藏&#xff1f; 在C中&#xff0c;面向对象编程&#xff08;OOP&#xff09;通过封装&#xff08;Encapsulation&#xff09;实现数据隐藏。…...

STM32F4基本定时器使用和原理详解

STM32F4基本定时器使用和原理详解 前言如何确定定时器挂载在哪条时钟线上配置及使用方法参数配置PrescalerCounter ModeCounter Periodauto-reload preloadTrigger Event Selection 中断配置生成的代码及使用方法初始化代码基本定时器触发DCA或者ADC的代码讲解中断代码定时启动…...

Caliper 负载(Workload)详细解析

Caliper 负载(Workload)详细解析 负载(Workload)是 Caliper 性能测试的核心部分,它定义了测试期间要执行的具体合约调用行为和交易模式。下面我将全面深入地讲解负载的各个方面。 一、负载模块基本结构 一个典型的负载模块(如 workload.js)包含以下基本结构: use strict;/…...

通过 Ansible 在 Windows 2022 上安装 IIS Web 服务器

拓扑结构 这是一个用于通过 Ansible 部署 IIS Web 服务器的实验室拓扑。 前提条件&#xff1a; 在被管理的节点上安装WinRm 准备一张自签名的证书 开放防火墙入站tcp 5985 5986端口 准备自签名证书 PS C:\Users\azureuser> $cert New-SelfSignedCertificate -DnsName &…...

Leetcode33( 搜索旋转排序数组)

题目表述 整数数组 nums 按升序排列&#xff0c;数组中的值 互不相同 。 在传递给函数之前&#xff0c;nums 在预先未知的某个下标 k&#xff08;0 < k < nums.length&#xff09;上进行了 旋转&#xff0c;使数组变为 [nums[k], nums[k1], …, nums[n-1], nums[0], nu…...

大数据治理的常见方式

大数据治理的常见方式 大数据治理是确保数据质量、安全性和可用性的系统性方法&#xff0c;以下是几种常见的治理方式&#xff1a; 1. 数据质量管理 核心方法&#xff1a; 数据校验&#xff1a;建立数据校验规则&#xff08;格式、范围、一致性等&#xff09;数据清洗&…...

负载均衡器》》LVS、Nginx、HAproxy 区别

虚拟主机 先4&#xff0c;后7...

PostgreSQL 与 SQL 基础:为 Fast API 打下数据基础

在构建任何动态、数据驱动的Web API时&#xff0c;一个稳定高效的数据存储方案是不可或缺的。对于使用Python FastAPI的开发者来说&#xff0c;深入理解关系型数据库的工作原理、掌握SQL这门与数据库“对话”的语言&#xff0c;以及学会如何在Python中操作数据库&#xff0c;是…...

可视化预警系统:如何实现生产风险的实时监控?

在生产环境中&#xff0c;风险无处不在&#xff0c;而传统的监控方式往往只能事后补救&#xff0c;难以做到提前预警。但如今&#xff0c;可视化预警系统正在改变这一切&#xff01;它能够实时收集和分析生产数据&#xff0c;通过直观的图表和警报&#xff0c;让管理者第一时间…...

数据库管理与高可用-MySQL故障排查与生产环境优化

目录 #1.1MySQL单案例故障排查 1.1.1MySQL常见的故障排查 1.1.2MySQL主从故障排查 #2.1MySQL优化 2.1.1硬件方面的优化 2.1.2进程方面的优化 #3.1MySQL存储引擎 3.1.1 MyISAM存储引擎 3.1.2 InnoDB存储引擎 1.1MySQL单案例故障排查 1.1.1MySQL常见的故障排查 &#xff08;1&…...

【异常】极端事件的概率衰减方式(指数幂律衰减)

在日常事件中,极端事件的概率衰减方式并非单一模式,而是取决于具体情境和数据生成机制。以下是科学依据和不同衰减形式的分析: 1. 指数衰减(Exponential Decay) 典型场景:当事件服从高斯分布(正态分布)或指数分布时,极端事件的概率呈指数衰减。 数学形式:概率密度函数…...