作为一个来自面向对象世界的人,我发现很难绕过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等价物是什么,比如连接?
答案 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();