我如何使用 Java 集合来模拟 SQL INNER JOIN 操作?
在数据库中,我有:
表人
KEY NAME
11 Senor
other non-important entries...
表格事物
KEY ITEM
AA Moustache
BB Sombrero
CC HotSauce
other non-important entries...
表人对物
PERSON_KEY THING_KEY HAS
11 AA Y
11 BB N
11 CC Y
other non-important entries...
我要模拟SQL语句:
SELECT Person.NAME, Thing.ITEM, PersonToThing.HAS
FROM Person
INNER JOIN PersonToThing ON Person.KEY=PersonToThing.PERSON_PKEY
INNER JOIN Thing ON Thing.KEY=PersonToThing.THING_KEY
WHERE Person.NAME="Senor";
产生结果集:
NAME ITEM HAS
Senor Moustache Y
Senor Sombrero N
Senor HotSauce Y
我想将每个表放入 Java Map 中。
我已将表导出到 INSERT TABLE 语句中。
我将通过遍历 INSERT TABLE 语句来填充 map 。
不幸的是,运行关系数据库建模系统根本不可能。
我不明白的是如何组织集合或映射以及如何将它们链接在一起以模仿 INNER JOIN 操作?
预先感谢您抽出宝贵的时间以及您可以提供的任何帮助。
最佳答案
在您的示例中,人与物之间存在一对多关系。对我来说,从数据库的角度考虑这种关系比从 Java/OOP 的角度考虑更难。
在您的数据库中,您将 person 表连接到 thing 表以提供每个人拥有的事物的列表。
这可以作为事物 map 进入您的应用程序,每个人都有一个拥有每件事物的人的列表,或者作为一个人的 map ,每个人都有他们拥有的事物的列表。
因此,在 Java 中,您实质上是在询问如何对此建模:
public class Person() {
private List<Thing> things;
}
...
public class SomeClass() {
private List<Person> peopleWithThings;
}
IMO,你可以通过两种方式做到这一点 -
- 像我上面所做的那样,只需在您的域中使用普通的旧 Java 对象
- 使用类似于 Guava 的 multimap 的东西来创建字符串(人名)到事物列表的映射。
使用多图,你会得到类似的东西:
String key = "Senor";
Multimap<String, Thing> map = ArrayListMultimap.create();
map.put(key, thing1);
map.put(key, thing2);
assertEquals(2, map.size());
关于java - 我将如何使用 java.util.Collections 来模拟 SQL INNER JOIN 操作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53598249/