SpringBoot整合Jpa实现增删改查功能(提供Gitee源码)
前言:在日常开发中,总是撰写一些简单的SQL会非常耗时间,Jpa可以完美的帮我们提高开发的效率,对于常规的SQL不需要我们自己撰写,相对于MyBatis有着更简单易用的功能,但是MyBatis自由度相对于Jpa会更高一些,所以Jpa比较适用于一些中小型的项目开发,提高开发人员的开发效率,下面我就完整的介绍一下SpringBoot是如何整合Jpa来实现完整的增删改查功能的。
目录
一、导入pom依赖
二、yml配置文件
三、表结构SQL
四、User实体类
五、Dao持久层
六、使用示例
6.1、查询名为张三的用户
6.2、分页查询数据
6.3、自定义SQL查询
6.4、新增一条用户数据
6.5、修改一条用户数据
6.6、删除一条用户数据
七、Gitee源码
八、总结
一、导入pom依赖
完整代码:
<dependencies><!-- JPA --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-jpa</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!-- MySQL驱动依赖 --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.29</version></dependency><!-- lombok依赖包 --><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.16.10</version><scope>provided</scope></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies>
二、yml配置文件
完整代码:
spring:datasource:driver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://localhost:3306/数据库名?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=UTF-8&useSSL=falseusername: 用户名password: 密码# JPA配置jpa:# 在建表的时候,将默认的存储引擎切换为InnoDBdatabase-platform: org.hibernate.dialect.MySQLDialect# 数据源database: mysql# 控制台显示sqlshow-sql: truehibernate:# 更新或创建表结构ddl-auto: update
三、表结构SQL
完整代码:
-- jpa.`user` definitionCREATE TABLE `user` (`id` bigint NOT NULL AUTO_INCREMENT,`username` varchar(100) NOT NULL,`password` varchar(100) NOT NULL,`sex` varchar(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,`address` varchar(100) DEFAULT NULL,`age` bigint NOT NULL,PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=103 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
四、User实体类
常见用于实体类注解如下:
1、@Entity:用于将一个类标记为JPA实体类,表示这个类将映射到数据库中的一个表。在JPA中,实体类必须使用@Entity注解进行标记,以便JPA能够识别并管理它。
2、@Table:用于指定实体类对应的数据库表的名称和约束。
name:指定表的名称。
schema:指定表所在的数据库模式。
catalog:指定表所在的数据库目录。
uniqueConstraints:指定表的唯一约束。
3、@Column:用于指定实体类属性与数据库表字段的映射关系。
name:指定字段的名称。
nullable:指定字段是否可为空。
unique:指定字段是否唯一。
length:指定字段的长度。
precision:指定字段的精度。
scale:指定字段的小数位数。
4、@Id:用于指定实体类属性作为主键。
5、@GeneratedValue:用于指定主键的生成策略。
strategy:指定主键生成策略,如AUTO、IDENTITY、SEQUENCE等。
6、@Transient:用于指定实体类属性不需要持久化到数据库。
7、@Access:用于指定属性的访问方式,如FIELD、PROPERTY等。
8、@Temporal:用于指定实体类属性与数据库表字段的日期/时间类型映射。
value:指定日期/时间类型,如DATE、TIME、TIMESTAMP等。
9、@Enumerated:用于指定实体类属性与数据库表字段的枚举类型映射。
value:指定枚举类型映射方式,如ORDINAL、STRING等。
10、@Embedded:用于指定实体类属性为嵌入式对象。
11、@Embeddable:用于指定嵌入式对象。
12、@OneToOne:用于指定实体类之间的一对一关系。
13、@JoinColumn:用于指定外键列的名称和约束。
14、@OneToMany:用于指定实体类之间的一对多关系。
15、@JoinColumn:用于指定外键列的名称和约束。
16、@OrderBy:用于指定集合属性的排序方式。
17、@ManyToOne:用于指定实体类之间的多对一关系。
18、@JoinColumn:用于指定外键列的名称和约束。
19、@ManyToMany:用于指定实体类之间的多对多关系。
20、@JoinTable:用于指定中间表的名称和约束。
21、@JoinColumn:用于指定外键列的名称和约束。
完整代码:
package com.example.jpa.entity;import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;import javax.persistence.*;@Data
@AllArgsConstructor
@NoArgsConstructor
@Entity
@Table(name = "user")
public class User {@Id@Column(name = "id",nullable = false)@GeneratedValue(strategy= GenerationType.IDENTITY)private Long id;@Column(name = "username",nullable = false,length = 100)private String username;@Column(name = "password",nullable = false,length = 100)private String password;@Column(name = "sex",nullable = false,length = 1)private String sex;@Column(name = "address",length = 100)private String address;@Column(name = "age",nullable = false)private int age;
}
五、Dao持久层
完整代码:
package com.example.jpa.dao;import com.example.jpa.entity.User;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;import java.util.List;public interface UserRepository extends JpaRepository<User,Long> {/*** 根据用户名去查询用户信息* @return*/public User findUserByUsername(@Param("username") String username);/*** 自定义SQL查询* @return*/@Query(value="select * from user where address like %:address%",nativeQuery=true)List<User> findUserByAddressSQL(@Param("address") String address);}
六、使用示例
以下列举一些基本的增删改查功能。
6.1、查询名为张三的用户
完整代码:
package com.example.jpa;import com.example.jpa.dao.UserRepository;
import com.example.jpa.entity.User;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
import javax.annotation.Resource;@SpringBootTest
class JpaApplicationTests {@Resourceprivate UserRepository userRepository;@Testvoid contextLoads() {User user = userRepository.findUserByUsername("张三");System.out.println(user);}}
6.2、分页查询数据
完整代码:
package com.example.jpa;import com.example.jpa.dao.UserRepository;
import com.example.jpa.entity.User;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import javax.annotation.Resource;
import java.util.List;@SpringBootTest
class JpaApplicationTests {@Resourceprivate UserRepository userRepository;@Testvoid contextLoads() {Pageable pageable = PageRequest.of(1, 10);Page<User> userPage = userRepository.findAll(pageable);List<User> userList = userPage.getContent();}}
6.3、自定义SQL查询
完整代码:
package com.example.jpa;import com.example.jpa.dao.UserRepository;
import com.example.jpa.entity.User;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
import javax.annotation.Resource;
import java.util.List;@SpringBootTest
class JpaApplicationTests {@Resourceprivate UserRepository userRepository;@Testvoid contextLoads() {List<User> userList = userRepository.findUserByAddressSQL("江苏");}}
6.4、新增一条用户数据
完整代码:
package com.example.jpa;import com.example.jpa.dao.UserRepository;
import com.example.jpa.entity.User;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
import javax.annotation.Resource;
import java.util.*;@SpringBootTest
class JpaApplicationTests {@Resourceprivate UserRepository userRepository;@Testvoid contextLoads() {User user = new User();user.setUsername("李四");user.setPassword(UUID.randomUUID().toString());user.setAddress("江苏南通");user.setAge(18);user.setSex("男");userRepository.save(user);}}
6.5、修改一条用户数据
完整代码:
package com.example.jpa;import com.example.jpa.dao.UserRepository;
import com.example.jpa.entity.User;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
import javax.annotation.Resource;
import java.util.UUID;@SpringBootTest
class JpaApplicationTests {@Resourceprivate UserRepository userRepository;@Testvoid contextLoads() {User findUserByUsername = userRepository.findUserByUsername("张三");findUserByUsername.setPassword(UUID.randomUUID().toString());userRepository.save(findUserByUsername);}}
6.6、删除一条用户数据
完整代码:
package com.example.jpa;import com.example.jpa.dao.UserRepository;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
import javax.annotation.Resource;@SpringBootTest
class JpaApplicationTests {@Resourceprivate UserRepository userRepository;@Testvoid contextLoads() {userRepository.deleteById(18L);}}
七、Gitee源码
码云地址:SpringBoot整合Jpa实现增删改查功能
八、总结
以上就是我对SpringBoot整合Jpa实现增删改查基本功能分享,如有问题,欢迎评论区讨论!
相关文章:
SpringBoot整合Jpa实现增删改查功能(提供Gitee源码)
前言:在日常开发中,总是撰写一些简单的SQL会非常耗时间,Jpa可以完美的帮我们提高开发的效率,对于常规的SQL不需要我们自己撰写,相对于MyBatis有着更简单易用的功能,但是MyBatis自由度相对于Jpa会更高一些&a…...
微服务[Nacos]
CAP 1)一致性(Consistency) (所有节点在同一时间具有相同的数据) 2)可用性(Availability)(保证每个请求不管成功或者失败都有响应) 3)分区容错(Partition tolerance)(系统中任意信息的丢失或失败不会影响系统的继续运作) 一、虚拟机镜像准备 …...
8K视频来了,8K 视频编辑的最低系统要求
当今 RED、Canon、Ikegami、Sony 等公司的 8K 摄像机以及 8K 电视,许多视频内容制作人和电影制作人正在认真考虑 8K 拍摄、编辑和后期处理,需要什么样的系统来处理如此海量的数据? 中央处理器(CPU) 首先,…...
AsyncContext优雅实现HTTP长轮询接口
一、背景 接到一个需求,实现方案时需要提供一个HTTP接口,接口需要hold住5-8秒,轮询查询数据库,一旦数据库中值有变化,取出变化的值进行处理,处理完成后返回响应。这不就是长轮询吗,如何优雅的实…...
如何制作一个百货小程序
在这个数字化时代,小程序已成为各行各业的必备工具。其中,百货小程序因其便捷性和多功能性,越来越受到人们的青睐。那么,如何制作一个百货小程序呢?下面,我们就详细介绍一下无需编写代码的步骤。 一、进入后…...
【人工智能】—局部搜索算法、爬山法、模拟退火、局部剪枝、遗传算法
文章目录 局部搜索算法内存限制局部搜索算法示例:n-皇后爬山算法随机重启爬山模拟退火算法局部剪枝搜索遗传算法小结 局部搜索算法 在某些规模太大的问题状态空间内,A*往往不够用 问题空间太大了无法访问 f 小于最优的所有状态通常,甚至无法储…...
MATLAB旋转动图的绘制
MATLAB旋转动图的绘制 文章目录 MATLAB旋转动图的绘制1、动图效果2、matlab代码 利用matlab实现三维旋转动图的绘制。 1、动图效果 2、matlab代码 close all clear clcf(x,y,z)(x.^2 (9./4).*y.^2 z.^2 - 1).^3 - x.^2.*z.^3 - (9./80).*y.^2.*z.^3; [x,y,z]meshgrid(linspac…...
算法笔记 近似最近邻查找(Approximate Nearest Neighbor Search,ANN)
1 介绍 精准最近邻搜索中数据维度一般较低,所以会采用穷举搜索,即在数据库中依次计算其中样本与所查询数据之间的距离,抽取出所计算出来的距离最小的样本即为所要查找的最近邻。 当数据量非常大的时候,搜索效率急剧下降。——>…...
uni-app 之 vue语法
uni-app 之 vue语法 image.png --- v-html 字符 --- image.png <template><view><view>{{title}}</view>--- v-html 字符 ---<view>{{title2}}</view><view v-html"title2"></view><view>{{arr}}</view&g…...
Android之RecyclerView仿ViewPage滑动
文章目录 前言一、效果图二、实现步骤1.xml主布局2.所有用到的drawable资源文件3.xml item布局4.adapter适配器5.javabean实体类6.activity使用 总结 前言 我们都知道ViewPageFragment滑动,但是的需求里面已经有了这玩意,但是在Fragment中还要有类似功能…...
【owt-server】AudioSendAdapter分析
owt-server/source/core/rtc_adapter/AudioSendAdapter.cc使用其他线程运行rtprtcpmodule taskrunner分配线程:因此,对rtprtcp的使用都是加了mutex的:首先为音频发送者生成一个随机的ssrc并注册 // SSRCs of this type.std::vector<uint32_t> ssrcs_;发送还要向rtprtc…...
day33 List接口
List实现类 java.util.ArrayList: 底层通过数组保存数据 , 查询快,增删慢 java.util.LinkedList: 底层通过链表保存数据, 查询慢,增删快 如果对操作性能没有特殊要求,我们一般选择ArrayList…...
云原生周刊:Linkerd 发布 v2.14 | 2023.9.4
开源项目推荐 Layerform Layerform 是一个 Terraform 包装器,可帮助工程师使用纯 Terraform 文件构建可重用的基础设施。 为了实现重用,Layerform 引入了层的概念。每层都包含一些基础设施,并且可以堆叠在另一层之上。 除了更易于使用之外…...
CS420 课程笔记 P5 - 内存编辑 数据类型
文章目录 IntroductionData typesBooleansNegative numbers (Signed integers)Floating-point numbers (fractional numbers) Unknown value scansHealth findingFloat finding (Player position hack / Teleport hack) Additional things Introduction 这节课将结束数据类型并…...
oracle报错 ORA-02290: 违反检查约束条件问题
保存数据库信息时,提示违反检查约束条件,如图: org.springframework.dao.DataIntegrityViolationException: ### Error updating database. Cause: java.sql.SQLIntegrityConstraintViolationException: ORA-02290: 违反检查约束条件 (MXUSER…...
Prometheus + grafana 的监控平台部署
一、Prometheus安装 tar -zxvf prometheus-2.44.0.linux-amd64.tar.gz -C /opt/module/ sudo chown -R bigdata:bigdata /opt/module/prometheus-2.44.0.linux-amd64 mv /opt/module/prometheus-2.44.0.linux-amd64 /opt/module/prometheus-2.44.0 ln -s /opt/module/promethe…...
npm、yarn、pnpm
一、简介 CommonJS 的出现,使 node 环境下的 JS 代码可以用模块更加细粒度的划分。一个类、一个函数、一个对象、一个配置等等均可以作为模块,这种细粒度的划分,是开发大型应用的基石。 为了解决在开发过程中遇到的常见问题,比如…...
力扣|两数相加
先放题目: 给你两个非空的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。 请你将两个数相加,并以相同形式返回一个表示和的链表。 你可以假设除了数字 0 之外,…...
prometheus通过blackbox-exporter监控web站点证书
1 概述 线上站点普遍是https,因此监控https web站点的证书的过期时间,是一个基础性需求。例如,证书过期会导致tls握手失败,进而导致用户无法正常访问web站点。 blackbox-expoter是一个web服务,它暴露了一个接口&#…...
CentOS7 Hadoop3.3.0 安装与配置
一、安装JDK 1、创建文件夹tools和training用于存放压缩包和解压使用,tools存放压缩包,training用于解压后安装jdk和hadoop的路径。 1)回到路径为 / 的位置 cd /2) 创建 tools 和 training mkdir toolsmkdir training3) 进入tools文件夹 …...
Day131 | 灵神 | 回溯算法 | 子集型 子集
Day131 | 灵神 | 回溯算法 | 子集型 子集 78.子集 78. 子集 - 力扣(LeetCode) 思路: 笔者写过很多次这道题了,不想写题解了,大家看灵神讲解吧 回溯算法套路①子集型回溯【基础算法精讲 14】_哔哩哔哩_bilibili 完…...
CMake基础:构建流程详解
目录 1.CMake构建过程的基本流程 2.CMake构建的具体步骤 2.1.创建构建目录 2.2.使用 CMake 生成构建文件 2.3.编译和构建 2.4.清理构建文件 2.5.重新配置和构建 3.跨平台构建示例 4.工具链与交叉编译 5.CMake构建后的项目结构解析 5.1.CMake构建后的目录结构 5.2.构…...
论文浅尝 | 基于判别指令微调生成式大语言模型的知识图谱补全方法(ISWC2024)
笔记整理:刘治强,浙江大学硕士生,研究方向为知识图谱表示学习,大语言模型 论文链接:http://arxiv.org/abs/2407.16127 发表会议:ISWC 2024 1. 动机 传统的知识图谱补全(KGC)模型通过…...
自然语言处理——循环神经网络
自然语言处理——循环神经网络 循环神经网络应用到基于机器学习的自然语言处理任务序列到类别同步的序列到序列模式异步的序列到序列模式 参数学习和长程依赖问题基于门控的循环神经网络门控循环单元(GRU)长短期记忆神经网络(LSTM)…...
SAP学习笔记 - 开发26 - 前端Fiori开发 OData V2 和 V4 的差异 (Deepseek整理)
上一章用到了V2 的概念,其实 Fiori当中还有 V4,咱们这一章来总结一下 V2 和 V4。 SAP学习笔记 - 开发25 - 前端Fiori开发 Remote OData Service(使用远端Odata服务),代理中间件(ui5-middleware-simpleproxy)-CSDN博客…...
html css js网页制作成品——HTML+CSS榴莲商城网页设计(4页)附源码
目录 一、👨🎓网站题目 二、✍️网站描述 三、📚网站介绍 四、🌐网站效果 五、🪓 代码实现 🧱HTML 六、🥇 如何让学习不再盲目 七、🎁更多干货 一、👨…...
C++.OpenGL (14/64)多光源(Multiple Lights)
多光源(Multiple Lights) 多光源渲染技术概览 #mermaid-svg-3L5e5gGn76TNh7Lq {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-3L5e5gGn76TNh7Lq .error-icon{fill:#552222;}#mermaid-svg-3L5e5gGn76TNh7Lq .erro…...
三分算法与DeepSeek辅助证明是单峰函数
前置 单峰函数有唯一的最大值,最大值左侧的数值严格单调递增,最大值右侧的数值严格单调递减。 单谷函数有唯一的最小值,最小值左侧的数值严格单调递减,最小值右侧的数值严格单调递增。 三分的本质 三分和二分一样都是通过不断缩…...
FFmpeg:Windows系统小白安装及其使用
一、安装 1.访问官网 Download FFmpeg 2.点击版本目录 3.选择版本点击安装 注意这里选择的是【release buids】,注意左上角标题 例如我安装在目录 F:\FFmpeg 4.解压 5.添加环境变量 把你解压后的bin目录(即exe所在文件夹)加入系统变量…...
什么是VR全景技术
VR全景技术,全称为虚拟现实全景技术,是通过计算机图像模拟生成三维空间中的虚拟世界,使用户能够在该虚拟世界中进行全方位、无死角的观察和交互的技术。VR全景技术模拟人在真实空间中的视觉体验,结合图文、3D、音视频等多媒体元素…...
