SpringBoot整合JPA框架实现过程讲解

目录
  • 一. Spring Boot数据访问概述
  • 二. Spring Data JPA简介
    • 2.1 编写ORM实体类
    • 2.2 编写Repository接口
      • 2.2.1 继承XXRepository<T, ID>接口
      • 2.2.2 操作数据的多种方式
      • 2.2.3 @Transactional事务管理
      • 2.2.4 @Moditying注解
      • 2.3.5 复杂条件查询
  • 三. 使用Spring Boot整合JPA
    • 3.1 添加Spring Data JPA依赖启动器
    • 3.2 编写ORM实体类
    • 3.3 编写Repository接口
    • 3.4 编写单元测试进行接口方法测试
    • 3.5 整合测试

一. Spring Boot数据访问概述

Spring Data是Spring提供的一个用于简化数据库访问、支持云服务的开源框架。它是一个伞形项目,包含了大量关系型数据库及非关系型数据库的数据访问解决方案,其设计目的是使我们可以快速且简单地使用各种数据访问技术。Spring Boot默认采用整合Spring Data的方式统一处理数据访问层,通过添加大量自动配置,引入各种数据访问模板xxxTemplate以及统一的Repository接口,从而达到简化数据访问层的操作。

Spring Data提供了多种类型数据库支持,Spring Boot对Spring Data支持的数据库进行了整合管理,提供了各种依赖启动器。通过一张表罗列Spring Boot提供的常见数据库依赖启动器。

名称 描述
mybatis-spring-boot-starter MyBatis启动器
mybatis-plus-boot-starter MyBatis-Plus启动器
spring-boot-starter-data-jpa Spring Data JPA与Hibernate的启动器
spring- boot starter-data-redis Redis键值数据存储与Spring Data Redis和Jedis客户端的启动器
spring-boot-starter-data-neo4j Neo4j图数据库和Spring Data Neo4j的启动器
spring-boot-starter-data-mongodb MongoDB和Spring Data MongoDB的启动器

二. Spring Data JPA简介

JPA(Java Persistence API,Java持久化API )是Sun公司官方提出的Java持久化规范,它为Java开发人员提供了一种对象/关系映射的工具管理Java中的关系型数据,其主要目的是简化现有的持久化开发工作和整合ORM(Object Relational Mapping,对象/关系映射)技术。Spring Data在JPA规范的基础上,充分利用其优点,提出了Spring Data JPA模块对具有ORM关系数据进行持久化操作。

Spring Data JPA是Spring在ORM框架、JPA规范的基础上封装的一套JPA应用框架,提供了增删改查等常用功能,使开发者可以用较少的代码实现数据操作,同时还易于扩展。在介绍Spring Boot整合JPA之前,先针对Spring Data JPA的基本使用进行简单介绍。

2.1 编写ORM实体类

Spring Data JPA框架是针对具有ORM关系的数据进行操作,所以在使用Spring Data JPA时,首先需要编写一个实体类与数据表进行映射,并且配置好映射关系。

@Entity(name = "t_comment")  // 设置ORM实体类,并指定映射的表名
public class Discuss {
    @Id   // 表明映射对应的主键id
    @GeneratedValue(strategy = GenerationType.IDENTITY) // 设置主键自增策略
    @Column(name = "article_id")  // 指定映射的表字段名
    private Integer articleId;
    // Generate: Getter and Setter、toString()
}

针对上述代码,壹哥把用到的注解给大家进行简要说明。

@Entity:标注要与数据库做映射的实体类,默认情况下,数据表的名称就是首字母小写的类名。当然,还可以使用name属性指定映射的表名。

@ld:标注在类属性或者getter方法上,表示某一个属性对应表中的主键。

@GeneratedValue:与@ld注解标注在同一位置,用于表示属性对应主键的生成策略,可省略。Spring Data JPA支持的主键生成策略包括有TABLE(使用一个特定的数据库表格来保存主键)、SEQUENCE(不支持主键自增长的数据库主键生成策略)、IDENTITY(主键自增)和AUTO(JPA自主选择前面3种合适的策略,是默认选项)。

@Column:标注在属性上,当类属性与表字段名不同时,能够配合name属性表示类属性对应的表字段名。

2.2 编写Repository接口

