IDEA SpringBoot整合SpringData JPA(保姆级教程,超详细!!!)

目录

1. 简介

2. 创建SpringBoot项目

3. Maven依赖引入

4. 修改application.properties配置文件

5. Entity实体类编写

6. Dao层接口开发

7. 测试接口开发

8. 程序测试


1. 简介

本博客将详细介绍在IDEA中,如何整合SpringBoot与SpringData JPA,以实现数据库的增删改查操作。我将逐步从环境搭建到实际代码实现的完整流程,帮助读者更好地理解并掌握这一技术栈。

JPA是Java Persistence API的缩写,它定义了Java对象如何映射到关系型数据库中的表,以及如何使用面向对象的方式来查询这些表。JPA是Java EE 5规范的一部分,并由EJB 3.0(Enterprise JavaBeans)实现。

2. 创建SpringBoot项目

首先,我们需要创建SpringBoot项目。在创建SpringBoot项目时,可以选择使用Spring Initializr来快速生成项目结构。

创建SpringBoot项目教程,本文就不过多讲解了,具体操作可参考往期博文:

IDEA创建SpringBoot项目教程,讲解超详细!!!

3. Maven依赖引入

首先,你需要在你的pom.xml文件中添加Spring Boot和SpringData JPA的依赖,对于Maven,添加以下依赖:

        <!-- jpa 依赖--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-jpa</artifactId></dependency><!-- lombok依赖 为了简化实体类的编写代码量 --><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency><!-- 数据库连接驱动,这里以MySQL为例 --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId></dependency>

4. 修改application.properties配置文件

在resources目录下新建application.properties文件,用于存放数据库连接需要的一些配置数据(一般在新建Springboot项目都会自动生成该文件),也可以新建application.yml文件,不过格式得转换,配置文件如下:

# 应用服务 WEB 访问端口
server.port=8080# MySQL
spring.datasource.url=jdbc:mysql://localhost:3306/tic?useSSL=false&serverTimezone=UTC&allowPublicKeyRetrieval=true
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver# JPA
spring.jpa.show-sql=true
spring.jpa.database-platform=org.hibernate.dialect.MySQL5InnoDBDialect
spring.jpa.hibernate.ddl-auto=create

此处作者以properties文件进行讲解:

  • spring.datasource.url:这是Spring Boot中配置数据源URL的属性。

jdbc:mysql: 表示使用的是MySQL数据库的JDBC连接。

localhost:数据库服务器的主机名,这里表示数据库服务器运行在本机上。

3306:MySQL数据库的默认端口号。

/tic:连接的数据库名,为了演示,我本地创建了个叫tic的数据库,可自行建库进行配置。

?useSSL=false&serverTimezone=UTC:这部分是连接参数的附加设置。

  • spring.datasource.username:这是Spring Boot中配置数据库连接的用户名的属性,根据个人创建的用户设置。
  • spring.datasource.password:这是Spring Boot中配置数据库连接密码的属性,根据个人创建的用户设置。
  • spring.datasource.driver-class-name:这是Spring Boot中配置数据库驱动类名的属性。

com.mysql.cj.jdbc.Driver:是MySQL Connector/J 8.0及以上版本的JDBC驱动类名。使用这个驱动类,可以确保你的Spring Boot应用程序能够连接到MySQL数据库。

如果你选择的是 MySQL Connector/J 8.0 以下版本中(如:MySQL Connector/J 5.7),JDBC 驱动类名通常是 com.mysql.jdbc.Driver

  • spring.jpa.show-sql:用于在控制台输出由 JPA(Java Persistence API)生成的 SQL 语句。这在你需要调试或查看实际执行的 SQL 语句时非常有用,默认false。 
  • spring.jpa.database-platform:用于配置数据库平台的具体名称,它告诉Spring Boot如何将JPA映射语言(如Hibernate)与特定的数据库系统相匹配。

本文使用MySQL,因此设置为org.hibernate.dialect.MySQL5InnoDBDialect,如你正在使用PostgreSQL数据库,则设置为org.hibernate.dialect.PostgreSQLDialect,或者使用Oracle,则设置为org.hibernate.dialect.Oracle10gDialect等。

  • spring.jpa.hibernate.ddl-auto:是 Spring Boot 中用于配置 Hibernate 自动处理数据库模式(DDL,即数据定义语言)的一个属性。这个属性决定了 Hibernate 是否以及如何自动更新数据库模式以匹配实体类。

