Java 表达式语言到SQL where子句的转换?

Java 表达式语言到SQL where子句的转换?,java,sql,parsing,Java,Sql,Parsing,我们有一个域对象 Person firstName lastName role 我正在寻找一种简单的表达式语言,我们可以编写它来生成SQL。(特别是SQL的where子句) 比如说 firstName contains "joe" 转化为 FIRST_NAME LIKE '%joe%' 这样的东西存在吗,还是我必须自己写 请让我知道,如果你认为我可能是在寻找青春的源泉,或者如果你认为我在浪费时间写这篇文章 我建议您研究该模式。我建议您研究该模式。我不知道这是否足够,

我们有一个域对象

Person
    firstName
    lastName
    role
我正在寻找一种简单的表达式语言,我们可以编写它来生成SQL。(特别是SQL的where子句)

比如说

firstName contains "joe"
转化为

FIRST_NAME LIKE '%joe%'
这样的东西存在吗,还是我必须自己写


请让我知道,如果你认为我可能是在寻找青春的源泉,或者如果你认为我在浪费时间写这篇文章

我建议您研究该模式。

我建议您研究该模式。

我不知道这是否足够,但有一个xtext项目(一个语言开发框架)的示例,用于类似于这样的实体语言(域模型)。也许你想看看。它还具有jpa的代码生成功能(据我记忆所及)。如果不是很酷,只需编写自己的语言,使用xtext;)不会花费太长时间

我不知道这是否足够,但是有一个xtext项目(一个语言开发框架)的例子,用于这样的实体语言(域模型)。也许你想看看。它还具有jpa的代码生成功能(据我记忆所及)。如果不是很酷,只需编写自己的语言,使用xtext;)不会花费太长时间

“然而,也有一个很大的班级 用户,而他们不是 计算机专家,愿意 学习与计算机交互 在相当高的层次上, 非过程查询语言.示例 这些用户中的大多数是会计师, 工程师、建筑师和城市规划 规划师。”

这是Donald D.Chamberlin和Raymond F.Boyce的SQL介绍(然后是续集)。从他们的介绍中,我猜他们是为非技术用户设计SQL的

这并不是说SQL是一种完美的语言。尽管经历了三十多年的变革,它仍然存在缺陷。你有可能做得更好,但有两件事可能会出错:

  • 你的语言可能更糟
  • 如果您的一个非技术用户想要提高他们的关系数据技能,他们将受到您的语言和SQL的限制。有很多很多资源可以提高SQL技能,而提高新语言技能的方法却少得多
  • 也许考虑妥协:提供一个表达用户界面的UI。技术含量较低的用户可以选择属性、运算符并输入值,这些值随后将显示在表达式文本区域中。他们可以逐段构建中等复杂的SQL表达式,而无需记住SQL语法。更成熟的用户可以直接编辑SQL

    这并不能解决你所有的问题。您仍然需要一种方法来限制SQL,这样用户就不会损坏您的数据库,或者不经意间通过令人难以置信的笛卡尔连接耗尽您的所有db资源

    “然而,也有一个很大的班级 用户,而他们不是 计算机专家,愿意 学习与计算机交互 在相当高的层次上, 非过程查询语言.示例 这些用户中的大多数是会计师, 工程师、建筑师和城市规划 规划师。”

    这是Donald D.Chamberlin和Raymond F.Boyce的SQL介绍(然后是续集)。从他们的介绍中,我猜他们是为非技术用户设计SQL的

    这并不是说SQL是一种完美的语言。尽管经历了三十多年的变革,它仍然存在缺陷。你有可能做得更好,但有两件事可能会出错:

  • 你的语言可能更糟
  • 如果您的一个非技术用户想要提高他们的关系数据技能,他们将受到您的语言和SQL的限制。有很多很多资源可以提高SQL技能,而提高新语言技能的方法却少得多
  • 也许考虑妥协:提供一个表达用户界面的UI。技术含量较低的用户可以选择属性、运算符并输入值,这些值随后将显示在表达式文本区域中。他们可以逐段构建中等复杂的SQL表达式,而无需记住SQL语法。更成熟的用户可以直接编辑SQL


    这并不能解决你所有的问题。您仍然需要一种方法来限制SQL,这样用户就不会损坏您的数据库,或者不经意间通过令人难以置信的笛卡尔连接耗尽您的所有db资源

    不清楚为什么要将一些看起来有点像SQL的未指定表达式语言转换为SQL。为什么不直接使用SQL呢?(顺便说一句:在你的第一个例子之后,你的第一句话中出现了某种类型的拼写错误,使得它变得不可分析。)可悲的是,我们希望非技术人员用表达式来写。我知道这是一个尴尬的问题。是什么让你认为你的“新表达式语言”会比SQL更为你的非技术人员所熟悉?这个领域很小,运算符有限。否则无法保证,但我们的设计人员非常坚定:)。为什么不选择与“有限运算符”匹配的SQL子集?不清楚为什么要将一些看起来有点像SQL的未指定表达式语言转换为SQL。为什么不直接使用SQL呢?(顺便说一句:在你的第一个例子之后,你的第一句话中出现了某种类型的拼写错误,使得它变得不可分析。)可悲的是,我们希望非技术人员用表达式来写。我知道这是一个尴尬的问题。是什么让你认为你的“新表达式语言”会比SQL更为你的非技术人员所熟悉?这个领域很小,运算符有限。否则不能保证,但我们的设计人员非常坚定:)。为什么不选择与“有限运算符”匹配的SQL子集呢?谢谢,我很喜欢。我也许可以使用这个,但我也会继续寻找一个新的方法来构建复杂的AND或OR逻辑。谢谢,我喜欢这样。我也许可以使用它,但我也将继续寻找一种方法来构建复杂的AND或OR逻辑。