返回 导航

SpringBoot / Cloud

hangge.com

SpringBoot - 使用Spring Data JPA操作数据库3(构建RESTful服务1:基本用法)

作者:hangge | 2019-11-21 08:10
    RESTRepresentational State Transfer)是一种 Web 软件架构风格(它是一种风格,而不是标准),而匹配或兼容这种架构风格的网络服务称为 REST 服务。在 REST 中,资源是由 URI 来指定的,对资源的增删改查操作可以通过 HTTP 协议提供的 GETPOSTPUTDELETE 等方法实现。
    在 Spring Boot 中,使用 Spring Data JPASpring Data Rest 可以快速开发出一个 RESTful 应用。下面通过样例进行演示。

一、基本用法

1,安装配置 

(1)首先编辑 pom.xml 文件,添加相关依赖:
spring-boot-starter-data-jpa:提供对 Spring Data JPA 的支持
spring-boot-starter-data-rest:提供对 Spring Data Rest 的支持
mysql-connector-javaMySQL 数据库驱动
druidDruid 是阿里巴巴开发的号称为监控而生的数据库连接池,也是目前最好的数据库连接池。
<!-- Spring Data JPA 依赖 -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>

<!-- Spring Data Rest 依赖 -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-rest</artifactId>
</dependency>

<!-- 数据库驱动依赖 -->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
</dependency>

<!-- 数据库连接池 -->
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid</artifactId>
    <version>1.1.9</version>
</dependency>

(2)接着在 application.properties 中配置数据库基本信息以及 JPA 相关配置:
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.url=jdbc:mysql://localhost:3306/hangge?serverTimezone=Asia/Shanghai
spring.datasource.username=root
spring.datasource.password=hangge1234
#是否在控制台打印JPA执行过程生成的SQL
spring.jpa.show-sql=true
#表示JPA对应的数据库是MySQL
spring.jpa.database=mysql
#表示在项目启动时根据实体类更新数据库中的表
spring.jpa.hibernate.ddl-auto=update
#表示使用的数据库方言是MySQL57Dialect
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL57Dialect

2,创建实体类

我们创建 Book 实体类(注意:由于我们前面的 JPA 配置,数据库不需要预先创建对应的表,程序启动后会自动生成)
@Entity(name = "t_book")
@Setter
@Getter
@NoArgsConstructor
public class Book {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer id;

    private String name;
    private String author;
}

3,创建数据库访问层

(1)接着创建 BookDao 接口,继承 JpaRepository,代码如下:
public interface BookDao extends JpaRepository<Book, Integer> {
}

(2)BookDao 目前里面没有写任何代码是因为 JpaRepository 默认已经提供了一些基本的操作方法。从下面 JpaRepository 源码可以看到,基本的增删改查、分页查询方法 JpaRepository 都提供了。
@NoRepositoryBean
public interface JpaRepository<T, ID> extends PagingAndSortingRepository<T, ID>, QueryByExampleExecutor<T> {
    List<T> findAll();

    List<T> findAll(Sort var1);

    List<T> findAllById(Iterable<ID> var1);

    <S extends T> List<S> saveAll(Iterable<S> var1);

    void flush();

    <S extends T> S saveAndFlush(S var1);

    void deleteInBatch(Iterable<T> var1);

    void deleteAllInBatch();

    T getOne(ID var1);

    <S extends T> List<S> findAll(Example<S> var1);

    <S extends T> List<S> findAll(Example<S> var1, Sort var2);
}

4,增删改查测试

    经过上面几步,一个 RESTful 服务就构建成功了(虽然我们都没写什么)。RESTful 服务构建成功后,默认的请求路径就是实体类名小写再加上后缀。比如这里就是:
  • http://localhost:8080/books

(1)发起一个 post 请求即可向数据库添加一条数据:

(2)使用 get 请求则可查询数据(分页查询):
(1)分页查询请求默认每页记录数是 20 条,页数为 0(页码从 0 开始计),查询结果如下图。可以看到返回结果除了有图书信息外,还有如何发起一个分页请求以及当前页面的分页信息。
(2)如果想要修改请求页码和每页记录数,只需要在请求地址中携带上相关参数即可。下面请求表示查询第 2 页数据并且每页记录数为 3
  • http://localhost:8080/books?page=1&size=3
(3)除了分页外还支持排序,下面请求表示在上面基础上按照 id 倒叙排列:
  • http://localhost:8080/books?page=1&size=3&sort=id,desc
(4)如果想按照 id 查询,只需在 /books 后面追上 id 即可。比如下面 URL 查询 id 1book
  • http://localhost:8080/books/1

(3)使用 put 请求可以实现对数据的修改。对数据修改是通过 id 进行,因此请求路径中要有 id。比如下面请求路径表示修改 id 2 的记录。
注意PUT 请求的返回结果就是被修改之后的记录。

(4)发送 delete 请求可以实现对数据的删除操作。例如下面删除 id 2 的记录:
注意:DELETE 请求没有返回值。
评论

全部评论(0)

回到顶部