在Java Spring中使用2个参数进行 @query

zazmityj  于 2022-11-28  发布在  Spring
关注(0)|答案(3)|浏览(235)

我正在寻找以下问题的解决方案-我想创建这样的@Query:

@Query("select s from Student s where s.name like %?1% and s.surname like %?1%")

因为我需要能够显示学生的名和姓。我能够使它工作,因为当我改变和与或,查询显示的条目,无论是名或姓,但一旦我改变回和什么都不显示。
第一次
我还有第二个问题,在使用pageRequest时,是否可以删除JSON末尾显示的代码-如果可能,我希望只显示学生条目,而不显示此代码

{"content":[],"pageable":{"sort":{"empty":false,"sorted":true,"unsorted":false},"offset":0,"pageNumber":0,"pageSize":5,"unpaged":false,"paged":true},"last":true,"totalPages":0,"totalElements":0,"size":5,"number":0,"sort":{"empty":false,"sorted":true,"unsorted":false},"first":true,"numberOfElements":0,"empty":true}

我试着在@Query注解中使用原生查询,我也试着修改查询本身,使用我在网上找到的一些concat技巧,但是没有任何效果;(

wwwo4jvm

wwwo4jvm1#

JpaRepository支持query方法,因此如果您想搜索包含保持器值的项目,只需定义如下方法即可。

Page<Student> findByStartingWithFirstNameAndStartingWithSurname();
polhcujo

polhcujo2#

?1用于第一个参数name,因此必须将第二个?1替换为?2才能使用参数surname
对于第二个问题,您可以将页面Map到列表中:

repository.findByNameAndSurname(name.orElse("_"),
                                            surname.orElse("_"),
                                            PageRequest.of(
                                                            page.orElse(0), 5,
                                                            Sort.Direction.ASC, sortBy.orElse("id"))).stream().toList();
ac1kyiln

ac1kyiln3#

请看一下您的查询:

@Query("select s from Student s where s.name like %?1% and s.surname like %?1%")

您已经用?1定义了两个占位符,这将导致两个占位符具有相同的值。因此,您实际上是在搜索具有相同名字和姓氏的人,这就是为什么OR在这里是有效的。
我不熟悉Spring,但阅读以下教程后,我知道您可以按如下方式编写查询:

@Query("select s from Student s where s.name like %:firstname% and s.surname like %:lastname%")

不过,您需要将参数与方法参数列表中的@Param(var)注解绑定。
最后一个问题:您可能不应该从REST(?)服务返回Page<Student>,而应该返回List<Student>

相关问题