带有 LIKE 的 Spring JPA @Query

新手上路,请多包涵

我正在尝试在 CrudRepository 中创建一个方法,该方法将能够为我提供用户列表,其用户名类似于输入参数(不仅以输入参数开头,而且还包含它)。我尝试使用方法 "findUserByUsernameLike(@Param("username") String username)" 但正如 Spring 文档中所述,此方法等于“ where user.username like ?1 ”。这对我不利,因为我已经告诉过我正在尝试获取用户名包含的所有用户…

我为该方法编写了一个查询,但它甚至没有部署。

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

@Query("select u from user u where u.username like '%username%'")
List<User> findUserByUsernameLike(@Param("username") String username);
}

有人可以帮我吗?

原文由 Viktoriia 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 696
2 个回答

尝试使用以下方法(它适用于我):

 @Query("SELECT u.username FROM User u WHERE u.username LIKE CONCAT('%',:username,'%')")
List<String> findUsersWithPartOfName(@Param("username") String username);

注意:JPQL 中的表名必须以大写字母开头。

原文由 Mark 发布,翻译遵循 CC BY-SA 3.0 许可协议

使用 Query creation from method names ,检查表 4,他们在其中解释了一些关键字。

  1. 使用像: select ... like :username
     List<User> findByUsernameLike(String username);

  1. 起始于: select ... like :username%
     List<User> findByUsernameStartingWith(String username);

  1. 结尾: select ... like %:username
     List<User> findByUsernameEndingWith(String username);

  1. 包含: select ... like %:username%
     List<User> findByUsernameContaining(String username);

请注意,您正在寻找的答案是 数字 4 。您不必使用@Query

原文由 jmgoyesc 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题