避免 Anylogic 中的数据库查询

Avoiding database queries in Anylogic

我想避免在 Anylogic 中进行代价高昂的重复数据库查询。我在 Stack Overflow 中看到了以下线程,其中提供了一个简单的三步答案,但我不确定这三步中的第二点实际上意味着什么:

  1. 在模型启动时将所有行作为 class 的实例保存到映射中 - 您可以使用 Origin/Destination 作为键(使用 Anylogic 的 Pair 对象)和 class实例作为值

我创建了一个 class,它将我数据库中每一列的信息作为输入。我现在想将每一行保存为 class 的一个实例 - 有没有简单的方法可以做到这一点?我可能会遗漏一些简单的东西,因为我是 Anylogic 的新手。

我也不确定如何创建映射,如果有人可以为上面的第 2 点添加更多细节,我将不胜感激!

这实际上是最好的建议,您创建了 class,这是重要的一步,但是现在,class 的一个元素将用作键...例如名称...例如,如果您的 class 将 firstName 作为一个变量,将 lastName 作为另一个变量,您将使用一个字符串,该字符串是 firstName 和 lastName 的串联作为您的键。当然,任何密钥都可以,假设它对您的所有 table 都是唯一的。也可以使用整数作为 id。

  1. 创建一个 collection 类型的 LinkedHashMap

  2. 创建 class(你做到了)

  3. 您的 collection 将以字符串(名字 + 姓氏)作为键,并将 class...

    作为元素的值

现在,当您读取数据库时,您会得到类似这样的信息:

for(Tuple t : yourQueryResults){
    YourClass yc=new YourClass(t.get(db.var1),t.get(db.var2));
    String totalName=t.get(db.first_name)+"_"+t.get(db.last_name);
    yourCollection.put(totalName,yc);
}

现在,每次您想查找姓名为 a 的人(例如“John Doe”)时,您都可以执行

yourCollection.get("John_Doe").theVarYouWant;

如果你使用id而不是name,你可以设置一个int作为key,然后就可以了yourCollection.get(theId).theVarYouWant