- 项目相关依赖
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.1.3.RELEASE</version> <relativePath/> </parent> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-rest</artifactId> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <scope>runtime</scope> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> 实体类 @Data @Entity @Table(name = "member_info") public class ProjectMember { @Id @GeneratedValue(generator = "uuid",strategy= GenerationType.AUTO) @GenericGenerator(name = "uuid", strategy = "uuid") @Column(name = "member_id") private String memberId; @Column(name = "project_id") private String projectId; @Column(name = "user_id") private String userId; @Column(name = "member_role") private String memberRole; @Column(name = "user_name") private String userName; }实体创建后只需要DAO层,与传统写法不同,不需要其他业务层,DAO层如下:
实体对应DAO层 主要使用@RepositoryRestResource与@RestResource两个注解,如想了解原理,具体请百度,哈哈,下面让我们快速上手: @RepositoryRestResource(collectionResourceRel = "member",path="member") public interface ProjectMemberRepository extends JpaRepository<ProjectMember, String>{ @RestResource(path = "page") Page<ProjectMember> findByProjectIdAndUserNameLike(String projectId, String userName, Pageable pageable); @RestResource(path = "memberList") List<ProjectMember> findByProjectIdEquals(@Param("projectId") String projectId); } 访问接口启动项目访问http://localhost:8082/member,结果如下(作者使用postman):
{ "_embedded": { "member": [ { "memberId": "18", "projectId": "8a929f8b729e1bd101729e39a1970007", "userId": "4", "memberRole": "1", "userName": "业务用户7", "_links": { "self": { "href": "http://localhost:8082/member/18" }, "projectMember": { "href": "http://localhost:8082/member/18" } } }, { "memberId": "19", "projectId": "8a929f8b729e1bd101729e39a1970007", "userId": "4", "memberRole": "1", "userName": "业务用户8", "_links": { "self": { "href": "http://localhost:8082/member/19" }, "projectMember": { "href": "http://localhost:8082/member/19" } } } ] }, "_links": { "self": { "href": "http://localhost:8082/member{?page,size,sort}", "templated": true }, "profile": { "href": "http://localhost:8082/profile/member" }, "search": { "href": "http://localhost:8082/member/search" } }, "page": { "size": 20, "totalElements": 2, "totalPages": 1, "number": 0 } }其中member中的内容是当前实体的所有实例,即数据库的数据; _links中内容使用最频繁,http://localhost:8082/member/search是我们自己定义查询方法时使用最多的,请继续往下浏览
列表查询 上一步中我们看到的_links中href为http://localhost:8082/member{?page,size,sort}的即是列表查询接口,但是平时使用中我们通常会使用根据某个字段查询列表,所以我们在DAO层中写了此方法: @RestResource(path = "page") Page<ProjectMember> findByProjectIdAndUserNameLike(String projectId,String userName, Pageable pageable);该方法调用示例如下,注意路径:
http://localhost:8082/member/search/page?projectId=8a929f8b729e1bd101729e39a1970007&userName=%%&page=0&size=10由于是根据userName模糊查询,userName默认要传入字符串“%%”,不然是查询不到东西的;若要查询名称包含“业务”的,此时userName = %业务% 调用结果如下:
{ "_embedded": { "member": [ { "memberId": "18", "projectId": "8a929f8b729e1bd101729e39a1970007", "userId": "4", "memberRole": "1", "userName": "业务用户7", "_links": { "self": { "href": "http://localhost:8082/member/18" }, "projectMember": { "href": "http://localhost:8082/member/18" } } }, { "memberId": "19", "projectId": "8a929f8b729e1bd101729e39a1970007", "userId": "4", "memberRole": "1", "userName": "业务用户8", "_links": { "self": { "href": "http://localhost:8082/member/19" }, "projectMember": { "href": "http://localhost:8082/member/19" } } } ] }, "_links": { "self": { "href": "http://localhost:8082/member/search/page?projectId=8a929f8b729e1bd101729e39a1970007&userName=%%&page=0&size=10" } }, "page": { "size": 10, "totalElements": 2, "totalPages": 1, "number": 0 } } 新增 POST接口,接口地址: http://localhost:8082/member接口参数为json:
{ "projectId":"8a929f8b729e1bd101729e39a1970007", "userId":"33333", "memberRole":"1", "userName":"测试业务用户" }接口调用成功会返回新增的实体,结果如下:
{ "memberId": "8a929f87730a185401730a3a648e0000", "projectId": "8a929f8b729e1bd101729e39a1970007", "userId": "33333", "memberRole": "1", "userName": "测试业务用户", "_links": { "self": { "href": "http://localhost:8082/member/8a929f87730a185401730a3a648e0000" }, "projectMember": { "href": "http://localhost:8082/member/8a929f87730a185401730a3a648e0000" } } } 删除 DELETE接口,接口地址: http://localhost:8082/member/8a929f87730a185401730a3a648e0000接口地址最后是实体的id
修改 我们将前面查到的userName为“业务用户8”的用户修改userName为“用户88” 使用PUT接口,接口地址: http://localhost:8082/member/19接口参数为json:
{ "projectId":"8a929f8b729e1bd101729e39a1970007", "userId":"4", "memberRole": "1", "userName":"用户88" }接口请求结果为已修改完成的实体:
{ "memberId": "19", "projectId": "8a929f8b729e1bd101729e39a1970007", "userId": "4", "memberRole": "1", "userName": "用户88", "_links": { "self": { "href": "http://localhost:8082/member/19" }, "projectMember": { "href": "http://localhost:8082/member/19" } } }交流请Q:983717294