为 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 和数据库特定语法来执行查询。
给定一个单词列表和一个水果 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 和数据库特定语法来执行查询。