针对不同的表数据操作编写各自对应的Repository接口,并根据需要编写对应的数据操作方法。

public interface DiscussRepository extends JpaRepository<Discuss, Integer> {
    // 1.查询author非空的Discuss评论集合(JPA支持的方法名关键字查询方式)
    List<Discuss> findByAuthorNotNull();
    // 2.根据文章id分页查询Discuss评论集合
    @Query("SELECT c FROM t_comment c WHERE c.articleId = ?1")
    List<Discuss> getDiscussPaged(Integer articleid, Pageable pageable);
    // 3.使用元素SQL语句,根据文章id分页查询Discuss评论集合,nativeQuery为true表示用来编写原生SQL语句
    @Query(value = "SELECT * FROM t_comment WHERE article_Id = ?1", nativeQuery = true)
    List<Discuss> getDiscussPaged2(Integer articleid, Pageable pageable);
    //4.根据评论id修改评论作者author
    @Transactional // 表示支持事务管理
    @Modifying // 表示支持数据变更
    @Query("UPDATE t_comment c SET c.author = ?1 WHERE c.id = ?2")
    Integer updateDiscuss(String author, Integer id);
    // 5.根据评论id删除评论
    @Transactional
    @Modifying
    @Query("DELETE t_comment c WHERE c.id = ?1")
    Integer deleteDiscuss(Integer id);
}

针对Repository接口编写时的特殊要求,壹哥给大家解释一下。

2.2.1 继承XXRepository<T, ID>接口

我们在使用Spring Data JPA自定义Repository接口时,必须继承XXRepository<T, ID>接口,其中的T代表要操作的实体类,ID代表实体类主键数据类型。在上述示例中,选择继承了JpaRepository接口,JpaRepository的继承结构如下图所示。

下面对JpaRepository接口继承结构中涉及的接口进行说明,具体如下。

(1) Repository是Spring Data JPA提供的用于自定义Repository接口的顶级父接口,该接口中没有声明任何方法。

(2) CrudRepository接口是Repository的继承接口之一,包含了一些基本的CRUD方法。

(3) PagingAndSortingRepository接口继承CrudRepository接口的同时,提供了分页和排序两个方法。

(4) QueryByExampleExecutor接口是进行条件封装查询的顶级父接口,允许通过Example实例执行复杂条件查询。

JpaRepository接口同时继承了PagingAndSortingRepository接口和QueryByExampleExecutor接口,并额外提供了一些数据操作方法。自定义Repository接口文件时,通常会直接选择继承JpaRepository接口。

2.2.2 操作数据的多种方式

在使用Spring Data JPA进行数据操作时,可以有多种实现方式,主要方式如下。

(1).如果自定义接口继承了JpaRepository接口,则默认包含了一些常用的CRUD方法。

(2).自定义Repository接口中,可以使用@Query注解配合SQL语句进行数据的查、改、删操作。

(3).自定义Repository接口中,可以直接使用方法名关键字进行查询操作。

其中,Spring Data JPA中支持的方法名关键字及对应的SQL片段说明,如下表所示。

2.2.3 @Transactional事务管理

在自定义的Repository接口中,针对数据的变更操作(修改、删除),无论是否使用了@Query注解,都必须在方法上方添加@Transactional注解进行事务管理,否则程序执行就会出现InvalidDataAccessApiUsageException异常。如果在调用Repository接口方法的业务层Service类上已经添加了@Transactional注解进行事务管理,那么Repository接口文件中就可以省略@Transactional注解。

2.2.4 @Moditying注解

在自定义的Repository接口中,使用@Query注解方式执行数据变更操作(修改、删除),除了要使用@Query注解,还必须添加@Moditying注解表示数据变更。

2.3.5 复杂条件查询

JPA还支持使用Example实例进行复杂条件查询。例如,针对JpaRepository接口中已存在的findAll(Example<S> var1)方法进行查询。

三. 使用Spring Boot整合JPA

使用Spring Boot整合JPA,具体步骤如下。

3.1 添加Spring Data JPA依赖启动器

在项目的pom.xml文件中添加Spring Data JPA依赖启动器。

注意:

我们并没有编写Spring Data JPA对应的版本号,这是因为Spring Boot对Spring Data JPA的版本号进行了统一管理。