具体来说,ddl-auto 属性可以有以下几个值:

none:Hibernate 不会做任何数据库模式的更新或验证。
validate:Hibernate 会在启动时验证数据库模式是否与实体类匹配,但不会进行任何更新。
update:Hibernate 会在启动时检查数据库模式是否与实体类匹配,如果不匹配,它会更新数据库模式。请注意,这通常只适用于开发环境,因为更新模式可能会导致数据丢失。
create:Hibernate 会在启动时创建数据库模式,如果模式已经存在,它会被删除并重新创建。这同样只适用于开发环境。
create-drop:Hibernate 会在启动时创建数据库模式,并在应用程序关闭时删除它。这通常用于集成测试。

注意:

  • update 模式不会自动创建数据库或模式(schema)。它只会更新现有的模式以匹配实体类。
  • 使用 update 或 create 模式在生产环境中是非常危险的,因为它可能会导致数据丢失或不一致。在生产环境中,你应该使用如 Liquibase 或 Flyway 这样的迁移工具来管理数据库模式的变更。
  • 在开发环境中,update 模式可以加快开发速度,因为它允许你在不手动修改数据库模式的情况下修改实体类。但是,你应该始终确保你的数据库备份是最新的,并准备在需要时恢复数据。

上述为本次集成JPA的配置参数,实际的配置还需结合自己的开发环境进行配置。

此处仅简单使用了JPA几个配置, 实际JPA还提供了很多的可配参数,可自行百度,当然关注作者后续也会持续更新相关的博文...

5. Entity实体类编写

在JPA中,有自己独立风格的实体,一般来讲就是有一些独特的注解来定义实体。 JPA是一个比较完全式的ORM框架,就是可以完全通过实体映射数据库,甚至我们可以根据实体去生成数据库。

我们先来看实体的案例,本次集成以User为例,具体实现如下:

package com.tic.jpa.entity;import lombok.Data;import javax.persistence.*;
import java.io.Serializable;
import java.util.Date;/*** @Author: Michael Lee* @CreateTime: 2024-06-28* @Description: 用户实体类*/
@Data
@Entity
@Table(name = "t_user") // 映射表名
public class User implements Serializable {/*** 主键生成策略: 自增*/@Id@GeneratedValue(strategy = GenerationType.IDENTITY)private Integer id;/*** 用户名称*/@Column(name = "username", nullable = false, length = 50)private String name;/*** 年龄*/@Column(name = "age")private Integer age;/*** 性别*/@Column(name = "gender")private String gender;/*** 创建时间*/@Column(name = "create_time")private Date createTime;/*** 更新时间*/@Column(name = "update_time")private Date updateTime;
}

此处讲解作者实体类使用的注解: 

  • @Data:是 Lombok 库提供的一个注解,它会自动为类生成常用的方法,如 getter、setter、equals(), hashCode(), toString() 等,而无需显式编写这些方法。使用 Lombok 可以大大减少样板代码的数量,使代码更加简洁和易读。
  • @Entity:是 JPA(Java Persistence API)中的一个核心注解,它用于将一个普通的 Java 类声明为一个实体类,从而可以映射到数据库中的表。当一个类被标记为 @Entity 时,JPA 提供商(如 Hibernate)将负责处理这个类与数据库表之间的映射和交互。
  • @Table:是 JPA (Java Persistence API) 中的一个注解,用于指定实体类与数据库表之间的映射关系。当你想要明确指定一个实体类应该映射到哪个数据库表,或者想要为表指定一个不同的名称(而不是默认的类名作为表名),或者想要为表指定一个特定的 schema 时,你可以使用 @Table 注解。
  • @Id:是 JPA (Java Persistence API) 中的一个注解,用于标识实体类中的一个字段作为主键。在 JPA 中,每个实体类都需要有一个主键字段,这个字段在数据库中通常是一个具有唯一性的列。使用 @Id 注解可以明确指定哪个字段是主键字段。
  • @GeneratedValue:是 JPA (Java Persistence API) 中的一个注解,用于指定主键的生成策略。当我们在一个实体类中使用 @Id 注解来标记一个字段作为主键时,通常需要指定主键的生成方式,因为数据库中的主键通常是唯一的,并且需要由某种机制来自动生成。本文使用GenerationType.IDENTITY(id自增策略)。
  • @Column:是 JPA (Java Persistence API) 中的一个注解,用于指定实体类中的一个字段与数据库表中的列之间的映射关系。当你想要明确指定一个字段应该映射到哪个数据库列,或者想要为列指定一个不同的名称(而不是默认的字段名作为列名),或者想要为列指定一些额外的属性(如长度、是否可为空等)时,你可以使用 @Column 注解。

