# spring-data-jpa-demo
**Repository Path**: keveon/spring-data-jpa-demo
## Basic Information
- **Project Name**: spring-data-jpa-demo
- **Description**: 本项目是一个SpringDataJpa的demo项目, 旨在演示大部分常用的使用方法。
- **Primary Language**: Java
- **License**: Apache-2.0
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 6
- **Forks**: 2
- **Created**: 2017-02-23
- **Last Updated**: 2021-05-24
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# Spring Data Jpa 常用功能演示
配套说明请查看:[万字长文带你领略 Spring 全家桶带来的极速开发体验](https://keveon.me/spring/spring-family-bucket-1.html)
## 项目简介
- 本项目采用 [SpringBoot](http://projects.spring.io/spring-boot/) 当前最新的 `2.1.4.RELEASE` 做基础架构支撑, 参考本项目建议有一定的 [SpringBoot](http://projects.spring.io/spring-boot/) 基础及经验.
- 教程主要面向中文用户, 如果你英文良好, 建议直接阅读官网帮助文档.
- Accessing Data with JPA:[https://spring.io/guides/gs/accessing-data-jpa/](https://spring.io/guides/gs/accessing-data-jpa/).
- Accessing JPA Data with REST:[https://spring.io/guides/gs/accessing-data-rest/](https://spring.io/guides/gs/accessing-data-rest/).
- 项目中Bean全部采用 [lombok](https://projectlombok.org/) 进行精简, 需要配合IDE插件使用, 在此项目不进行讨论, 如需了解更多, 参考以下链接:
- 官方文档地址:[https://projectlombok.org/features/index.html](https://projectlombok.org/features/index.html).
- 官方下载地址:[https://projectlombok.org/download.html](https://projectlombok.org/download.html).
- lombok-intellij-plugin:[https://github.com/mplushnikov/lombok-intellij-plugin](https://github.com/mplushnikov/lombok-intellij-plugin).
- 本项目所有配置文件均采用 `yaml` 方式, 如需了解更多, 请移步官网: .
- 教程目前在不定时进行调整和补充, 需要关注更新的请Watch、Star、Fork.
- 同时邀请您一起参与完善该教程, 帮助更多的人, 欢迎反馈错误和意见!
- 如果你想参与完善该教程, 请移步到 Github 上进行 Fork:[https://github.com/keveon/spring-data-jpa-demo](https://github.com/keveon/spring-data-jpa-demo)
## 框架介绍
> **Spring Data JPA** 是 [Spring Data](http://projects.spring.io/spring-data) 系列的一部分, 使得轻松实现基于JPA的存储库变得更容易. 该模块处理对基于JPA的数据访问层的增强支持. 它使得更容易构建使用数据访问技术的Spring-powered应用程序.
Spring Data JPA 的目标是通过让一些必须的工作变得更简单, 来显著提高数据访问层的实现. 作为一个开发者, 你写你的仓库界面, 包括自定义查询方法, 而 Spring 给你提供自动实现.
### 特点
- 对建立基于Spring 和 JPA 的库的支持.
- 支持 [Querydsl](http://www.querydsl.com/) predicates和安全类型的 JPA 查询.
- Transparent auditing of domain class.
- 分页支持, 动态查询执行, 可以集成自定义数据访问代码.
- 在 `@Query` 注明查询引导时验证.
- 支持基于XML的实体映射.
- 引入 `@EnableJpaRepositories` , 实现 `JavaConfig based` 仓库配置.
## 正式开始
#### 准备工作
>在开始提到, 本项目采用SpringBoot做基础架构支撑, 项目中使用 `spring-data-jpa` 的推荐方法是使用依赖关系管理系统,也就是我们平时所说的包管理器、构建工具.下面两种工具对应的代码段可以复制并粘贴到您的项目中.
如需帮助, 请参阅我们使用 [Maven](https://spring.io/guides/gs/maven/) 和 [Gradle](https://spring.io/guides/gs/gradle/) 构建的入门指南.
###### Maven
``` Maven
...
org.springframework.boot
spring-boot-starter-data-jpa
...
```
###### Gradle
``` Gradle
dependencies {
...
compile 'org.springframework.boot:spring-boot-starter-data-jpa'
...
}
```
#### Jpa提供的接口
> 为了使用方便, spring-data-jpa已经提供了多个接口, 只需要继承其中一个, spring-data-jpa将会自动实现并提供相应的实现. 继承/实现关系如下:
QueryDslJpaRepository
┣━ QueryDslPredicateExecutor
┗━ SimpleJpaRepository
┣━ JpaSpecificationExecutor
┗━ JpaRepository
┣━ QueryByExampleExecutor
┗━ PagingAndSortingRepository
┗━ CrudRepository
┗━Repository
> 这些 `Repository` 都是 `spring-data-commons` 提供给我们的核心接口, `spring-data-commons` 是 `Spring Data` 的核心包. 这个接口中为我们提供了数据的分页方法, 以及排序方法. `spring-data` 让我们省了很多心了, 一切都按照这个规范进行构造, 就连业务系统中常用到的一些操作都为我们考虑到了, 而我们只需更用心的去关注业务逻辑层. `spring-data` 将 `repository` 的颗粒度划得很细.
- `Repository`:最基本的接口, 不提供任何功能, 仅作为 `SpringData` 的一个标记, 并提供实现.这个接口只是一个空的接口, 目的是为了统一所有 `Repository` 的类型, 其接口类型使用了泛型, 泛型参数中T代表实体类型, ID则是实体中id的类型. 任何直接或间接继承此接口的类或接口, 均会被Spring扫描到.
- `CrudRepository`:提供最基本的增删改查方法.此接口中的方法大多是我们在访问数据库中常用的一些方法, 如果我们要写自己的DAO的时候, 只需定义个接口来集成它便可使用了.
- `PagingAndSortingRepository`:提供基本的分页及排序功能, 并同时提供CrudRepository接口的功能.
- `QueryByExampleExecutor`:提供查询功能, 后期会具体讲解.
- `JpaRepository`:这个接口继承自 `PagingAndSortingRepository` , 里面的方法都是一些简单的操作, 并未涉及到复杂的逻辑. 当你在处理一些简单的数据逻辑时, 便可继承此接口.
- `JpaSpecificationExecutor`:提供 `criteria` 查询, 排序、支持分页, 此接口没有父类(不包括 `Object` ), 即没有上级接口.
- `SimpleJpaRepository`:实现 `JpaRepository` 和 `JpaSpecificationExecutor` 接口, 使用 [hibernate](http://hibernate.org/) 的 `EntityManager`做持久化相关处理. 您也可以更换为其他 `JPA` 实现, 如:`EclipseLink`、`TopLink` 等.
- `QueryDslPredicateExecutor`:提供 [Querydsl](http://www.querydsl.com/) 查询的接口.
- `QueryDslJpaRepository`:继承 `SimpleJpaRepository` 类, 实现 `QueryDslPredicateExecutor` 接口.
## 附录A:Github 常用按钮说明
- `Watch`:关注该项目, 作者有更新的时候, 会在你的 Github 主页有通知消息.
- `Star`:收藏该项目, 在你的头像上有一个 "Your stars" 链接, 可以看到你的收藏列表, 以方便下次进来.
- `Fork`:复制一份项目到自己的 Github 空间上, 你可以自己开发自己的这个地址项目, 然后 Pull Request 给项目原主人.
## 联系方式
- Github:
- Email: