Spring Data Rest实战
一 新建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);
}
测试结果如下: