java - 我将如何使用 java.util.Collections 来模拟 SQL INNER JOIN 操作?

标签 java mysql sql hashmap

我如何使用 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,你可以通过两种方式做到这一点 -

  1. 像我上面所做的那样,只需在您的域中使用普通的旧 Java 对象
  2. 使用类似于 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/

相关文章:

java - 在 Java 中,如何对排序字段深度为多层的对象 ArrayList 进行快速排序?

javascript - 如何让人们在同一表单上进行协作并实时更新?

sql - Oracle SQL - 检查 sql 数据大小

mysql - 在子查询中使用第一个查询中的行?

java - 在建筑物中添加人员时,引用学校类(class)的最合适方式是什么?

java - 当用户滚动时,具有自定义布局的 Jtable 会闪烁

java - 强制派生实现来做某事,最佳实践是什么?

mysql - Mysql事务提交是不是按顺序?

mysql - 在 S3 中临时保存大查询结果(~100k 行)的最佳方法是什么?

sql - 在 NZSQL 中使用 limit with union all 时出错