上述为本次集成JPA的注解,实际的注解配置还需结合自己的需求进行配置。

6. Dao层接口开发

Dao层主要处理和数据库的交互,这里我们可以使用JPA为我们提供的基类:JpaRepository,里面包含了大部分常用操作,只需集成即可。

package com.tic.jpa.dao;import com.tic.jpa.entity.User;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;import java.io.Serializable;/*** @Author: Michael Lee* @CreateTime: 2024-06-28* @Description: 用户Dao层接口*/
@Repository
public interface UserRepository extends JpaRepository<User,Integer>, Serializable {}

7. 测试接口开发

完成上述步骤后,您的项目已经顺利集成了JPA,那么我们现在可以对集成的结果进行一个测试,看看还有没有问题,是不是可以投入使用。

我写了两个测试接口分别用来插入user数据和查询表中所有user数据,接口实现如下:

package com.tic.jpa.controller;import com.tic.jpa.dao.UserRepository;
import com.tic.jpa.entity.User;
import org.springframework.web.bind.annotation.*;import javax.annotation.Resource;
import java.util.Date;
import java.util.List;/*** @Author: Michael Lee* @CreateTime: 2024-06-28* @Description: 测试接口*/
@RestController
@RequestMapping("/test")
public class TestController {@Resourceprivate UserRepository userRepository;@PostMapping("/insert")public String insert(@RequestBody User user) {user.setCreateTime(new Date());userRepository.save(user);return "接口调用成功!";}@GetMapping("/select")public List<User> findAll() {return userRepository.findAll();}
}

8. 程序测试

上述所有步骤都完成后,启动一下工程,从启动日志可以看到Jpa直接通过User实体类创建了t_user表。

打开数据库管理工具可以看到t_user表已经创建在tic库下。

在此插个很好用的数据库管理工具的安装教程~

【JAVA开发笔记】DBeaver 数据库管理工具的安装与使用(超级详细)

程序启动成功并且表建好后,通过Postman调用新增用户的测试接口。

接口调用成功后,可以看到t_user表中成功插入了一条数据。

ps:可以多插入几条~

接着再通过Postman调用查询的测试接口,接口响应所有用户信息即为成功。

因为前面设置了JPA打印SQL相关配置,可以在控制台看到详细的SQL日志,此功能在研测阶段很有用,但是上线后为了日志的简洁可以关闭改功能~

至此,我们的SpringBoot集成JPA项目完美竣工!!!

ps:后续作者会持续更新Springboot集成各类技术框架,如感兴趣关注点一下!!!

在此作者还写了一篇SpringBoot集成Mybatis博文,这两个持久层框架各有优缺点,都是目前比较好用的,可以一块学习一波,下面是博文连接~

IDEA SpringBoot整合Mybatis(保姆级教程,超详细!!!)

有什么问题都可以评论区留言,看见都会回复的!!!

如果你觉得本篇文章对你有所帮助的,多多支持!!!

点赞收藏评论,抱拳了!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/37238.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

TIOBE 6月榜单出炉!编程语言地位大洗牌,谁才是王?

C历史上首次超越C&#xff01;&#xff01;&#xff01; TIOBE 公布了 2024 年 6 月编程语言的排行榜&#xff1a;https://www.tiobe.com/tiobe-index/ 排行榜 以下列出的语言代表了第51至第100名。由于它们之间的差异相对较小&#xff0c;编程语言仅以字母顺序列出。 ABC, A…

