0

0

SpringBoot怎么整合JPA框架

王林

王林

发布时间:2023-05-19 09:52:50

|

2160人浏览过

|

来源于亿速云

转载

    一. 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接口

    我们在使用Spring Data JPA自定义Repository接口时,必须继承XXRepository<t id></t>接口,其中的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接口。

    塔可商城
    塔可商城

    塔可商城, 一个基于springboot+uniapp+vue3技术栈开发的开源跨平台小程序、管理后台,后端服务的项目,它内置提供了会员分销, 区域代理, 商品零售等功能的新零售电商系统。强大弹性的架构设计,简洁的代码,最新的技术栈,全方面适合不同需求的前端,后端,架构的同学,同时更是企业开发需求的不二选择。 项目结构通过项目结构,你将清楚明白你即将入手的是一个怎么样的项目,你可能需要什么,如何

    下载
    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)</s>方法进行查询。

    三. 使用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测试类中单元测试方法进行效果的演示。

    热门AI工具

    更多
    DeepSeek
    DeepSeek

    幻方量化公司旗下的开源大模型平台

    豆包大模型
    豆包大模型

    字节跳动自主研发的一系列大型语言模型

    通义千问
    通义千问

    阿里巴巴推出的全能AI助手

    腾讯元宝
    腾讯元宝

    腾讯混元平台推出的AI助手

    文心一言
    文心一言

    文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

    讯飞写作
    讯飞写作

    基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

    即梦AI
    即梦AI

    一站式AI创作平台,免费AI图片和视频生成。

    ChatGPT
    ChatGPT

    最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

    相关专题

    更多
    数据分析工具有哪些
    数据分析工具有哪些

    数据分析工具有Excel、SQL、Python、R、Tableau、Power BI、SAS、SPSS和MATLAB等。详细介绍:1、Excel,具有强大的计算和数据处理功能;2、SQL,可以进行数据查询、过滤、排序、聚合等操作;3、Python,拥有丰富的数据分析库;4、R,拥有丰富的统计分析库和图形库;5、Tableau,提供了直观易用的用户界面等等。

    1133

    2023.10.12

    SQL中distinct的用法
    SQL中distinct的用法

    SQL中distinct的语法是“SELECT DISTINCT column1, column2,...,FROM table_name;”。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

    340

    2023.10.27

    SQL中months_between使用方法
    SQL中months_between使用方法

    在SQL中,MONTHS_BETWEEN 是一个常见的函数,用于计算两个日期之间的月份差。想了解更多SQL的相关内容,可以阅读本专题下面的文章。

    381

    2024.02.23

    SQL出现5120错误解决方法
    SQL出现5120错误解决方法

    SQL Server错误5120是由于没有足够的权限来访问或操作指定的数据库或文件引起的。想了解更多sql错误的相关内容,可以阅读本专题下面的文章。

    2152

    2024.03.06

    sql procedure语法错误解决方法
    sql procedure语法错误解决方法

    sql procedure语法错误解决办法:1、仔细检查错误消息;2、检查语法规则;3、检查括号和引号;4、检查变量和参数;5、检查关键字和函数;6、逐步调试;7、参考文档和示例。想了解更多语法错误的相关内容,可以阅读本专题下面的文章。

    380

    2024.03.06

    oracle数据库运行sql方法
    oracle数据库运行sql方法

    运行sql步骤包括:打开sql plus工具并连接到数据库。在提示符下输入sql语句。按enter键运行该语句。查看结果,错误消息或退出sql plus。想了解更多oracle数据库的相关内容,可以阅读本专题下面的文章。

    1683

    2024.04.07

    sql中where的含义
    sql中where的含义

    sql中where子句用于从表中过滤数据,它基于指定条件选择特定的行。想了解更多where的相关内容,可以阅读本专题下面的文章。

    585

    2024.04.29

    sql中删除表的语句是什么
    sql中删除表的语句是什么

    sql中用于删除表的语句是drop table。语法为drop table table_name;该语句将永久删除指定表的表和数据。想了解更多sql的相关内容,可以阅读本专题下面的文章。

    440

    2024.04.29

    C# ASP.NET Core微服务架构与API网关实践
    C# ASP.NET Core微服务架构与API网关实践

    本专题围绕 C# 在现代后端架构中的微服务实践展开,系统讲解基于 ASP.NET Core 构建可扩展服务体系的核心方法。内容涵盖服务拆分策略、RESTful API 设计、服务间通信、API 网关统一入口管理以及服务治理机制。通过真实项目案例,帮助开发者掌握构建高可用微服务系统的关键技术,提高系统的可扩展性与维护效率。

    3

    2026.03.11

    热门下载

    更多
    网站特效
    /
    网站源码
    /
    网站素材
    /
    前端模板

    相关下载

    更多

    精品课程

    更多
    相关推荐
    /
    热门推荐
    /
    最新课程
    Redis6入门到精通超详细教程
    Redis6入门到精通超详细教程

    共47课时 | 5.6万人学习

    关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
    php中文网:公益在线php培训,帮助PHP学习者快速成长!
    关注服务号 技术交流群
    PHP中文网订阅号
    每天精选资源文章推送

    Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号