Spring Data JPA 介绍

发布时间:2024年01月13日

概述

Spring Data JPA基于JPA(Java Persistence API)标准,提供了一套用于简化数据访问层开发的抽象。它通过简化常用的CRUD操作,减少了开发人员需要编写的代码量,提高了开发效率。本文将重点介绍如何将Spring Data JPA集成到Springboot项目中,并且配置持久层。

Spring Data DAO

DAO层通常都是一些固定模式的代码,因此我们可以将其简化,这样做有一些好处:固定模式的文件和代码我们可以不用编写和维护。

而使用Spring Data JPA我们甚至可以不用编写DAO的实现,我们需要做的只是显示的定义接口。

使用Spring Data JPA我们需要继承JPA的特定接口JpaRepository,这样Spring Data就会自动找到这个接口并自动为其创建实现类。

而继承这个接口之后我们就可以使用标准的CRUD去访问数据库了。

自定义方法

通过继承JpaRepository,我们已经可以使用基本的CRUD了,如果要使用自定义的方法,JPA提供了一些选择:

  • 在接口中简单地定义一个新方法
  • 通过使用@Query注解提供实际的JPQL查询
  • 在Spring Data中使用更高级的Specification和Querydsl
  • 通过JPA命名查询定义自定义查询

其中Specification和Querydsl有些类似于JPA Criteria,但其更加灵活,整体也更加具有可读性和可复用性,尤其是对于大量的固定查询。

自定义查询

当Spring Data创建一个新的Repository实现时,它会分析接口定义的所有方法,并尝试从方法名称自动生成查询。尽管这种方式有一些限制,但不能否认它是一种非常强大,可以轻松定义新的自定义访问方法。

public interface MyEntityRepository extends JpaRepository<MyEntity, Long> {
    MyEntity findByName(String name);
}

Jpa会自动生成如下Query

SELECT e FROM MyEntity e WHERE e.name = :name

Spring Data提供了一个强大的查询创建机制,支持广泛的关键字和表达式。通过遵循命名约定和方法签名,Spring Data可以推断方法的意图并动态生成相应的查询。

值得注意的是,查询创建机制非常灵活,也可以处理更复杂的场景。并且可以使用额外的关键字,如"OrderBy"、"IgnoreCase",或者结合多个字段和条件来创建更具体的查询。

手动查询

我们可以使用@Query注解来手动查询

@Query("SELECT f FROM MyEntity f WHERE LOWER(f.name) = LOWER(:name)")
MyEntity retrieveByName(@Param("name") String name);

配置事务

事实上,我们不常接触Spring管理的DAO,但是它有默认实现SimpleJpaRepository。

它在类级别使用了一个只读的@Transactional注解,然后针对非只读方法进行了覆盖。其余的事务语义是默认的,但可以通过手动方式对方法进行覆盖。

SimpleJpaRepository是Spring Data JPA提供的默认实现。它提供了标准的CRUD操作和其他常见的数据访问方法。默认情况下,它使用事务语义,其中读操作被标记为只读事务,写操作被标记为非只读事务。

Spring Data JPA 配置

我们可以使用@EnableJpaRepositories注解,并指定包含DAO接口的包:

@Configuration
@EnableJpaRepositories(basePackages = "com.example.repository")
public class JpaConfiguration {
   ...
}

在上面的示例中,basePackages参数指定了包含DAO接口的包的路径。

此注解应该与其他配置一起使用,例如@Configuration注解,以确保它被正确加载到应用程序上下文中。

Maven 依赖

<dependency>
    <groupId>org.springframework.data</groupId>
    <artifactId>spring-data-jpa</artifactId>
    <version>2.4.0</version>
</dependency>

添加该依赖项后,Maven将下载并添加所需的Spring Data JPA库到项目中。这样,您就可以在应用程序中使用Spring Data JPA提供的功能和特性了。

使用Springboot

我们还可以使用Spring Boot Starter Data JPA依赖项,它将自动为我们配置DataSource。

<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
    <groupId>com.h2database</groupId>
    <artifactId>h2</artifactId>
    <version>1.4.200</version>
</dependency>

只需添加这些依赖项,我们的应用程序就可以运行起来。

文章来源:https://blog.csdn.net/aioulaoda/article/details/135562066
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。