JPA 入门实战(4)-
本文主要介绍 Spring Boot 中如何使用 Sping Data JPA,相关的环境及软件信息如下:Spring Boot 2.6.10。
1、Sping Data JPA 简介
Spring Data JPA 是 Spring Data 家族的一部分,它对基于 JPA 的数据访问提供了增强支持,让 JPA 更加易用。 它使得使用 Spring 构建的应用程序访问数据库变得更加容易。
编写应用程序的数据访问层是一件很麻烦的事, 必须编写太多样板代码来执行简单的查询以及分页和审计。 Spring Data JPA 旨在通过减工作量来显着改进数据访问层的实现。 作为开发人员,编写数据访问层接口,包括自定义查询方法,Spring 将自动提供实现。
1.1、Spring Data JPA 的特点
-
Sophisticated support to build repositories based on Spring and JPA
-
Support for Querydsl predicates and thus type-safe JPA queries
-
Transparent auditing of domain class
-
Pagination support, dynamic query execution, ability to integrate custom data access code
-
Validation of
@Query
annotated queries at bootstrap time -
Support for XML based entity mapping
-
JavaConfig based repository configuration by introducing
@EnableJpaRepositories
.
1.2、Spring Data JPA 与 Hibernate 的关系
Spring Data JPA 是 Spring 提供的一套对 JPA 操作更加高级的封装,底层依赖 Hibernate 的 JPA 实现。
2、JpaRepository 和 JpaSpecificationExecutor 接口
Spring Data JPA 提供了 JpaRepository 和 JpaSpecificationExecutor 接口,通过它们可以快速定义 DAO 接口,Spring Data JPA 会自动实现该接口。
2.1、JpaRepository
JpaRepository 接口内置了很多方法:
如果不满足业务需求,可以自定义方法。
2.1.1、使用 Query 注解
org.springframework.data.jpa.repository.Query 注解可以定义使用 JPQL 或 SQL 操作数据。
/** * 通过 JPQL 查询 */ @Query("from Student where name=?1 and age=?2") Student query(String name, Integer age); /** * SQL 语句查询数据 */ @Query(value = "select * from a_student where name=? and age=?", nativeQuery = true) Student queryBySql(String name, Integer age);