在存储库中为%like%sql equal使用了containing方法,如下所示,
Page<Obj> findByNameContaining(String name, Pageable pageable);
工作原理如下,
select * from Obj where name like '%John%';
但是我怎么通过考试呢 List<String>
使用jpa查询如下所示的名称,
select * from Obj where name like '%John%' or name like '%Jiva%' or name like 'etc' .....;
有什么办法吗?我还检查了规范类,这是做这件事的唯一方法还是我遗漏了任何简单的方法或任何其他建议的动态查询?
3条答案
按热度按时间gkn4icbw1#
spring数据jpa最常用的方法是使用
Specification
它为列表中的每个元素添加一个like predicate 。你会这么说吗与
Specification containingOneOf(List<String> listOfNames)
是您需要创建的方法。看到了吗https://spring.io/blog/2011/04/26/advanced-spring-data-jpa-specifications-and-querydsl/ 关于springdatajpa中规范的更多细节。
c0vxltue2#
无法创建具有多个
like
操作员在存储库界面中,但有一个解决方法可以使用EntityManager
.EntityManager
在simplejparepository中广泛使用。我们可以使用@PersistenceContext
这样地:并调用其方法
.createQuery(QUERY).getResultList()
执行数据库调用。对于分页,您可以在spring中使用实体管理器检查这个分页要创建查询,可以编写如下简单逻辑:
在上述代码中,
Employee
是我的实体类,我正在为其创建一个包含多个like
接线员。完整代码:
6bc51xsx3#
如果您使用的是sql server/oracle,则可以在where子句中使用contains函数。
oracle:where contains(列名称' or pqr or xyz',1)>0 sql server:where contains(列名称''or'pqr'or'xyz*')
或
另一种方法是在where子句中使用正则表达式。
不同的数据库支持不同的正则表达式函数,如regexp\u like、regex\u contains等