spring-data-rest快速实现增删改查

spring-data-rest实现增删改查

- 项目相关依赖

<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=%25%25&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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值