gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 06:00:02 33 4
gpt4 key购买 nike

这是同一个问题:

How to dynamically generate SQL query based on user's selections?

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

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

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

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

  • 年龄 - 年龄可以表示为:

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

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

  • 高度 - 与年龄相似

示例查询:

没有给出标准:

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 , torpedoquery电子Object Query ,这三个允许编写类型安全查询,否则您可以使用 criteria api,如果您使用 jpa 2 也 JPA2 Typesafe Query .

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

关于java - 如何根据用户的选择动态生成SQL查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2041312/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com