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

时间:2010-12-03 17:56:36

标签: java sql parsing

我们有一个域对象

Person
    firstName
    lastName
    role

我正在寻找一种可以编写生成SQL的简单表达式语言。 (特别是SQL的where子句)

例如。

firstName contains "joe"

转换为

FIRST_NAME LIKE '%joe%'

这样的事情是否存在,或者我是否必须自己编写?

如果您认为我可能正在寻找青春之泉,或者如果您认为我在浪费时间写这篇文章,请告诉我!

3 个答案:

答案 0 :(得分:1)

  

“然而,还有一大班   用户,虽然他们不是   电脑专家,愿意   学习与电脑互动   在一个相当高的水平,   非程序性查询语言。例子   这些用户是会计师,   工程师,建筑师和城市   规划者“。

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

这并不是说SQL是一种完美的语言。尽管有三十多年的变化,但它仍然存在缺陷。你有可能建立更好的东西,但有两件事可能出错:

  1. 你的语言可能会更糟。
  2. 如果您的某个非技术用户想要提高他们的关系数据技能,他们将受到您的语言与SQL的限制。有很多很多资源可以提高SQL技能,而提高新语言技能的方法却少得多。
  3. 也许考虑妥协:提供表达式构建UI。技术较少的用户可以选择属性,运算符,然后输入随后将出现在表达式文本区域中的值。他们可以逐个构建适度复杂的SQL表达式,而无需记住SQL语法。更复杂的用户可以直接编辑SQL。

    这并不能解决您的所有问题。您仍然需要一种限制SQL的方法,这样用户就不会损坏您的数据库,也不会无意中耗尽所有数据库资源,并且使用令人难以置信的笛卡尔联接。

答案 1 :(得分:0)

我建议您查看Selection Factory模式。

答案 2 :(得分:0)

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