我们有一个域对象
Person
firstName
lastName
role
我正在寻找一种可以编写生成SQL的简单表达式语言。 (特别是SQL的where子句)
例如。
firstName contains "joe"
转换为
FIRST_NAME LIKE '%joe%'
这样的事情是否存在,或者我是否必须自己编写?
如果您认为我可能正在寻找青春之泉,或者如果您认为我在浪费时间写这篇文章,请告诉我!
答案 0 :(得分:1)
“然而,还有一大班 用户,虽然他们不是 电脑专家,愿意 学习与电脑互动 在一个相当高的水平, 非程序性查询语言。例子 这些用户是会计师, 工程师,建筑师和城市 规划者“。
这是来自Donald D. Chamberlin和Raymond F. Boyce的1974 paper介绍SQL(然后是SEQUEL)。从他们的介绍中,我猜他们为非技术用户设计了SQL。
这并不是说SQL是一种完美的语言。尽管有三十多年的变化,但它仍然存在缺陷。你有可能建立更好的东西,但有两件事可能出错:
也许考虑妥协:提供表达式构建UI。技术较少的用户可以选择属性,运算符,然后输入随后将出现在表达式文本区域中的值。他们可以逐个构建适度复杂的SQL表达式,而无需记住SQL语法。更复杂的用户可以直接编辑SQL。
这并不能解决您的所有问题。您仍然需要一种限制SQL的方法,这样用户就不会损坏您的数据库,也不会无意中耗尽所有数据库资源,并且使用令人难以置信的笛卡尔联接。
答案 1 :(得分:0)
我建议您查看Selection Factory模式。
答案 2 :(得分:0)
我不知道这是否足够,但是有一个像这样的实体语言(域模型)的xtext项目(语言开发框架)的例子。也许你想检查一下。它还具有jpa的代码生成功能(据我记得)。如果它不酷,只需编写自己的语言,使用xtext不应该花太长时间;)