我试图在没有重复条件和变量的JPA中进行查询:
List<User> findByNameContainingIgnoreCaseAndEnabledOrUsernameContainingIgnoreCaseAndEnabledOrEmailContainingIgnoreCaseAndEnabledOrAgency_NameContainingIgnoreCaseAndEnabled
(String name, boolean status1, String username,boolean status2, String email, boolean status3,String agencyName, boolean status, Pageable pageable);
我不确定我的方式是否合适。但是很难读懂。
答案 0 :(得分:0)
实现此目的的最佳方法是不使用spring-data的方法扩展方法来构造实际查询,而是在这种情况下使用@Query
注释:
@Query(value = "SELECT ...")
List<User> findUsersByParams(
@Param("name") String name,
@Param("status1") boolean status1,
@Param("username") String username,
@Param("status2") boolean status2,
@Param("email") String email,
@Param("status3") boolean status3,
@Param("agencyname") String agencyName,
@Param("status") boolean status,
Pageable pageable);
这里的关键是value
注释中的@Query
属性采用JPQL查询来定义一系列命名参数,每个@Param
注释方法值与这些参数匹配查询命名参数并自动为您注入。
一个简单的例子是
@Query(value = "SELECT u FROM User u " +
"WHERE u.userName LIKE CONCAT('%', :userName, '%')")
List<User> findUsersByParams(@Param("userName") String userName, Pageable page);