如何实现HPC数据传输的高效流转,降本增效?

高性能计算&#xff08;HPC&#xff09;在多个行业中都有应用&#xff0c;涉及到HPC数据传输的行业包括但不限于&#xff1a; 1.科学研究&#xff1a;在物理学、化学、生物学、地球科学等领域进行模拟和建模。 2.工程和产品设计&#xff1a;进行复杂系统的设计和分析&#xf…

江山欧派杯2024全国华佗五禽戏线上线下观摩交流比赛在亳州开幕

6月28日&#xff0c;2024全国华佗五禽戏线上线下观摩交流比赛在安徽省亳州市开幕。 此次比赛是由安徽省亳州市文化旅游体育局和安徽省非物质文化遗产保护中心主办、亳州市华佗五禽戏协会&#xff08;国家级非遗华佗五禽戏保护单位&#xff09;和亳州市传统华佗五禽戏俱乐部&…

【应用开发二】GPIO操控(输出、输入、中断)

1 操控GPIO方式 控制目录&#xff1a;/sys/class/gpio /sys/class/gpio目录下文件如下图所示&#xff1a; 1.1 gpiochipX目录 功能&#xff1a;当前SoC所包含的所有GPIO控制器 i.mx6ull一共包含5个GPIO控制器&#xff0c;分别为GPIO1~5分别对应gpiochip0、gpiochip32、gpi…

视频共享融合赋能平台LntonCVS安防监控平台现场方案实现和应用场景

LntonCVS国标视频融合云平台采用端-边-云一体化架构&#xff0c;部署简单灵活&#xff0c;功能多样化。支持多协议&#xff08;GB28181/RTSP/Onvif/海康SDK/Ehome/大华SDK/RTMP推流等&#xff09;和多类型设备接入&#xff08;IPC/NVR/监控平台&#xff09;。主要功能包括视频直…

【2024大语言模型必知】做RAG时为什么要使用滑动窗口?句子窗口检索(Sentence Window Retrieval)是什么?

目录 1. 传统的向量检索方法&#xff0c;使用整个文档检索&#xff0c;为什么不行&#xff1f; 2.句子滑动窗口检索&#xff08;Sentence Window Retrieval&#xff09;工作原理 3.句子滑动窗口检索&#xff08;Sentence Window Retrieval&#xff09;的优点 1. 传统的向量检…

001 SpringMVC介绍

文章目录 基础概念介绍BS和CS开发架构应用系统三层架构MVC设计模式 SpringMVC介绍SpringMVC是什么SpringMVC与Spring的联系为什么要学习SpringMVC 六大组件介绍六大组件(MVC组件其他三大组件)说明 基础概念介绍 BS和CS开发架构 一种是C/S架构&#xff0c;也就是客户端/服务器…

【IJCAI2024】LeMeViT: Efficient Vision Transformer with Learnable Meta Tokens

【IJCAI2024】LeMeViT: Efficient Vision Transformer with Learnable Meta Tokens for Remote Sensing Image Interpretation 论文&#xff1a;https://arxiv.org/abs/2405.09789 代码&#xff1a;https://github.com/ViTAE-Transformer/LeMeViT 由于相邻像素和图像块之间的高…

【2024年更新】ZF关注度指数大合集(包含8类数据)

数据简介&#xff1a;共包含8类数据 1. 地方ZF环境关注度指数&#xff1a;2007-2021 2. 地方ZF数字关注度指数&#xff1a;1999-2021 3. 省级ZF数字关注度指数&#xff1a;2001-2024 4. 农业新质生产力ZF关注度指数&#xff1a;2001-2024 5. 新质生产力ZF关注度指数&#…

c语言入门

c语言入门 C语言一经出现就以其功能丰富、表达能力强、灵活方便、应用面广等特点迅速在全世界普及和推广。C语言不但执行效率高而且可移植性好&#xff0c;可以用来开发应用软件、驱动、操作系统等。C语言也是其它众多高级语言的鼻祖语言&#xff0c;所以说学习C语言是进入编程…

关于怎么将wireshark抓包视频流转为视频播放出来

0.安装wireshark 安装PotPlayer 1.将以下两个插件放入 C:\Program Files\Wireshark\plugins 目录中 2.筛选视频流数据包&#xff0c;右键Decode As… 改为RTP 或者 右键->follow&#xff08;追踪流&#xff09;->UDP stream 然后叉掉弹窗 3.选择菜单Edit->Prefe…

shell编程实战

1.1 shell脚本编程的步骤 需求分析&#xff1a;确定功能 命令测试&#xff1a;确定脚本需要的关键命令 编辑脚本 测试脚本 1.2 操作 1.2.1 实验一 1.需求描述 (1)统计网络中的服务器的mac 注&#xff1a;ARP&#xff0c;地址解析协议 注&#xff1a; (2)检查哪些主机开…

《玫瑰的故事》为何能触动亿万观众的心?

大家最近有看神仙姐姐的新剧嘛? 《玫瑰的故事》作为一部备受瞩目的作品&#xff0c;其影响力不仅在于精彩的剧情和演员们精湛的演技&#xff0c;更在于它所传达的深刻情感和人生哲理。而这部作品之所以能够大爆并引起大批观众的共鸣&#xff0c;背后也有着更多重的原因。 一…

ingress相关yaml文件报错且相关资源一切正常解决方法

今天在执行ingress相关文件的时候莫名其妙报错了&#xff0c;问了别人得知了这个方法 执行ingress相关文件报错 01.yaml是我自己创建关于ingress的yaml文件 报错信息 且相关资源一切正常 解决方法 kubectl get validatingwebhookconfigurations删除ingress-nginx-admissio…

深入探索大模型的魅力:前沿技术、挑战与未来展望

目录 一、大模型的前沿技术 二、大模型面临的挑战 三、大模型的未来展望 四、总结 在当今人工智能领域&#xff0c;大模型不仅是一个热门话题&#xff0c;更是推动技术进步的重要引擎。从深度学习的浪潮中崛起&#xff0c;大模型以其卓越的性能和广泛的应用前景&#xff0c…

快速降低地平线4延迟 极限竞速地平线4延迟严重这样做

极限竞速地平线4全新的开放式剧情设计&#xff0c;让玩家的每一次驾驶都充满了未知与挑战。与此同时&#xff0c;现实世界的玩家也将与玩家一同在这片土地上驰骋。在这里&#xff0c;时间、天气和四季的变化都仿佛触手可及&#xff0c;玩家将亲身体验到真实而震撼的赛车世界。在…

20240624(周一)AH股行情总结:A股低开低走, 恒生科技指数跌2%,贵州茅台转跌为涨

内容提要 A股三大指数收盘均跌超1%&#xff0c;半导体、智慧医疗、商业航天概念领跌&#xff0c;中芯国际跌超3%&#xff0c;盘中一度涨2%。水电股逆势走强&#xff1b;白酒股低开高走&#xff0c;贵州茅台翻红&#xff0c;盘初曾跌3%。微盘股指数大跌4%。 正文 周一&#x…

数据恢复篇:如何在Android上恢复删除的短信

如果您不小心删除了Android设备上的短信并想要检索它们&#xff0c;则可以尝试以下方法&#xff1a; 如何在Android上恢复删除的短信 检查您的备份&#xff1a; 如果您之前备份了Android设备&#xff0c;则可以从备份中恢复已删除的短信。检查您设备的内部存储空间或 Google 云…

Halcon 重叠区域 显示汉字 图像分割

一 如何填充区域之间的GAP或分割重叠区域 read_image(Image,fabrik)*区域生长法将图像分割成相同强度的区域&#xff0c;并将其划分成大小为行*列的矩形。 为了确定两个相邻的矩形是否属于相同的区域&#xff0c; *仅使用其中心点的灰度值。 如果灰度值差小于等于公差&#xff…

php反序列化漏洞简介

目录 php序列化和反序列化简介 序列化 反序列化 类中定义的属性 序列化实例 反序列化实例 反序列化漏洞 序列化返回的字符串格式 魔术方法和反序列化利用 绕过wakeup 靶场实战 修复方法 php序列化和反序列化简介 序列化 将对象状态转换为可保持或可传输的格式的…