Spring Data Rest实战

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/chengqiuming/article/details/83211287

一 新建Spring Boot项目

1 新增依赖spring-boot-starter-data-jpa、spring-boot-starter-data-rest和ojdbc6

<dependencies>
    <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>com.oracle</groupId>
        <artifactId>ojdbc6</artifactId>
        <version>11.2.0.2.0</version>
    </dependency>
</dependencies>

2 配置application.properties

spring.datasource.driverClassName=oracle.jdbc.OracleDriver
spring.datasource.url=jdbc\:oracle\:thin\:@localhost\:1521\:xe
spring.datasource.username=system
spring.datasource.password=oracle

#配置jpa
#Hibernate提供了根据实体类自动维护数据库表结构的功能
#create:启动时删除上一次生成的表,并根据实体类生成表,表中的数据会被清空
#create-drop:启动时候根据实体类生成表,sessionFactory关闭时表会被删除
#update:启动时会根据实体类生成表,当实体类属性表动时,表的结构也会更新,在初期开发阶段使用此选项
#validate:启动是验证实体类和数据表是否一致,在数据结构稳定时采用此选项
#none:不采取任何手段
spring.jpa.hibernate.ddl-auto=update
#用来设置Hibernate操作的时候在控制台显示真实的sql语句。
spring.jpa.show-sql=true


spring.jackson.serialization.indent_output=true

debug=true

二 实体类

package com.wisely.ch8_3.domain;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;

@Entity
public class Person {
    @Id
    @GeneratedValue
    private Long id;
    
    private String name;
    
    private Integer age;
    
    private String address;
    
    
    
    public Person() {
        super();
    }
    public Person(Long id, String name, Integer age, String address) {
        super();
        this.id = id;
        this.name = name;
        this.age = age;
        this.address = address;
    }
    public Long getId() {
        return id;
    }
    public void setId(Long id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public Integer getAge() {
        return age;
    }
    public void setAge(Integer age) {
        this.age = age;
    }
    public String getAddress() {
        return address;
    }
    public void setAddress(String address) {
        this.address = address;
    }


}

三 实体类的Repository

package com.wisely.ch8_3.dao;

import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.repository.query.Param;
import org.springframework.data.rest.core.annotation.RepositoryRestResource;
import org.springframework.data.rest.core.annotation.RestResource;

import com.wisely.ch8_3.domain.Person;

@RepositoryRestResource(path = "person")
public interface PersonRepository extends JpaRepository<Person, Long> {
    
    @RestResource(path = "nameStartsWith", rel = "nameStartsWith")
    Person findByNameStartsWith(@Param("name")String name);

}

四 测试

1 输入localhost:8080

2 列表测试,输入localhost:8080/person

3 获取单个对象测试,输入localhost:8080/person/1

4 查询测试,输入localhost:8080/person/search/nameStartsWith?name=汪

5 分页测试,输入localhost:8080/person/?page=1&size=2

6 排序测试,输入localhost:8080/person/?sort=age,desc

7 保存测试

localhost:8080/person发起POST请求,我们将要保存的数据放置在请求体中,数据类型设置为JSON,JSON内容如下

8 更新测试

现在我们更新新增id为7的数据,用PUT方式访问localhost:8080/person/7,并修改提交的数据

9 删除测试

删除刚才新增的id=7的数据,使用DELETE方式访问localhost:8080/person/7

10 定制根路径

在application.properties中新增

spring.data.rest.base-path= /api

重启后,访问的根路径发生了变化

11 定制节点路径

@RepositoryRestResource(path = "people")    //定制节点路径
public interface PersonRepository extends JpaRepository<Person, Long> {
     //Person findByNameStartsWith(String name);
     @RestResource(path = "nameStartsWith", rel = "nameStartsWith")
     Person findByNameStartsWith(@Param("name")String name);
}

测试结果如下:

如果去掉定制节点那一行,访问时,节点使用persons路径,也就是在实体类之后加“s”来形成路径。

public interface PersonRepository extends JpaRepository<Person, Long> {
     //Person findByNameStartsWith(String name);
     @RestResource(path = "nameStartsWith", rel = "nameStartsWith")
     Person findByNameStartsWith(@Param("name")String name);
}

测试结果如下:

猜你喜欢

转载自blog.csdn.net/chengqiuming/article/details/83211287