春季 JpaRepository 中的% Like% Query

我想在 JpaRepository中写一个类似的查询,但它不返回任何东西:

LIKE '%place%'-它不工作。

LIKE 'place'运行正常。

这是我的代码:

@Repository("registerUserRepository")
public interface RegisterUserRepository extendsJpaRepository<Registration,Long> {


@Query("Select c from Registration c where c.place like :place")
List<Registration> findByPlaceContaining(@Param("place")String place);
}
203800 次浏览

弹簧数据 JPA 查询需要查询中的“%”字符以及 like后面的空格字符,如

@Query("Select c from Registration c where c.place like %:place%").

参考 http://docs.spring.io/spring-data/jpa/docs/current/reference/html

您可能希望完全去掉 @Query注释,因为它看起来类似于标准查询(由 Spring 数据代理自动实现) ; 即使用单行

List<Registration> findByPlaceContaining(String place);

就足够了。

您实际上根本不需要 @Query注释。

您可以使用以下方法

    @Repository("registerUserRepository")
public interface RegisterUserRepository extends JpaRepository<Registration,Long>{
    

List<Registration> findByPlaceIgnoreCaseContaining(String place);


}

您还可以使用 SpringDataJPA 支持的关键字 “含有”实现类似的查询。

List<Registration> findByPlaceContaining(String place);

您可以选择使用占位符:

@Query("Select c from Registration c where c.place LIKE  %?1%")
List<Registration> findPlaceContainingKeywordAnywhere(String place);

当调用函数时,我使用: findByPlaceContaining("%" + place);

findByPlaceContaining(place + "%");

findByPlaceContaining("%" + place + "%");

答案就是

-->` @Query("select u from Category u where u.categoryName like %:input%")
List findAllByInput(@Param("input") String input);

对于您的情况,您可以直接使用 JPA 方法:

包含 select... 如% : place%

List<Registration> findByPlaceContainingIgnoreCase(String place);

在这里,无视 Case将帮助您搜索项目与忽略的情况下。

在 JPQL 中使用@Query :

@Query("Select registration from Registration registration where
registration.place LIKE  %?1%")
List<Registration> findByPlaceContainingIgnoreCase(String place);

以下是一些相关的方法:

  1. 就像 findByPlaceLike

    ... X 在哪里? 1

  2. findByPlaceStartingWith开始

    ... 其中 x.place 类似于? 1(参数与附加的% 绑定)

  3. 结尾与 findByPlaceEndingWith

    ... 其中 x.place 类似于? 1(参数与预先绑定的% 绑定)

  4. findByPlaceContaining

    ... 其中 x.place 类似于? 1(参数绑定在% 中)

更多信息,查看 这个链接这个链接这个

希望这个能帮到你:)

试试这个。

@Query("Select c from Registration c where c.place like '%'||:place||'%'")

发现解决方案没有 @Query(实际上我尝试哪一个是“接受”。但是,它没有工作)。

必须返回 Page<Entity>而不是 List<Entity>:

public interface EmployeeRepository
extends PagingAndSortingRepository<Employee, Integer> {
Page<Employee> findAllByNameIgnoreCaseStartsWith(String name, Pageable pageable);
}

IgnoreCase部分是实现这一点的关键!

我用这个:

@Query("Select c from Registration c where lower(c.place) like lower(concat('%', concat(:place, '%')))")

Lower ()类似于 String 中的 toLowerCase,因此结果不区分大小写。

你可以在参数后面简单地说‘ Like’关键字. 。

List<Employee> findAllByNameLike(String name);

我们就像这样

@ Query (“ from CasFhgDeviceView where deviceGroupName like concat (concat (’% CSGW%’,: usid) ,’%’)”)

可以有各种各样的方法。正如许多答案中提到的,如果可能的话,您可以使用 JPA 预定义的模板查询。

List<Registration> findByPlaceContainingIgnoreCase(String place);

另外,在调用上述方法之前,可以在 Java 层中附加“%”。

如果查询比较复杂,那么通常可以使用@Query one

@Query("Select r from Registration r where r.place like '%' || :place || '%'")

为了便于阅读,您可以使用以下一个

@Query("Select r from Registration r where r.place like CONCAT('%', :place, '%'")

我们可以使用本地查询

@Query(nativeQuery = true, value ="Select * from Registration as c where c.place like %:place%")


List<Registration> findByPlaceContaining(@Param("place")String place);

我不得不使用这样的 CONCAT('%',:setName,'%')

现在 < strong > Spring Data JPA 可以做到这一点,看看 http://docs.spring.io/spring-data/jpa/docs/current/reference/html/#query-by-example

Registration registration = new Registration();
registration.setPlace("UK");


ExampleMatcher matcher = ExampleMatcher.matchingAll()
.withIgnoreCase()
.withStringMatcher(StringMatcher.CONTAINING);


Example<Registration> example = Example.of(registration, matcher);


List<Registration> registrationList = registerUserRepository.findAll(example);