如何根据用户的选择动态生成SQL查询?

2023-12-02

这与以下问题是同一个问题:

如何根据用户的选择动态生成SQL查询?

唯一的区别是,我有兴趣看到也使用 Java/JPA(+可能是 EclipseLink 或 Hibernate 特定扩展)的解决方案。

我需要创建一个 GUI,用户可以使用它选择多个属性,这些属性将用于查询数据库以找到合适的人。我正在寻找如何根据用户的选择动态生成数据库查询的想法。

查询将包含多个字段,但为了了解这个想法,我将仅包含以下三个字段作为示例:

  • 职业- 可以有 0 到 n 个职业字符串。如果给出职业字符串,其中之一必须匹配。

  • Age- 年龄可以表示为:

    1. 精确匹配 (30)
    2. 范围(例如 30-40)
    3. 小于某个值 (-40)
    4. 超过一个值 (30-)

年龄参数在查询中是可选的。此外,用户可以指定年龄是否为必填参数。如果不是必需的,并且某人的个人资料中没有年龄,则该人的年龄标准将被忽略。

  • Height- 与年龄相似

示例查询:

没有给出标准:

select * from persons

仅给出了职业:

select * from persons where occupation = 'dentist'

给出了几个职业:

select * from persons where (occupation = 'dentist' or occupation = 'engineer')

年龄被指定为大于值,并且它需要存在于人员的个人资料中:

select * from persons where age >= 30

身高已给出一个范围,并且不需要存在于人员的个人资料中:

select * from persons where (height is null or (height >= 30 and height <= 40))

不同标准的组合:

select * from persons where occupation = 'dentist' and age >= 30 and (height is null or (height >= 30 and height <= 40))

我已经实现了能够将查询生成为字符串的代码,但它肯定不太漂亮。我正在寻找实现这一目标的最有效和最漂亮的方法。


我认为最好的工具有很多不同的querydsl, 鱼雷查询 e 对象查询,这三个允许编写类型安全查询,否则您可以使用 criteria api,如果您也使用 jpa 2JPA2 类型安全查询.

使用所有这些工具,您可以在运行时构建查询!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何根据用户的选择动态生成SQL查询? 的相关文章

