这是一个批量查询接口,默认请求路径是类名首字母小写,并且再加一个 s 后缀。这个接口实际上是一个分页查询接口,没有传参数,表示查询第一页,每页 20 条数据。
查询结果中,除了该有的数据之外,也包含了分页数据:
分页数据中:
size 表示每页查询记录数
totalElements 表示总记录数
totalPages 表示总页数
number 表示当前页数,从0开始计
如果要分页或者排序查询,可以使用 _links 中的链接。:8080/books?page=1&size=3&sort=id,desc 。
添加也可以添加数据,添加是 POST 请求,数据通过 JSON 的形式传递,如下:
添加成功之后,默认会返回添加成功的数据。
修改修改接口默认也是存在的,数据修改请求是一个 PUT 请求,修改的参数也是通过 JSON 的形式传递:
默认情况下,修改成功后,会返回修改成功的数据。
删除当然也可以通过 DELETE 请求根据 id 删除数据:
删除成功后,是没有返回值的。
不需要几行代码,一个基本的增删改查就有了。
这些都是默认的配置,这些默认的配置实际上都是在 JpaRepository 的基础上实现的,实际项目中,我们还可以对这些功能进行定制。
查询定制最广泛的定制,就是查询,因为增删改操作的变化不像查询这么丰富。对于查询的定制,非常容易,只需要提供相关的方法即可。例如根据作者查询书籍:
public interface BookRepository extends JpaRepository<Book,Long> { List<Book> findBookByAuthorContaining(@Param("author") String author); }注意,方法的定义,参数要有 @Param 注解。
定制完成后,重启项目,此时就多了一个查询接口,开发者可以通过 :8080/books/search 来查看和 book 相关的自定义接口都有哪些:
查询结果表示,只有一个自定义接口,接口名就是方法名,而且查询结果还给出了接口调用的示例。我们来尝试调用一下自己定义的查询接口:
开发者可以根据实际情况,在 BookRepository 中定义任意多个查询方法,查询方法的定义规则和 Jpa 中一模一样(不懂 Jpa 的小伙伴,可以参考干货|一文读懂 Spring Data Jpa!,或者在松哥个人网站 上搜索 JPA,有相关教程参考)。但是,这样有一个缺陷,就是 Jpa 中方法名太长,因此,如果不想使用方法名作为接口名,则可以自定义接口名:
public interface BookRepository extends JpaRepository<Book, Long> { @RestResource(rel = "byauthor",path = "byauthor") List<Book> findBookByAuthorContaining(@Param("author") String author); }@RestResource 注解中,两个参数的含义:
rel 表示接口查询中,这个方法的 key
path 表示请求路径
这样定义完成后,表示接口名为 byauthor ,重启项目,继续查询接口:
除了 rel 和 path 两个属性之外,@RestResource 中还有一个属性,exported 表示是否暴露接口,默认为 true ,表示暴露接口,即方法可以在前端调用,如果仅仅只是想定义一个方法,不需要在前端调用这个方法,可以设置 exported 属性为 false 。