代码之家  ›  专栏  ›  技术社区  ›  FlyingTurtle

如何在JpaRepository Spring中找到多个like

  •  1
  • FlyingTurtle  · 技术社区  · 7 年前

    我想在春季使用JpaRepository进行like查询。我找不到路。

    如果在本机查询中,我希望

    select * from staff where ( 
    name like '%param1%' OR
    address like '%param1%' OR
    staffNo like '%param1%')
    order by name limit 10 offset 0
    

    我已经成功地将其转换为JpaRepository for limit和offset,除了“like”函数。我的当前代码:

    List<Staff> findByIdNotNull(Pageable pageable);
    

    如何在JpaRepo中插入“multiple-like”,我尝试使用containing,但它甚至对一列也不起作用

    List<Staff> findByNameContaining(String name, Pageable pageable);
    
    3 回复  |  直到 7 年前
        1
  •  2
  •   Shubham A.    7 年前

    你就快到了。使用多个or查询,如:

    List<Staff> findByNameContainingOrAddressContainingOrStaffNoContaining(
      String name, String address, int staffNo, Pageable pageable);
    

    这样你就可以 OR 的多个条件 like 查询。确保将实体属性命名为 name , address staffNo .

        2
  •  0
  •   Cocuthemyth    7 年前

    您可以使用实体管理器执行此操作

    Query query = em.createQuery("select s from staff s where ( 
    s.name like :param1 OR
    s.address like :param2 OR
    s.staffNo like :param3 )
    order by name limit 10 of`enter code here`fset 0");
                    query.setParameter("param1","%"+param1+"%");
                    query.setParameter("param2","%"+param2+"%");
                     query.setParameter("param3","%"+param3+"%");
    
                     List<staff> l=query.getResultList();
    

    为表指定别名。 使用setParameter(名称、值)定义设置参数。 获取包含人员列表的结果列表。

        3
  •  0
  •   neomatrixcode    3 年前

    您可以使用@Query注释

    @Query("select * from staff where "
            + " ( name like %:param1% or "
            + "address like %:param2% or "
            + "staffNo like %:param3% ) "
            + "order by name limit 10 offset 0")
    Optional<List<Staff>> findByNameContaining(@Param("param1") String param1,
                                                          @Param("param2") String param2,
                                                          @Param("param3") String param3);