【问题标题】:Multiple queries in the same view同一视图中的多个查询
【发布时间】:2020-05-13 14:25:16
【问题描述】:

我想运行多个查询,然后在一个页面中显示结果,例如: https://adminlte.io/themes/v3/index.html

我创建了第一个控制器查询:

package controllers;

import models.Sysuser;
import play.mvc.Controller;
import play.mvc.Result;
import play.mvc.Security;
import views.html.sitemap.index;

import javax.inject.*;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.CompletionStage;
import play.libs.concurrent.HttpExecutionContext;
import static java.util.concurrent.CompletableFuture.supplyAsync;

import play.db.*;
import io.ebean.*;
import play.Logger;
import java.util.List;
import java.util.ArrayList;
import models.LocationExtractedData;

@Security.Authenticated(Secured.class)
public class SiteMap extends Controller {

    private Database db;
    private final HttpExecutionContext httpExecutionContext;
    private static final Logger.ALogger logger = Logger.of(SiteMap.class);

    @Inject
    public SiteMap(Database db,
                   HttpExecutionContext httpExecutionContext) {
        this.db = db;
        this.httpExecutionContext = httpExecutionContext;
    }   


    public CompletionStage<Result> index() {
    return SearchSomething().thenApplyAsync((List<LocationExtractedData> infos) -> {                   
          return ok(views.html.sitemap.index.render(  Sysuser.findByUserName(request().username()), infos)  );
            }, httpExecutionContext.current());
  } 


  public CompletionStage<List<LocationExtractedData>> SearchSomething() {
    return CompletableFuture.supplyAsync(() -> {

        return db.withConnection(
              connection -> {

                // Imagines this is a complexe QUERY (Later in the future...)
                final String sql =  "SELECT sysuser_id, role_id "
                                   +"from sysuser_role "
                                   +"where sysuser_id = '1' "
                                   +"and role_id in ('1','2','3','4','5') ";
                final RawSql rawSql = RawSqlBuilder.parse(sql).create();                
                Query<LocationExtractedData> query = Ebean.find(LocationExtractedData.class);  
                query.setRawSql(rawSql);
                List<LocationExtractedData> list = query.findList();  

                return list;                              

              });

        }, httpExecutionContext.current());
  } 




}

您能告诉我如何为我的充满仪表板、图表和表格的页面同时运行多个优化查询吗?

如果我创建多个 ebeanLists 列表(查询),这会影响我的页面的加载吗? 如果没有,那我该怎么办?

提前谢谢你,

【问题讨论】:

    标签: java sql scala playframework ebean


    【解决方案1】:

    通常,在与您提供的链接类似的应用程序中,您可以按照 MVC 设计模式创建可重用的 API。从控制器查询数据库非常违反这种模式。

    每个 API 都应该是原子的,创建一个 API 来运行 1 个查询以获取该页面的所有数据不是正确的方法。

    如果您正在寻找 API 的性能,您应该熟悉异步编程。异步运行 API 将使您的后端能够同时处理多个前端请求,从而大大提高性能。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-11-30
      • 2019-07-30
      • 1970-01-01
      • 1970-01-01
      • 2020-01-14
      • 1970-01-01
      • 2020-07-03
      • 1970-01-01
      相关资源
      最近更新 更多