返回介绍

3.2 集成 Spring Data JPA

发布于 2025-04-26 13:53:49 字数 5254 浏览 0 评论 0 收藏

本节主要介绍如何在 Spring Boot 中集成 Spring Data JPA、服务层类开发,如何通过 Spring Data JPA 实现基本的增删改查功能,以及自定义查询方法等内容。

3.2.1 引入依赖

在 Spring Boot 中集成 Spring Data JPA,首先需要在 pom.xml 文件中引入所需的依赖,具体代码如下:

     <dependency>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-data-jpa</artifactId>
     </dependency>

在之前的章节中,我们已经在开发工具中安装好 Maven Helper 插件,所以大家可以通过该插件查看目前引入的所有依赖,如图 3-2 所示。

图 3-2 my-spring-boot 项目目录

3.2.2 继承 JpaRepository

在 pom.xml 文件中引入依赖之后,我们在目录/src/main/java/com.example.demo. repository 下开发一个 AyUserRepository 类,如图 3-3 所示,具体代码如下:

图 3-3 Maven Helper 查看 pom 依赖包

与此同时,我们需要在 AyUser 实体类下添加 @Entity 和 @Id 注解,具体代码如下:

  • @Entity:每个持久化 POJO 类都是一个实体 Bean,通过在类的定义中使用 @Entity 注解来进行声明。
  • @Table:声明此对象映射到数据库的数据表。该注释不是必需的,如果没有,系统就会使用默认值(实体的短类名)。
  • @Id:指定表的主键。

3.2.3 服务层类实现

我们在 my-spring-boot 项目下继续开发服务层接口类和实现类:AyUserService 和 AyUserServiceImpl 类,分别存放在目录/src/main/java/com.example.demo.service 和/src /main/java/com.example.demo.service.impl 下。具体代码如下:

接口类 AyUserService 定义了 4 个接口,findById 和 findAll 用来查询单个和所有数据,delete 用来删除数据,save 同时具备保存和更新数据的功能。接口实现类 AyUserServiceImpl 的代码如下:

  • @ Service:Spring Boot 会自动扫描到 @Component 注解的类,并把这些类纳入 Spring 容器中管理。也可以用 @Component 注解,只是 @Service 注解更能表明该类是服务层类。
  • @Component:泛指组件,当组件不好归类的时候,我们可以使用这个注解进行标注。
  • @Repository:持久层组件,用于标注数据访问组件,即 DAO 组件。
  • @Resource:这个注解属于 J2EE,默认按照名称进行装配,名称可以通过 name 属性进行指定。如果没有指定 name 属性,当注解写在字段上时,就默认取字段名进行查找。如果注解写在 setter 方法上,就默认取属性名进行装配。当找不到与名称匹配的 bean 时,才按照类型进行装配。但需要注意的是,name 属性一旦指定,就只会按照名称进行装配。具体代码如下:
           @Resource(name = “ayUserRepository”)
           private AyUserRepository ayUserRepository;
  • @Autowired:这个注解属于 Spring,默认按类型装配。默认情况下,要求依赖对象必须存在,如果要允许 null 值,那么可以设置它的 required 属性为 false,如 @Autowired(required=false);如果想使用名称装配,那么可以结合 @Qualifier 注解使用。具体代码如下:
           @Autowired
           @Qualifier(“ayUserRepository”)
           private AyUserRepository ayUserRepository;

3.2.4 增删改查分页简单实现

前面已经在服务层类 AyUserService 开发完增删改查方法,这一节将继续在类中添加分页接口,具体代码如下:

  • Pageable:这是一个分页接口,查询时只需要传入一个 Pageable 接口的实现类,指定 pageNumber 和 pageSize 即可。pageNumber 为第几页,而 pageSize 为每页的大小。
  • Page:分页查询结果会封装在该类中,Page 接口实现 Slice 接口,通过查看其源代码可知。我们通过调用 getTotalPages 和 getContent 等方法可以很方便地获得总页数和查询的记录。Page 接口和 Slice 接口源代码如下:

分页方法定义好之后,在类 AyUserServiceImpl 中实现该方法,具体代码如下:

     @Override
     public Page<AyUser> findAll(Pageable pageable) {
        return ayUserRepository.findAll(pageable);
     }

3.2.5 自定义查询方法

我们除了使用 JpaRepository 接口提供的增删改查分页等方法之外,还可以自定义查询方法。在 AyUserRepository 类中添加几个自定义查询方法,具体代码如下:

在 AyUserRepository 中自定义了 3 个查询的方法。从代码可以看出,Spring Data JPA 为我们约定了一系列规范,只要按照规范编写代码,Spring Data JPA 就会根据代码翻译成相关的 SQL 语句,进行数据库查询。比如可以使用 findBy、Like、In 等关键字,其中 findBy 可以用 read、readBy、query、queryBy、get、getBy 来代替。关于查询关键字的更多内容,大家可以到官方网站(https://docs.spring.io/spring-data/data-jpa/docs/ current/reference/html/)查看,里面有详细的内容介绍,这里就不一一列举了。

AyUserRepository 类中的自定义查询方法开发完成之后,分别在类 AyUserService 和类 AyUserServiceImpl 中调用它们。

     List<AyUser> findByName(String name);
     List<AyUser> findByNameLike(String name);
     List<AyUser> findByIdIn(Collection<String> ids);

AyUserService 继续添加这 3 个方法,具体代码如下:AyUserServiceImpl 类添加这 3 个方法,具体代码如下:

提示 @Override 注解不可以去掉,它可以帮助我们校验接口方法是否被误改。

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。