使用LIKE Spring JPA @Query

 当初 发布于 2023-01-30 13:31

我正在尝试在CrudRepository中创建一个方法,它将能够为我提供用户列表,其用户名是LIKE输入参数(不仅以开头,还包含它).我尝试使用方法"findUserByUsernameLike(@Param("username") String username)"但是在Spring文档中告诉我,这个方法等于" where user.username like ?1".这对我来说并不好,因为我已经告诉我,我正试图让所有用户名包含的用户...

我写了一个查询方法,但它甚至没有部署.

@Repository
public interface UserRepository extends CrudRepository {

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

任何人都可以帮我吗?

6 个回答
  • 尝试使用以下方法(它适用于我):

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

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

    2023-01-30 13:33 回答
  • 易于使用的代码(无需使用CONCAT或||):

    @Query("from Service s where s.category.typeAsString like :parent%")
    List<Service> findAll(@Param("parent") String parent);
    

    记录在:http : //docs.spring.io/spring-data/jpa/docs/current/reference/html。

    2023-01-30 13:33 回答
  • List<User> findByUsernameContainingIgnoreCase(String username);

    为了忽略案件问题

    2023-01-30 13:33 回答
  • 另一种方式:代替CONCAT函数我们可以使用双管:: lastname || '%'

    @Query("select c from Customer c where c.lastName LIKE :lastname||'%'")
    List<Customer> findCustomByLastName( @Param("lastname") String lastName);
    

    您可以放置​​任何位置,前缀,后缀或两者

    :lastname ||'%'  
    '%' || :lastname  
    '%' || :lastname || '%'  
    

    2023-01-30 13:33 回答
  • 使用方法名称创建查询,检查表4,它们解释了一些关键字.

      使用Like:select ... like:username

      List<User> findByUsernameLike(String username);
      

      StartingWith:select ... like:username%

      List<User> findByUsernameStartingWith(String username);
      

      EndingWith:select ... like%:username

      List<User> findByUsernameEndingWith(String username);
      

      包含:select ... like%:username%

      List<User> findByUsernameContaining(String username);
      

    请注意,您要找的答案是4号.您不必使用@Query

    2023-01-30 13:33 回答
  • 对于您的情况,可以直接使用JPA方法。就像下面这样:

    包含:选择...,例如%:username%

    List<User> findByUsernameContainingIgnoreCase(String username);
    

    在这里,IgnoreCase将帮助您在不区分大小写的情况下搜索项目。

    以下是一些相关方法:

      喜欢 findByFirstnameLike

      …其中x.firstname像?1

      从...开始 findByFirstnameStartingWith

      …其中x.firstname如?1(参数与附加%绑定)

      结尾于 findByFirstnameEndingWith

      …其中x.firstname如?1(参数与前缀%绑定)

      内含 findByFirstnameContaining

      …其中x.firstname如?1(参数绑定在%中)

    更多信息,请查看此链接和此链接

    希望能帮到你 :)

    2023-01-30 13:33 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有