随机推荐

  • python多线程比串行慢?

    我正在尝试找出Python 中的多线程编程 这是我想要比较串行和并行速度的简单任务 import threading import Queue import time import math def sinFunc offset n res
  • Excel Interop - 如何更改命名范围

    我有一个 Excel 模板文件 我从 SQL Server OLEDB 连接器将数据填充到其中 该文件包含一些引用数据库填充的数据集的数据透视表 目前我所做的是使用 Data A K 范围选择工作表中的所有行 这会带来数据透视表中显示空白值
  • 使用 jQuery 使用数据属性对元素进行排序

    只是想让你知道 我是一个菜鸟 我尝试为我的网站上的菜单导航编写特定功能 http thomasmedicus at 我希望我网站上的访问者能够按 日期 或 相关性 对我的项目进行排序 我创建了这张图片 以便您可以更好地了解我 preview
  • 在 Excel 2013 中使用宏设置打印区域

    在 Excel 2013 中 工作表名为 Tags 我在尝试着设置打印区域 from A2直到页尾 以列结束L Worksheets Tags PageSetup PrintArea Worksheets Tags Range Cells
  • 为什么我的模型预测相同的标签?

    我正在训练一个小型网络 训练似乎进展顺利 val 损失减少 验证准确度达到 80 左右 一旦没有更多改进 它实际上会停止训练 耐心 10 它训练了 40 个 epoch 然而 它只为每个测试图像预测一个类别 我尝试随机初始化转换层 我添加了
  • C# 正则表达式用于匹配嵌套括号内的特定文本

    我有这些代码行用于括号之间的运算符 string filtered Regex Replace input string Empty var result filtered Split new StringSplitOptions Remo
  • 逗号分隔值到单引号和逗号分隔值

    我的数据为 abc defg hijklm op qrs tuv 我希望将这些数据转换为 abc defg hijklm op qrs tuv 我想在linux下做 我使用 sed 我一直在互联网上查找 但没有找到解决方案 请帮我 在开头添
  • 核心数据不保存我的数据

    我使用核心数据来保存一些整数 速率 然后在上下文中调用 save HeartRateBeat beat HeartRateBeat heartRateWithHeartRate rate ofRecordTitle self recordT
  • 使用 Django 实现单点登录 (SSO) [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 目前不接受答案 我想使用 Django 为我们当前使用的多个应用程序实现单点登录 SSO 我如何使用 Django 来实现这个 我们正在使用 OpenAM http
  • 将 QWidget 渲染为 QImage 丢失 alpha 通道

    我有一个简单的 Qt 小部件 它是QLabel应用了简单的 CSS 样式 样式的重要部分是圆形边框 QString css border style solid border width 3px border radius 7px 它在屏幕
  • 反应js;映射数组后没有任何渲染

    我有一个输入 在用户插入文本后我想在按钮中显示每个单词button group 我拆分了句子并映射了返回的内容
  • 我应该使用哪种 java swing 布局

    我需要创建这个框架 我应该使用哪种布局 我正在考虑框或网格布局 但右侧的菜单将是一个问题 您的代码中有很多重复 我会分解每个部分 使其成为一个单独的组件 并专注于其单独的布局需求 主屏幕有 4 个主要区域 不包括菜单 我会用类似的东西Gri
  • 如何防止Mysql Connector/J转换DATE和TIME时区?

    我正在使用以下 DSN 连接到 mysql 服务器 jdbc mysql localhost my database useUnicode true characterEncoding utf 8 serverTimezone UTC 我遇
  • 反射类型没有方法

    我正在尝试在 Go 中使用反射 为什么这段代码没有列出方法 它列出了字段 这是问题所在吗 value interface 我不确定如何将通用结构 类 类型传递给函数 通常我只会传递一个对象 我对此完全陌生 我是一名 C 程序员 packag
  • 如何用 Objective-C 编写计时器?

    我正在尝试用 NSTimer 制作秒表 我给出了以下代码 nst Timer NSTimer scheduledTimerWithTimeInterval 0 001 target self selector selector showTi
  • 当我在tensorflow.keras中使用BinaryCrossentropy(from_logits=True)时,我应该使用什么作为目标向量

    我有一个多标签分类 其中每个目标都是由 1 和 0 组成的向量not相互排斥 为了清楚起见 我的目标是 0 1 0 0 1 1 到目前为止我的理解是 我应该使用二元交叉熵函数 正如本节中所解释的answer 另外 我明白了tf keras
  • 如何使用 Windows 计划任务运行 PHP 脚本?

    我已经在我的机器中安装了 localhost server 我需要使用 Windows 计划任务运行 php 脚本 如何在计划任务的 操作 选项卡中添加路径 配置脚本以在特定时间段运行 在系统上找到 php exe 可执行文件 并使用以下命
  • 在文本浏览器中实时显示 QProcess 输出

    我是 qt 开发的新手 我想将 QProcess 的输出实时传输到文本浏览器 我首先执行一个简单的 echo 命令 但程序的输出没有显示 我究竟做错了什么 QProcess p p start echo hye QByteArray byt
  • CSS中何时留出空间,何时不留出空间?

    这是可以的 没有空格 li highlight background FF9900 none repeat scroll 0 0 这不起作用 有空格 li highlight background FF9900 none repeat sc
  • 如何根据用户的选择动态生成SQL查询?

    这与以下问题是同一个问题 如何根据用户的选择动态生成SQL查询 唯一的区别是 我有兴趣看到也使用 Java JPA 可能是 EclipseLink 或 Hibernate 特定扩展 的解决方案 我需要创建一个 GUI 用户可以使用它选择多个