3.2 编写ORM实体类

为了方便操作,以之前创建的数据库表t_comment为例编写对应的实体类,将之前创建的Comment类复制一份并重命名为Discuss,同时添加JPA对应的注解进行映射配置。

3.3 编写Repository接口

在com.cy.repository包下创建一个用于对数据库表t_comment进行操作的Repository接口DiscussRepository。

3.4 编写单元测试进行接口方法测试

将Chapter03ApplcationTests测试类在当前位置复制一份并重命名为JpaTests,用来编写JPA相关的单元测试,并对内容稍微修改后编写DiscussRepository接口对应的测试方法。

测试方法中分别使用了JpaRepository默认方法、方法名关键字、@Query注解和Example封装参数的形式进行了数据操作。

3.5 整合测试

选择JpaTests测试类中单元测试方法进行效果的演示。

以上就是SpringBoot中整合JPA框架的过程,你学会了吗?如果还有其他疑问,可以在评论区留言哦。

到此这篇关于SpringBoot整合JPA框架实现过程讲解的文章就介绍到这了,更多相关SpringBoot整合JPA内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • SpringBoot如何整合SpringDataJPA

    这篇文章主要介绍了SpringBoot整合SpringDataJPA代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 一.pom.xml添加依赖 <dependencies> <!--web--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-we

  • SpringBoot整合SpringDataJPA

    目录 SpringBoot整合JPA JPA & Spring Data JPA Hibernate & JPA 1.JPA 2.JPA & Hibernate 关系 Hibernate VS Mybatis 一.导入依赖 二.简单的CRUD 1.配置文件 2.实体类 3.Dao层 4.service层 5.controller 三.自定义SQL 四.分页查询 五.连表查询 六.分组查询 七.与mybatis对比 总结 SpringBoot整合JPA 使用数据库是开发基本应用的基础

  • SpringBoot整合JPA数据源方法及配置解析

    一.创建项目并导入依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>dr

  • SpringBoot整合JPA的实例代码

    JPA全称Java Persistence API.JPA通过JDK 5.0注解或XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中. JPA 的目标之一是制定一个可以由很多供应商实现的API,并且开发人员可以编码来实现该API,而不是使用私有供应商特有的API. JPA是需要Provider来实现其功能的,hibernate就是JPA Provider中很强的一个,应该说无人能出其右.从功能上来说,JPA就是Hibernate功能的一个子集. 添加相关依赖 添加spring

  • 详解SpringBoot是如何整合JPA的

    目录 SpringBoot整合JPA JPA & Spring Data JPA Hibernate & JPA Hibernate VS Mybatis 一.导入依赖 二.简单的CRUD 2.1 配置文件 2.2 实体类 2.3 Dao层 2.4 service层 2.5 controller 三.自定义SQL 四.分页查询 五.连表查询 六.分组查询 七.与mybatis对比 SpringBoot整合JPA JPA & Spring Data JPA JPA是Java Pers

  • SpringBoot整合Spring Data JPA的详细方法

    目录 前言 核心概念 新建SpringBoot项目 创建MySQL数据库 创建实体类 创建Repository 创建处理器 准备SQL文件 编写配置文件 最终效果 启动SpringBoot项目 查看数据库 自动更新数据表结构 测试JPA的增删改查 测试查询所有 测试保存数据 测试更新数据 测试删除数据 前言 Spring Data JPA 是更大的 Spring Data 家族的一部分,可以轻松实现基于 JPA 的存储库.该模块处理对基于 JPA 的数据访问层的增强支持.它使构建使用数据访问技术

  • springboot整合JPA过程解析

    这篇文章主要介绍了springboot整合JPA过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 接下来具体看看是怎么弄的. 1.新建一个springboot项目,选择web.data jdbc.data jpa.mysql driver. 2.建立以下目录及结构: pom.xml <?xml version="1.0" encoding="UTF-8"?> <project xmlns=&

  • Springboot整合JPA配置多数据源流程详解

    目录 1. Maven 2. 基本配置 DataSource 3. 多数据源配置 3.1 JpaConfigOracle 3.2 JpaConfigMysql 4. Dao层接口 1. Maven <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency>

  • SpringBoot+Spring Data JPA整合H2数据库的示例代码

    目录 前言 Maven依赖 Conroller 实体类 Repository 数据库脚本文件 配置文件 启动项目 访问H2数据库 查看全部数据 H2数据库文件 运行方式 前言 H2数据库是一个开源的关系型数据库.H2采用java语言编写,不受平台的限制,同时支持网络版和嵌入式版本,有比较好的兼容性,支持相当标准的sql标准 提供JDBC.ODBC访问接口,提供了非常友好的基于web的数据库管理界面 官网:http://www.h2database.com/ Maven依赖 <!--jpa-->

  • SpringBoot整合JPA框架实现过程讲解

    目录 一. Spring Boot数据访问概述 二. Spring Data JPA简介 2.1 编写ORM实体类 2.2 编写Repository接口 2.2.1 继承XXRepository<T, ID>接口 2.2.2 操作数据的多种方式 2.2.3 @Transactional事务管理 2.2.4 @Moditying注解 2.3.5 复杂条件查询 三. 使用Spring Boot整合JPA 3.1 添加Spring Data JPA依赖启动器 3.2 编写ORM实体类 3.3 编写R

  • SpringBoot整合mybatis简单案例过程解析

    这篇文章主要介绍了SpringBoot整合mybatis简单案例过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 1.在springboot项目中的pom.xml中添加mybatis的依赖 <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifac

  • SpringBoot整合JWT框架,解决Token跨域验证问题

    一.传统Session认证 1.认证过程 1.用户向服务器发送用户名和密码. 2.服务器验证后在当前对话(session)保存相关数据. 3.服务器向返回sessionId,写入客户端 Cookie. 4.客户端每次请求,需要通过 Cookie,将 sessionId 回传服务器. 5.服务器收到 sessionId,验证客户端. 2.存在问题 1.session保存在服务端,客户端访问高并发时,服务端压力大. 2.扩展性差,服务器集群,就需要 session 数据共享. 二.JWT简介 JWT

  • Springboot整合MybatisPlus的实现过程解析

    这篇文章主要介绍了Springboot整合MybatisPlus的实现过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 1.pom文件 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3

  • Springboot整合thymleaf模板引擎过程解析

    这篇文章主要介绍了Springboot整合thymleaf模板引擎过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 thymeleaf作为springboot官方推荐使用的模板引擎,简单易上手,功能强大,thymeleaf的功能和jsp有许多相似之处,两者都属于服务器端渲染技术,但thymeleaf比jsp的功能更强大. 1. thymeleaf入门 1.1 引入坐标 <!--springBoot整合thymeleaf--> <d

  • SpringBoot整合Dubbo框架,实现RPC服务远程调用

    一.Dubbo框架简介 1.框架依赖 图例说明: 1)图中小方块 Protocol, Cluster, Proxy, Service, Container, Registry, Monitor 代表层或模块,蓝色的表示与业务有交互,绿色的表示只对 Dubbo 内部交互. 2)图中背景方块 Consumer, Provider, Registry, Monitor 代表部署逻辑拓扑节点. 3)图中蓝色虚线为初始化时调用,红色虚线为运行时异步调用,红色实线为运行时同步调用. 4)图中只包含 RPC

  • SpringBoot整合Shiro框架,实现用户权限管理

    一.Shiro简介 核心角色 1)Subject:认证主体 代表当前系统的使用者,就是用户,在Shiro的认证中,认证主体通常就是userName和passWord,或者其他用户相关的唯一标识. 2)SecurityManager:安全管理器 Shiro架构中最核心的组件,通过它可以协调其他组件完成用户认证和授权.实际上,SecurityManager就是Shiro框架的控制器. 3)Realm:域对象 定义了访问数据的方式,用来连接不同的数据源,如:关系数据库,配置文件等等. 核心理念 Shi

  • springboot 整合fluent mybatis的过程,看这篇够了

    1.导入pom依赖 <!-- mybatis--> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>1.3.1</version> </dependency> <!--mysql依赖--> <de

  • springboot整合JPA访问Mysql的实现方法

    1.代码实现: 添加依赖  <dependency>             <groupId>org.springframework.boot</groupId>             <artifactId>spring-boot-starter</artifactId>         </dependency>         <dependency>             <groupId>org

随机推荐