天天看点

芋道 Spring Boot JPA 入门(一)之快速入门

1. 概述

2. 快速入门

3. 分页操作

4. 基于方法名查询

5. 基于注解查询

666. 彩蛋

本文,我们基于 Spring Boot 2.X 版本。

我们,咱们来学习下 Spring Data JPA 。

相信不少胖友之前有了解过 JPA、Hibernate ,那么 JPA、Hibernate、Spring Data JPA 这三者是什么关系呢?我们来一起理一理。

JPA ,全称 Java Persistence API ,是由 Java 定义的 Java ORM 以及实体操作 API 的标准。正如最早学习 JDBC 规范,Java 自身并未提供相关的实现,而是 MySQL 提供 MySQL mysql-connector-java 驱动,Oracle 提供 oracle-jdbc 驱动。而实现 JPA 规范的有:

Hibernate ORM

Oracle TopLink

Apache OpenJPA

Spring Data JPA ,是 Spring Data 提供的一套简化的 JPA 开发的框架。

内置 CRUD、分页、排序等功能的操作。

根据约定好的方法名规则,自动生成对应的查询操作。

使用 @Query 注解,自定义 SQL 。

所以,绝大多数情况下,我们无需编写代码,直接调用 JPA 的 API 。也因此,在我们使用的 Spring Data JPA 的项目中,如果想要替换底层使用的 JPA 实现框架,在未使用到相关 JPA 实现框架的特殊特性的情况下,可以透明替换。

关于这一点,我们在 《芋道 Spring Boot Redis 入门》 中,已经看到 Spring Data Redis 也是已经看到这样的好处。

总的来说,就是如下一张图:

FROM 《spring data jpa hibernate jpa 三者之间的关系》
芋道 Spring Boot JPA 入门(一)之快速入门

当然,绝大多数情况下,我们使用的 JPA 实现框架是 Hibernate ORM 。所以整个调用过程是:

示例代码对应仓库:lab-13-jpa 。

本小节,我们会使用 spring-boot-starter-data-jpa 自动化配置 Spring Data JPA 。同时,演示 Spring Data JPA 的 CRUD 的操作。

在 pom.xml 文件中,引入相关依赖。

具体每个依赖的作用,胖友自己认真看下艿艿添加的所有注释噢。

另外,在 spring-boot-starter-data-jpa 中,已经默认引入了 Hibernate 的依赖。

创建 Application.java 类,配置 @SpringBootApplication 注解即可。代码如下:

在 application.yml 中,添加 JPA 配置,如下:

datasource 配置项,配置 datasource 数据源配置内容。

jpa 配置项,配置 Spring Data JPA 配置内容,对应 `org.springframework.boot.autoconfigure.orm.jpa.JpaProperties.java` 类。

hibernate 配置项,配置 Hibernate 配置内容,对应 org.springframework.boot.autoconfigure.orm.jpa.HibernateProperties.java 类。

create :每次加载 hibernate 时都会删除上一次的生成的表,然后根据你的 model 类再重新来生成新表,哪怕两次没有任何改变也要这样执行,这就是导致数据库表数据丢失的一个重要原因。

create-drop :每次加载 hibernate 时根据 model 类生成表,但是 sessionFactory 一关闭,表就自动删除。

update :最常用的属性,第一次加载 hibernate 时根据 model 类会自动建立起表的结构(前提是先建立好数据库),以后加载 hibernate 时根据 model 类自动更新表结构,即使表结构改变了但表中的行仍然存在不会删除以前的行。要注意的是当部署到服务器后,表结构是不会被马上建立起来的,是要等应用第一次运行起来后才会。

validate :每次加载 hibernate 时,验证创建数据库表结构,只会和数据库中的表进行比较,不会创建新表,但是会插入新值。

建议,生产环境下,建议配置 none ,不使用 Hibernate Auto DDL 功能。???? 启动个项目,就自动变更数据库表结构,多危险啊~

实际项目无需配置 hibernate 配置项,这里仅仅是演示,让胖友知道这回事。

ddl-auto 配置项,设置 Hibernate DDL 处理策略。一共有 none、create、create-drop、update、validate 五个选项。

FROM 《jpa 的 hibernate.ddl-auto 的几个属性值区别》

在 cn.iocoder.springboot.lab13.jpa.dataobject 包路径下,创建 UserDO.java 类,用户 DO 。代码如下:

关于 JPA 的注解的详细说明,胖友后面再看看 《Spring Data JPA 中常用的注解详解》 文章。我们,继续往下看。

对应的创建表的 SQL 如下:

在 cn.iocoder.springboot.lab13.mybatis.repository 包路径下,创建 UserRepository01 接口。代码如下:

继承 org.springframework.data.repository.CrudRepository 接口,第一个泛型设置对应的实体是 UserDO ,第二个泛型设置对应的主键类型是 Integer 。

因为实现了 CrudRepository 接口,Spring Data JPA 会自动生成对应的 CRUD 的代码。具体 CrudRepository 提供了哪些操作,胖友点击 `CrudRepository.java` 查看。

创建 UserRepository01Test 测试类,我们来测试一下简单的 UserRepository01 的每个操作。代码如下:

具体的,胖友可以自己跑跑,妥妥的。

Spring Data 提供 org.springframework.data.repository.PagingAndSortingRepository 接口,继承 CrudRepository 接口,在 CRUD 操作的基础上,额外提供分页和排序的操作。代码如下:

在 cn.iocoder.springboot.lab13.mybatis.repository 包路径下,创建 UserRepository02 接口。代码如下:

实现 PagingAndSortingRepository 接口,第一个泛型设置对应的实体是 UserDO ,第二个泛型设置对应的主键类型是 Integer 。

创建 UserRepository02Test 测试类,我们来测试一下简单的 UserRepository02 的每个操作。代码如下:

上一篇: JPA入门例子
下一篇: GUI学习笔记