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,一经查实,立即删除!

相关文章

用于程序搜索的智能融合算法的设计与实现(C++,已用于程序中)

该程序搜索算法是我最近写的软件中使用到的算法&#xff0c;软件的项目地址如下&#xff1a;https://github.com/ghost-him/QuickLaunch/。建议打开源码&#xff0c;找到对应的代码后再阅读本文章。 该算法已经应用在软件中&#xff0c;并且取得了令我自己很满意的效果。 前言…

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…

CesiumJS【Basic】- #023 加载webm文件(Entity方式)

文章目录 加载webm文件(Entity方式)1 目标2 代码2.1 main.ts3 资源文件加载webm文件(Entity方式) 1 目标 使用Entity方式加载webm文件 2 代码 2.1 main.ts /** @Author: alan.lau* @Date: 2024-06-16 11:15:48* @LastEditTime: 2024-06-16 11:43:02* @LastEditors: al…

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

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

linux 设置程序自启动

程序随系统开机自启动的方法有很多种&#xff0c; 这里介绍一种简单且常用的&#xff0c; 通过系统的systemd服务进行自启动。 第一步&#xff1a; 新建一个.service文件 sudo vim /etc/systemd/system/myservice.service[Unit] DescriptionMy Service #Afternetwork.target[…

【鸿蒙】稍微理解一下Stage模型

鸿蒙的Stage模型是HarmonyOS多端统一的应用开发框架中的一个核心概念&#xff0c;用于描述应用的界面层次结构和组件之间的关系。下面将详细解析Stage模型的主要组成部分和特点&#xff1a; 模型组成&#xff1a; UIAbility组件&#xff1a;这是应用中负责绘制用户界面的组件&a…

LeetCode:经典题之206、92 题解及延伸

系列目录 88.合并两个有序数组 52.螺旋数组 567.字符串的排列 643.子数组最大平均数 150.逆波兰表达式 61.旋转链表 160.相交链表 83.删除排序链表中的重复元素 389.找不同 1491.去掉最低工资和最高工资后的工资平均值 896.单调序列 206.反转链表 92.反转链表II 141.环形链表 …

【应用开发二】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. 传统的向量检…

区块链的技术架构:节点、网络和数据结构

区块链技术听起来很高大上&#xff0c;但其实它的核心架构并不难理解。今天我们就用一些简单的例子和有趣的比喻&#xff0c;来聊聊区块链的技术架构&#xff1a;节点、网络和数据结构。 节点&#xff1a;区块链的“细胞” 想象一下&#xff0c;区块链就像是一个大型的组织&a…

001 SpringMVC介绍

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

启动Redis服务器

名人说&#xff1a;一点浩然气&#xff0c;千里快哉风。 ——苏轼 创作者&#xff1a;Code_流苏(CSDN)&#xff08;一个喜欢古诗词和编程的Coder&#x1f60a;&#xff09; 目录 一、在 Linux 或 macOS 上启动 Redis二、在 Windows 上启动 Redis三、配置 Redis 为服务启动&…

ExVideo: 提升5倍性能-用于视频合成模型的新型后调谐方法

标题&#xff1a;ExVideo: Extending Video Diffusion Models via Parameter-Efficient Post-Tuning作者: Zhongjie Duan; Wenmeng Zhou; Cen Chen; Yaliang Li; Weining QianDOI: 10.48550/arXiv.2406.14130摘要: Recently, advancements in video synthesis have attracted s…

【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…

js取数组最大值之Math.max、Math.max.apply

js取数组最大值之Math.max、Math.max.apply Math.maxMath.max.applyapply()第一个参数为什么可以是null 最小值同理 Math.max Math.max(n1,n2,n3,…,nX) 支持传递多个参数&#xff0c;带有较大的值的那个数 Math.max(2,5,3,6,2,4,2,15,9,6,0,1)Math.max.apply apply() 语法&a…