为SQL设计一种瘦的面向对象的查询语言

时间:2013-09-13 10:55:38

标签: java oop orm

鉴于以下课程:

class People {
.....
String getName();

int getAge();
...
}

我想查询我的数据库中所有年龄大于20岁的人。所以我想写一些像getPeople(AGE> 20)的东西。简而言之,我想编写一个易于阅读的面向对象查询。我们可以有复杂的查询选择标准,但为了简单起见,我们将其限制为单个变量。在我的设置中,我将通过将面向对象的查询转换为关系查询从SQL中获取此详细信息。我需要设计这个,但想不出干净的东西。如果您有耐心,请进一步阅读。

旧问题(可能没有框好)

我在Java中使用SQL数据库。在我们的例子中,数据库查询通常非常简单。目的是以面向对象的语言编写查询,然后通过通用模块将这些查询转换为sql查询。

现在插入,删除对象可以很容易地设计为 - public void delete(DBObject obj)。然而问题是查询,我需要你的帮助来设计它。因此,假设我们有一个帐户对象,我想将一个帐户对象插入数据库 - 在这种情况下,我将调用public void insert(帐户帐户);如果我想根据特定帐户类型检索所有帐户对象或者其帐户名称不以某个字符串str开头,该怎么办?理想情况下,我们应该能够查询帐户类中公开的所有行为(返回值)。

我可以看到对查询构建器的需求,但无法提出一个可以轻松使用的简洁合同。

P.S。 - 我这样做只是为了提高我的理解力。因此,对hibernate或任何orm的引用可能不是我的答案。我试图在git中挖掘一些源代码,但通常它们太大了:(

编辑: Matt在他的评论中提出了规范设计模式,这在某种程度上真正简化了事情。我遇到的一个问题是以易于阅读的方式制定查询。让C1 C2 C3 C4成为一些条件,那么这个模式允许我的是我可以使用通用门轻松编写任何复杂的查询 - 而且,或者,不是一个简单的方法。 现在问题是模拟这个单独的条件说C1。所以如果有一个帐户类有一个函数public int yearsSinceAccountWasOpend()现在我想要检索至少7年的帐户,那我该怎么做呢? (一些注释技巧?)

0 个答案:

没有答案