SQL构造转换为OOP

时间:2010-03-20 10:49:41

标签: sql oop

作为一个来自面向对象世界的人,我发现很难绕过SQL。然而,最近我意识到经典的SQL构造

select X from Y where Z

基本上等同于以下OOP构造:

List<SomeType> results = db.query(new Matcher<SomeType> () {
  public boolean match(SomeType candidate) {
    return ...; // checks condition Z on candidate, returns true for match
  }
};

所以我的问题是:其他SQL结构的OOP等价物是什么,比如连接?

2 个答案:

答案 0 :(得分:2)

我认为Microsoft的LINQ(语言无关查询)已尝试创建一种可用作SQL的面向对象版本的语言。 Hibernate的HQL将是另一个。如果SQL给你带来问题,我建议你去研究这两个问题。也许他们可以让你更清楚。

答案 1 :(得分:1)

  

其他SQL结构的OOP等价物有哪些,例如连接?

想象一下,我们有如下查询:

SELECT * FROM tableA JOIN tableB ON tableA.b_id = tableB.id WHERE tableA.someFld < 50;

因此,您需要从tableA子句(WHERE)中获取匹配条件的tableA.someFld < 50中的每条记录。然后对于结果集中的每个记录,检查整个tableB以查找与ON子句匹配的记录。

// Pseudo-code
Query query = new Query();
query.where(new Matcher....);
query.join(new Matcher<SomeType>() {
  public boolean match(SomeType tableACandidate, SomeType tableBCandidate) {
    return tableACandidate.getBId() == tableBcaididate.getId();
  }
});

ResultSet result = query.execute();