- 内容简介
- 前言
- 第 1 章 第一个 Spring Boot 项目
- 第 2 章 集成 MySQL 数据库
- 第 3 章 集成 Spring Data JPA
- 第 4 章 使用 Thymeleaf 模板引擎
- 第 5 章 Spring Boot 事务支持
- 第 6 章 使用过滤器和监听器
- 第 7 章 集成 Redis 缓存
- 第 8 章 集成 Log4j 日志
- 8.3 使用 Log4j 记录日志
- 第 9 章 Quartz 定时器和发送 Email
- 第 10 章 集成 MyBatis
- 第 11 章 异步消息与异步调用
- 第 12 章 全局异常处理与 Retry 重试
- 第 13 章 集成 MongoDB 数据库
- 第 14 章 集成 Spring Security
- 第 15 章 Spring Boot 应用监控
- 第 16 章 集成 Dubbo 和 Zookeeper
- 第 17 章 多环境配置与部署
- 第 18 章 Spring Boot 原理解析
- 参考文献
3.2 集成 Spring Data JPA

本节主要介绍如何在 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 注解不可以去掉,它可以帮助我们校验接口方法是否被误改。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论