JPQL 类似不区分大小写

2022-08-31 16:47:32

我想按名称搜索用户表中的数据,不区分大小写。

@Repository
public interface UserRepository extends JpaRepository<User, Long> {

  @Query("select u from User u where lower(u.name) like %lower(?1)%")
  public List<User> findByNameFree(String name);

}

我收到一个错误: 意外的令牌: %。我应该在哪里放置“%”?


答案 1

您可以使用 concat 运算符:

@Query("select u from User u where lower(u.name) like lower(concat('%', ?1,'%'))")
public List<User> findByNameFree(String name);

或使用命名参数:

@Query("select u from User u where lower(u.name) like lower(concat('%', :nameToFind,'%'))")
public List<User> findByNameFree(@Param("nameToFind") String name);

(使用弹簧靴 1.4.3 进行测试)


答案 2

如果这只是你想要的,并且你正在使用Spring Data JPA,你不需要编写查询。

List<User> findByNameContainingIgnoreCase(String name);

否则,在将属性传递给方法之前,您需要用它来包装(将这些属性直接放在查询中根本不起作用)。或者不要使用查询,而是使用规范或条件 API 来创建查询。name%


推荐