SpringDataREST+JPA,打造史上最简单的RESTFulAPI万能
接⼝!
1、前⾔
1、REST 是最近⼏年⾮常流⾏的的 API 设计规范,它简洁并且有层次,能基于HTTP、URL、XML以及HTML这些现有的⼴泛流⾏的协议和标准。
2、在REST中,资源是由URL来指定的,对资源的增删改查操作可以通过HTTP协议提供的GET、POST、PUT、DELETE等⽅法来实现。
3、使⽤REST可以⾼效地利⽤Ehcache、Redis等主流缓存技术来提⾼响应速度。
4、JPA能⾃动创建数据表,实现与MySQL、Oracle、SQL、DB2、PgSQL等主流数据库的交互。
5、利⽤Spring-boot我们可以⾮常快速的开发⼀个RESTFul API接⼝服务。
2、项⽬基本框架
1、Spring-boot 2.5+
2、JDK 11+或者JDK13+
3、数据库MySQL 8.0+
4、测试软件Postman
3、创建项⽬并添加依赖
<!--mysql依赖-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.23</version>
</dependency>
<!--jpa依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<!--rest依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-rest</artifactId>
</dependency>
4、安装MySQL8.0+
我们新建⼀个名称为jpa的数据库,设置登录账号root的密码,不需要创建表(Jpa会⾃动帮我们建表)。
5、在项⽬application.properties中对MySQL和Jpa进⾏相关配置
#mysql配置
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/jpa?characterEncoding=UTF-8
spring.datasource.username=root
spring.datasource.password=***您的MySQL root密码***
spring.datasource.sql.cj.jdbc.Driver
#Jpa配置
#是否在控制台打印JPA执⾏过程⽣成的SQL
spring.jpa.show-sql=true
spring.jpa.database=mysql
#项⽬启动时根据实体类更新数据库中的表
spring.jpa.hibernate.ddl-auto=update
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL57Dialect
1、持久层是Java EE中访问数据库的核⼼操作,Spring-boot对常见的持久层框架都提供了⾃动化配置,例如JdbcTemplate、Mybatis、JPA等。
2、JdbcTemplate基础,Mybatis灵活,JPA⽅便。本⽂中我们选择Spring-boot Data JPA,可以实现⾃动化建表,⼤⼤减少数据库及访问代码开发量。
3、在上⽂对Jpa的配置中,spring.jpa.hibernate.ddl-auto的可选参数如下,我们选择update。
create启动时删数据库中的表,然后创建,退出时不删除数据表
create-drop启动时删数据库中的表,然后创建,退出时删除数据表 如果表不存在报错
update如果启动时表格式不⼀致则更新表,原有数据保留
validate项⽬启动表结构进⾏校验 如果不⼀致则报错
6、创建实体类Book以及接⼝BookRepository
1、创建实体类Book,@Entity对应MySQL数据表t_book,项⽬启动后系统会⾃动在MySQL中创建t_book表,t_book表中的字段属性会根据实体类全⾃动定义。
stful;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
//表明是⼀个实体类
@Entity(name = "t_book")
public class Book {
//@Id表明id是主键
@Id
//@GeneratedValue表⽰主键⾃动⽣成,strategy表明⽣成策略
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
private String name;
private String author;
public Integer getId() { return id; }
public void setId(Integer id) { this.id = id; }
public String getName() { return name; }
public void setName(String name) { this.name = name; }
public String getAuthor() { return author; }
public void setAuthor(String author) { this.author = author; }
}
@Id表⽰主键,@GeneratedValue表⽰主键⾃动⽣成,strategy表明⽣成策略,我们选择IDENTITY⾃增长型,strategy的相关属性如下:TABLE 使⽤⼀个特定的数据库表格来保存主键
SEQUENCE根据底层数据库的序列来⽣成主键,条件是数据库⽀持序列
IDENTITY主键由数据库⾃动⽣成(主要是⾃动增长型)
AUTO主键由程序控制
2、创建接⼝BookRepository,继承JpaRepository,JpaRepository默认提供的⼀些基本的数据库操作⽅法,如下:
List<T> findAll() 查所有
List<T> findAll(Sort sort) 排序查
List<T> findAll(Pageable pageable) 分页查
List<T> findAllById(Iterable<ID> ids) 根据ID查
boolean existsById(ID id) 根据查询是否存在
long count() 统计数量
deleteById(Integer id) 根据ID删除数据
<S extends T> S save(S entity) 插⼊更新数据
......
stful;
import org.springframework.pository.JpaRepository;
//继承JpaRepository默认提供的⼀些基本的数据库操作⽅法
public interface BookRepository extends JpaRepository<Book,Integer> {
}
7、启动项⽬,⼀个简单的RESTFul API接⼝就搭建完成了
1、可能有⼩伙伴会问“我们什么都没有写啊,接⼝就做完了?”,是的,这就是Spring Data REST的魅⼒所在,⼀个简单的标准的API接⼝就做好了。
2、启动项⽬,系统已经⾃动在MySQL中创建好了t_book表,我们添加⼏条数据,就可以开始测试了。
8、使⽤Postman开始测试
RESTFul API默认请求路径是实体类名⼩写再加上s后缀,本⽂实体类为book,加上s后缀,即默认路径名是books。
1、查询测试,我们在Postman创建4个GET请求,注意page默认从0开始。
springboot结构下图为③查询结果:
2、新增测试,我们在Postman创建1个POST请求,Body中放⼊新增的数据,选择JSON类型。
3、修改测试,我们在Postman创建1个PUT请求,对数据修改是通过id进⾏的,所以请求路劲中要有id,在Body中放⼊修改的新数据。
path属性
表⽰将所有请求路径修改为新路径,例如将books修改为bs collectionResourceRel属性
表⽰返回JSON集合中book集合的key修改为新名称itemResourceRel属性
表⽰返回JSON集合中单个book的key修改为新名称
4、删除测试,我们在Postman创建1个DELETE 请求,对数据修改是通过id进⾏的,例如删除id为8的数据,请求如下。
9、进阶教程1:⾃定义请求路径、⾃定义查询⽅法
1、⾃定义请求路径,默认情况下,请求路径都是实体类名加⼩写s,本⽂为books,如果想重新定义,则通
过@RepositoryRestResource 实现。这个⽐较抽象,我们可以看代码。
stful;
import org.springframework.pository.JpaRepository;
import org.st.core.annotation.RepositoryRestResource;
@RepositoryRestResource(path = "bs",collectionResourceRel = "bs",itemResourceRel = "b")
public interface BookRepository extends JpaRepository<Book,Integer> {
}
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论