给定以下课程:
class People {
.....
String getName();
int getAge();
...
}
我想查询我的数据库中所有年龄大于 20 岁的人。所以我想写一些类似 getPeople(AGE>20) 的东西。简而言之,我想写一个易于阅读的面向对象的查询。我们可以有复杂的查询选择标准,但为了简单起见,我们将其限制为单个变量。在我的设置中,我将通过将面向对象的查询转换为关系查询来从 SQL 中获取此详细信息。我需要设计这个,但想不出干净的东西。如果您有耐心,请进一步阅读。
旧问题(可能没有很好地构图)
我正在使用 SQL 数据库使用 Java。在我们的例子中,数据库查询通常非常简单。目的是用面向对象的语言编写查询,然后可以通过通用模块将这些查询转换为 sql 查询。
现在插入,删除一个对象可以很容易地设计成 - public void delete(DBObject obj)。然而,问题在于查询,我需要你的帮助来设计它。所以假设我们有一个帐户对象,我想将一个帐户对象插入到数据库中——在这种情况下,我将调用 public void insert(Account account); 如果我想根据特定帐户类型检索所有帐户对象,或者其帐户名称不以某个字符串 str 开头,该怎么办?理想情况下,我们应该能够查询帐户类中公开的所有行为(返回值)。
我可以看到对查询构建器的需求,但无法提出可以轻松使用的简洁合同。
PS - 我尝试这样做只是为了提高我的理解。因此,对 hibernate 或任何 orm 的引用可能不是我的答案。我试图在 git 中挖掘一些源代码,但通常它们太大了:(
编辑:马特在他的评论中建议了规范设计模式,这确实在一定程度上简化了事情。我一直面临的问题之一是以易于阅读的简单方式制定查询。让 C1 C2 C3 C4 成为一些条件,那么这种模式允许我使用通用门轻松编写任何复杂的查询 - 或者,不是以简单的方式。现在的问题是对这个单独的条件进行建模,比如 C1。因此,如果有一个具有函数 public int yearsSinceAccountWasOpend() 的帐户类现在我想检索至少 7 岁的帐户,那么我应该怎么做呢?(一些注释技巧?)