SpringBoot - 使用Spring Data JPA操作数据库3(构建RESTful服务1:基本用法)
REST(Representational State Transfer)是一种 Web 软件架构风格(它是一种风格,而不是标准),而匹配或兼容这种架构风格的网络服务称为 REST 服务。在 REST 中,资源是由 URI 来指定的,对资源的增删改查操作可以通过 HTTP 协议提供的 GET、POST、PUT、DELETE 等方法实现。
在 Spring Boot 中,使用 Spring Data JPA 和 Spring Data Rest 可以快速开发出一个 RESTful 应用。下面通过样例进行演示。
(2)接着在 application.properties 中配置数据库基本信息以及 JPA 相关配置:
(2)BookDao 目前里面没有写任何代码是因为 JpaRepository 默认已经提供了一些基本的操作方法。从下面 JpaRepository 源码可以看到,基本的增删改查、分页查询方法 JpaRepository 都提供了。
(1)发起一个 post 请求即可向数据库添加一条数据:
(2)使用 get 请求则可查询数据(分页查询):
(3)使用 put 请求可以实现对数据的修改。对数据修改是通过 id 进行,因此请求路径中要有 id。比如下面请求路径表示修改 id 为 2 的记录。
(4)发送 delete 请求可以实现对数据的删除操作。例如下面删除 id 为 2 的记录:
在 Spring Boot 中,使用 Spring Data JPA 和 Spring 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-java:MySQL 数据库驱动
druid:Druid 是阿里巴巴开发的号称为监控而生的数据库连接池,也是目前最好的数据库连接池。
spring-boot-starter-data-rest:提供对 Spring Data Rest 的支持
mysql-connector-java:MySQL 数据库驱动
druid:Druid 是阿里巴巴开发的号称为监控而生的数据库连接池,也是目前最好的数据库连接池。
<!-- 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 请求即可向数据库添加一条数据:
(1)分页查询请求默认每页记录数是 20 条,页数为 0(页码从 0 开始计),查询结果如下图。可以看到返回结果除了有图书信息外,还有如何发起一个分页请求以及当前页面的分页信息。
(2)如果想要修改请求页码和每页记录数,只需要在请求地址中携带上相关参数即可。下面请求表示查询第 2 页数据并且每页记录数为 3:
(2)如果想要修改请求页码和每页记录数,只需要在请求地址中携带上相关参数即可。下面请求表示查询第 2 页数据并且每页记录数为 3:
- http://localhost:8080/books?page=1&size=3
- http://localhost:8080/books?page=1&size=3&sort=id,desc
- http://localhost:8080/books/1
(3)使用 put 请求可以实现对数据的修改。对数据修改是通过 id 进行,因此请求路径中要有 id。比如下面请求路径表示修改 id 为 2 的记录。
注意:PUT 请求的返回结果就是被修改之后的记录。
(4)发送 delete 请求可以实现对数据的删除操作。例如下面删除 id 为 2 的记录:
注意:DELETE 请求没有返回值。