gpt4 book ai didi

playframework-2.0 - 使用 Ebean SqlQuery 的最有效方法

转载 作者:行者123 更新时间:2023-12-04 05:27:06 25 4
gpt4 key购买 nike

我有两个模型(简化讨论),一对多关系中的父和子。 Child 具有 String 属性类型。我想创建一个方法

public List<String> Parent.getTypes()

返回不同的类型列表。这是我能想到的最好的:
public List<String> getTypes() {
String sql = "select distinct type from child where parent_id=:id";

SqlQuery sqlQuery = Ebean.createSqlQuery(sql);
sqlQuery.setParameter("parent", id);

List<SqlRow> rows = sqlQuery.findList();
List<String> types = new ArrayList<String>(rows.size());
for (SqlRow row : rows)
directions.add(row.getString("type"));

return types;
}

我希望这个方法经常被调用。我假设这不是很有效。对于一个我每次调用 getTypes() 时都会创建一个新的 SqlQuery,即使除了参数之外查询是相同的。

初始化可重用 SqlQuery 的最佳位置在哪里?我尝试在父模型的顶部执行此操作,但出现异常,因为我猜模型初始化时数据库尚未准备好。我想我可以让它在那里为空并在第一次调用 getTypes() 时初始化它。这样做的“正确”方法是什么?

最佳答案

缓存非常便宜且有用,您可以将其缓存 10 分钟:

public List<String> getTypes(Integer parentId) {

List<String> types = (List<String>) Cache.get("listOfTypes");
if (types == null) {
List<SqlRow> rows = Ebean
.createSqlQuery("select distinct type from child where parent_id=:id")
.setParameter("id", parentId)
.findList();

types = new ArrayList<String>(rows.size());
for (SqlRow row : rows)
types.add(row.getString("type"));

Cache.set("listOfTypes", types, 600);
}

return types;
}

关于playframework-2.0 - 使用 Ebean SqlQuery 的最有效方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13080073/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com