当前位置: 首页 > 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 数据进行查询。

http://www.lryc.cn/news/504971.html

相关文章:

  • 数字IC后端零基础入门基础理论(Day1)
  • 【LC】240. 搜索二维矩阵 II
  • Redis应用—4.在库存里的应用
  • selenium获取请求头
  • Rust中自定义Debug调试输出
  • docker离线安装、linux 安装docker
  • 卓易通:鸿蒙Next系统的蜜糖还是毒药?
  • AI大模型学习笔记|神经网络与注意力机制(逐行解读)
  • Linux 操作系统中的管道与共享内存
  • 恢复删除的文件:6个免费Windows电脑数据恢复软件
  • linux网络编程 | c | select实现多路IO转接服务器
  • 基于前后端分离的食堂采购系统源码:从设计到开发的全流程详解
  • 小程序自定义tab-bar,踩坑记录
  • 游戏引擎学习第52天
  • 【热力学与工程流体力学】流体静力学实验,雷诺实验,沿程阻力实验,丘里流量计流量系数测定,局部阻力系数的测定,稳态平板法测定材料的导热系数λ
  • 【HTML】根据不同域名设置不同的网站图标(替换 link 中 href 地址)
  • 使用Navicat从SQL Server导入表数据到MySQL
  • 私有云dbPaaS为何被Gartner技术成熟度曲线标记为“废弃”?
  • 牛客网 SQL1查询所有列
  • 【经验分享】OpenHarmony5.0.0-release编译RK3568不过问题(已解决)
  • 如何使用ERC404协议
  • 240004基于Jamva+ssm+maven+mysql的房屋租赁系统的设计与实现
  • ORACLE RAC ADG备库报错ORA-04021: timeout occurred while waiting to lock object
  • CAPL如何设置或修改CANoe TCP/IP协议栈的底层配置
  • git使用教程(超详细)-透彻理解git
  • 【2024 Dec 超实时】编辑安装llama.cpp并运行llama
  • Docker介绍、安装、namespace、cgroup、镜像-Dya 01
  • docker 搭建自动唤醒UpSnap工具
  • 3D一览通在线协同设计,助力汽车钣金件设计与制造数字化升级
  • 基于Matlab实现三维地球模型(源码)