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 {
    @Resource
    private 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.mfbz.cn/a/754560.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

EtherCAT笔记(四)——EtherCAT数据帧结构

EtherCAT数据包含2B的数据头和44~1948B的数据区。数据区由多个子报文组成。由于EtherCAT本身是通过以太网数据帧的形式传输&#xff0c;因此其协议帧中会携带以太网的帧头。 其中&#xff0c;解释如下&#xff1a; &#xff08;1&#xff09;以太网数据帧头&#xff1a;EtherC…

AUTOSAR NvM模块(一)

NvMBlockDescriptor [ECUC_NVM_00061] 用于存储所有特定于块的配置参数的容器。对于每个非易失性随机存取存储器&#xff08;NVRAM&#xff09;块&#xff0c;应该指定这个容器的一个实例。 NvMBlockCrcType 定义了NVRAM块的CRC数据宽度。根据Autosar标准&#xff0c;此参数…

KVB外汇:澳元/美元、澳元/纽元、英镑/澳元的走势如何?

摘要 本文对近期澳元/美元、澳元/纽元、英镑/澳元的技术走势进行了详细分析。通过对关键支撑位和阻力位的分析&#xff0c;我们可以更好地理解澳元在不同货币对中的表现。随着全球经济形势的变化&#xff0c;各国央行的货币政策对外汇市场的影响也愈发明显。本文旨在帮助投资者…

观成科技:证券行业加密业务安全风险监测与防御技术研究

摘要&#xff1a;解决证券⾏业加密流量威胁问题、加密流量中的应⽤⻛险问题&#xff0c;对若⼲证券⾏业的实际流量内容进⾏调研分析&#xff0c; 分析了证券⾏业加密流量⾯临的合规性⻛险和加密协议及证书本⾝存在的⻛险、以及可能存在的外部加密流量威 胁&#xff0c;并提出防…

用GAN生成奖杯

数据集链接&#xff1a;https://pan.baidu.com/s/19Uxc2ELiMG3acUtLeSTDTA?pwdwsyw 提取码&#xff1a;wsyw 我设置的图片大小为128*128&#xff0c;如果内存爆炸可以将batch_size调小&#xff0c;epoch我设置的2000&#xff0c;我感觉其实1000也够了。代码如下&#xff1a; …

信创认证 | Smartbi Insight V11成功适配申威3231处理器

在信息技术飞速发展的浪潮中&#xff0c;软硬件的深度融合与协同发展已成为推动行业创新的关键因素。 近日&#xff0c;思迈特商业智能与数据分析软件[简称&#xff1a;Smartbi Insight]V11在统信服务器操作系统V20和中电科申泰信息科技有限公司产品申威3231处理器环境下完成适…

CAN和CANFD数据写入.asc文件的dll

因为工作需要&#xff0c;需要做一些硬件不是CANoe的上位机&#xff08;比如说周立功CAN,NI-CAN&#xff09;&#xff0c;上位机需要有记录数据的功能&#xff0c;所以用Qt制作了一个记录数据的dll&#xff0c;方便重复使用&#xff08;因为有的客户指定了编程软件&#xff0c;…

51循迹小车(蓝牙+循迹+超声波+舵机+避障L298N)

基本驱动 L298N电机驱动模块负责供电和控制电机驱动 将电池12V供电接到12V供电上&#xff0c;作为输入。单片机及其他器件供电可以使用5V供电&#xff0c;这里的GND都接到一起。 输出A和输出B接到电机上&#xff0c;负责给电机供电和控制电机。 通道A使能和通道B使能以及逻…

【Windows下使用vckpg下载protoc之后环境变量问题】

使用vcpkg进行下载的protoc&#xff1a; vcpkg install protobuf protobuf:x64-windows 检查protoc版本时出现问题&#xff1a; “protoc”不是内部或外部命令&#xff0c;也不是可运行程序或批处理文件 尝试添加系统环境变量后没有反应。 这个时候找到vckpg下的packages目录…

如何利用ChatGPT寻找科研创新点?分享5个有效实践技巧

欢迎关注&#xff1a;智写AI&#xff0c;为大家带来最酷最有效的智能AI学术科研写作攻略。关于使用ChatGPT等AI学术科研的相关问题可以和作者七哥交流&#xff1a;yida985 地表功能最强大的高级学术专业版已经开放&#xff0c;拥有全球领先的GPT学术科研应用&#xff0c;有兴趣…

鸿蒙开发设备管理:【@ohos.brightness (屏幕亮度)】

屏幕亮度 该模块提供屏幕亮度的设置接口。 说明&#xff1a; 本模块首批接口从API version 7开始支持。后续版本的新增接口&#xff0c;采用上角标单独标记接口的起始版本。 导入模块 import brightness from ohos.brightness;brightness.setValue setValue(value: number):…

【Linux】网络编程套接字

一、预备知识 1.1 理解源IP地址和目的IP地址 在IP数据报的头部中&#xff0c;有两个IP地址&#xff0c;分别叫做源IP地址和目的IP地址。 源IP地址和目的IP地址是网络通信中常用的两个概念&#xff0c;他们代表了通信中的两个节点。 源IP地址是指发起通信的节点的IP地址&#…

在WSL Ubuntu中启用root用户的SSH服务

在 Ubuntu 中&#xff0c;默认情况下 root 用户是禁用 SSH 登录的&#xff0c;这是为了增加系统安全性。 一、修改配置 找到 PermitRootLogin 行&#xff1a;在文件中找到 PermitRootLogin 配置项。默认情况下&#xff0c;它通常被设置为 PermitRootLogin prohibit-password 或…

老生常谈问题之什么是缓存穿透、缓存击穿、缓存雪崩?举个例子你就彻底懂了!!

老生常谈问题之什么是缓存穿透、缓存击穿、缓存雪崩&#xff1f;举个例子你就彻底懂了&#xff01;&#xff01; 缓存穿透发生场景解决方案 缓存击穿解决方案 缓存雪崩发生场景解决方案 总结三者区分三者原因三者解决方案 想象一下&#xff0c;你开了一家便利店&#xff0c;店里…

FastAPI教程I

本文参考FastAPI教程https://fastapi.tiangolo.com/zh/tutorial 第一步 import uvicorn from fastapi import FastAPIapp FastAPI()app.get("/") async def root():return {"message": "Hello World"}if __name__ __main__:uvicorn.run(&quo…

从我邮毕业啦!!!

引言 时间过的好快&#xff0c;转眼间就要从北邮毕业了&#xff0c;距离上一次月度总结又过去了两个月&#xff0c;故作本次总结。 PS: https://github.com/WeiXiao-Hyy/blog整理了后端开发的知识网络&#xff0c;欢迎Star&#xff01; 毕业&#x1f393; 6月1号完成了自己的…

Windows server 2016.2019 .NET Framework 3.5安装包、安装步骤

windows server2019 操作系统 安装 sqlserver2008时提示缺少 .NET Frameword 3.5&#xff0c; 在功能里选择 .NET Frameword 3.5安装报错&#xff0c; 下载安装包&#xff0c;下载地址 https://download.csdn.net/download/qq445829096/89450429这里指定备份源路径 安装包解…

多供应商食品零售商城系统的会员营销设计和实现

在多供应商食品零售商城系统中&#xff0c;会员营销是提升用户粘性和增加销售的重要手段。一个有效的会员营销系统能够帮助平台更好地了解用户需求&#xff0c;提供个性化服务&#xff0c;进而提高用户满意度和忠诚度。本文将详细探讨多供应商食品零售商城系统的会员营销设计与…

2毛钱不到的2A同步降压DCDC电压6V频率1.5MHz电感2.2uH封装SOT23-5芯片MT3520B

前言 2A&#xff0c;2.3V-6V输入&#xff0c;1.5MHz 同步降压转换器&#xff0c;批量价格约0.18元 MT3520B 封装SOT23-5 丝印AS20B5 特征 高效率&#xff1a;高达 96% 1.5MHz恒定频率操作 2A 输出电流 无需肖特基二极管 2.3V至6V输入电压范围 输出电压低至 0.6V PFM 模式可在…

MySQL进阶-索引-使用规则-索引失效情况一(索引列运算,字符串不加引号,头部模糊匹配)

文章目录 1、索引列运算1.1、查询表tb_user1.2、查看tb_user的索引1.3、查询 phone177999900151.4、执行计划 phone177999900151.5、查询 substring(phone,10,2) 151.6、执行计划 substring(phone,10,2) 15 2、字符串不加引号2.1、查询 phone177999900152.2、执行计划 phone177…