【问题标题】:How to Concatenate Two Columns in Ebean Like Clause如何在 Ebean Like 子句中连接两列
【发布时间】:2014-08-28 05:59:55
【问题描述】:

我正在尝试通过给定一些查询字符串的全名来查找用户。在我的表中,我有“First_Name”和“Last_Name”列,但没有“Full_Name”列。

使用 Avaje Ebean,我想使用连接“First_Name”和“Last_Name”的like 子句进行查询,然后将其与n%(查询中的名称)进行比较。在 SQL 中,查询类似于:

SELECT * FROM users
WHERE
concat(users.First_Name , ' ' , users.Last_Name) LIKE 'n%'
OR  users.First_Name LIKE 'n%' OR  users.First_Name LIKE '%n'
OR  users.Last_Name LIKE 'n%'  OR users.Last_Name LIKE '%n' 

这可能与Ebean有关吗?

【问题讨论】:

    标签: sql ebean


    【解决方案1】:

    是的,RawSql 有可能

    我允许您对给定的查询使用自己的 SQL 语句。

    来自文档的示例

    // Use raw SQL with an aggregate function  
    
    String sql   
        = " select order_id, o.status, c.id, c.name, sum(d.order_qty*d.unit_price) as totalAmount"  
        + " from o_order o"   
        + " join o_customer c on c.id = o.kcustomer_id "  
        + " join o_order_detail d on d.order_id = o.id "  
        + " group by order_id, o.status ";  
    
    RawSql rawSql =   
        RawSqlBuilder  
            // let ebean parse the SQL so that it can  
            // add expressions to the WHERE and HAVING   
            // clauses  
            .parse(sql)  
            // map resultSet columns to bean properties  
            .columnMapping("order_id",  "order.id")  
            .columnMapping("o.status",  "order.status")  
            .columnMapping("c.id",      "order.customer.id")  
            .columnMapping("c.name",    "order.customer.name")  
            .create();  
    
    
    Query<OrderAggregate> query = Ebean.find(OrderAggregate.class);  
        query.setRawSql(rawSql)          
        // add expressions to the WHERE and HAVING clauses  
        .where().gt("order.id", 0)  
        .having().gt("totalAmount", 20);  
    
    List<OrderAggregate> list = query.findList();  
    

    编辑:我只是检查一下以满足我的好奇心,也可以(至少在 Play 框架中):

    Ebean.find(MyModel.class).where().like("concat(subject, ' ' , body)", "%foo%").findList();
    

    【讨论】:

    • 虽然我知道这种可能性,但我真的很想坚持使用 Ebean 的内置方法。我尽量远离RawSql,除非别无他法
    • 哇,我没有意识到你可以用这种方式注入你自己的原始 SQL;我认为必须使用RawSql 对象来完成。不错的发现
    • 请注意,还有 where().raw(...) - 所以你也可以使用它。
    猜你喜欢
    • 1970-01-01
    • 2019-01-26
    • 2012-07-04
    • 1970-01-01
    • 2014-09-20
    • 1970-01-01
    • 1970-01-01
    • 2020-03-11
    • 2019-01-08
    相关资源
    最近更新 更多