【问题标题】:Optional columns to filter dataBase records用于过滤数据库记录的可选列
【发布时间】:2015-07-21 08:45:16
【问题描述】:

我应该如何使用 Ebean 的finder 创建带有可选列的查询来过滤某些数据?

例如,我想获得一个List<User>。想象一下,我有 3 列要过滤:按名称、按流派和其他内容。如果我选择流派,查询应该列出所选流派的所有记录,然后,如果我选择姓名 John 和流派男,查询应该列出所有“男”的“约翰”,依此类推。

我知道创建简单的查询来查找列:

find.where().eq("ex1",var1).eq("ex2", var2).findList();

有什么建议吗?

【问题讨论】:

    标签: mysql playframework ebean


    【解决方案1】:

    尝试使用ExpressionList。这是示例,如果if statement中的条件满足,那么表达式将包含在where子句中。

    public static List<User> filterUsers(int user_no, String genre, String name){
    
        com.avaje.ebean.ExpressionList expressionList = find.where().eq("user_no", user_no);
    
        if(condition1)
            expressionList.eq("genre", genre);
    
        if(condition2)
            expressionList.eq("name", name);
    
        return expressionList.findList();
    
    }
    

    【讨论】:

    • 在我看来这是个好主意。就一个问题。条件“else if”可能会使过滤器变得困难,对吗?例如,如果我使用'if's', if(genre != null) {include on the where 子句} ... if(name != null){include on the where 子句} 。 ExpressionList 用于“管理”查询?提前致谢
    • 我会尝试你的建议,然后给你一个反馈。谢谢
    • @HugoMachado 对不起,我对else if 部分感到困惑,您可以使用else ifmultiple if's 取决于您的要求。我认为它不会使过滤器变得困难。
    • 您的建议运行良好。非常感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-08
    • 1970-01-01
    • 1970-01-01
    • 2015-05-07
    相关资源
    最近更新 更多