为 Ebean 结合 LIKE 和 IN

Combining LIKE and IN for Ebean

给定一个单词列表和一个水果 class,让我们说:

List<String> wordList = new ArrayList<String>(Arrays.asList("App", "banan", "mang", "kiwi"));

LIKE 会像这样,但一次只有一个,这与 IN 不符:

Fruits.find.where().like('name', wordList.get(0)).findList();

IN 会像这样:

List<Fruit> matchedFruitList = Fruit.find.where().in("name", wordList).findList();

现在我需要做的是结合IN操作做一个LIKE操作。

有没有办法用 Ebean ORM 做到这一点???

您似乎需要使用 OR 条件并对每个单词执行 LIKE。

ExpressionList<Fruit> scope = Fruit.find.where();

for (int i = 0; i < wordList.size(); i++) {
    scope = scope.or().like("name", "%" + wordList.get(i) + "%");
}

List<Fruit> matchedFruitList = scope.findList();

wordList不是很大的时候没问题。如果是,我认为您应该使用 RawSql 和数据库特定语法来执行查询。