【Springboot系列】SpringBoot整合Jpa

文章目录

      • 前言:
      • 什么是JPA?
      • JPA优缺点
        • 优点
          • 1.简化开发:
          • 2.高度抽象:
          • 3.跨数据库支持:
          • 4.自动化的事务管理:
        • 缺点
          • 1.学习成本较高:
          • 2.性能问题:
          • 3.灵活性受限:
      • 示例
        • 版本依赖
        • 代码
          • UserDO
          • UserRepository
          • JpaController
        • 测试
      • 总结
      • 源码获取
      • 写在最后

579a429daf314744b995f37351b46548

前言:

Spring Boot是一种快速开发框架,它简化了Java应用程序的开发过程。而Jpa(Java Persistence API)是Java持久化规范的一种实现,它提供了一种方便的方式来访问和操作数据库。将Spring Boot与Jpa整合可以更加方便地进行数据库操作,提高开发效率。本文将介绍如何使用Spring Boot整合Jpa,帮助读者快速上手并应用于实际项目中。


什么是JPA?

Jpa(Java Persistence API)是Java持久化规范的一种实现,它提供了一种方便的方式来访问和操作数据库。下面将介绍Jpa的优点和缺点。


JPA优缺点

优点

image-20231130012950622

1.简化开发:

Jpa提供了一种面向对象的方式来进行数据库操作,开发人员可以使用Java对象来表示数据库表和记录,而不需要编写复杂的SQL语句。这样可以大大简化开发过程,提高开发效率。

2.高度抽象:

Jpa提供了一套高度抽象的API,隐藏了底层数据库的细节,开发人员可以更加专注于业务逻辑的实现,而不需要关注数据库的具体实现细节。这样可以降低开发的复杂性,提高代码的可维护性。

3.跨数据库支持:

Jpa支持多种数据库,开发人员可以在不同的数据库之间切换,而不需要修改大量的代码。这样可以提高系统的灵活性和可扩展性。

4.自动化的事务管理:

Jpa提供了自动化的事务管理机制,开发人员可以使用注解来标识事务的边界,Jpa会自动处理事务的提交和回滚。这样可以简化事务管理的代码,提高系统的稳定性和可靠性。

缺点

image-20231130013118663

1.学习成本较高:

Jpa是一种复杂的技术,需要开发人员具备一定的数据库和ORM(对象关系映射)的知识。对于初学者来说,学习和掌握Jpa可能需要一定的时间和精力。

2.性能问题:

由于Jpa是一种高度抽象的技术,它会对数据库的访问和操作进行一定的封装和转换,这可能会导致一定的性能损失。在对性能要求较高的场景下,可能需要使用原生的SQL语句来进行数据库操作。

3.灵活性受限:

Jpa提供了一套标准的API,开发人员需要按照这套API来进行开发,这可能会限制一些特定的需求和场景。在一些复杂的业务场景下,可能需要使用原生的SQL语句或其他ORM框架来实现。


示例

版本依赖
模块版本
SpringBoot3.1.0
JDK17
代码
UserDO
@Entity
@Data
@Table(name = "user")
public class UserDO  {private static final long serialVersionUID = -2952735933715107252L;@Id@GeneratedValue(strategy = GenerationType.IDENTITY)private Long id;private String name;private Integer age;private String email;}
UserRepository
/*** 查询方法:* findBy/getBy/queryBy/readBy 后面跟要查询的字段名,用于精确匹配。* find/get/query/read 后面跟要查询的字段名,使用条件表达式进行模糊匹配。* findAll/getAll 后面不跟字段名,表示查询所有记录。** 支持的关键字:* And:连接多个查询条件,相当于 SQL 中的 AND。* Or:连接多个查询条件,相当于 SQL 中的 OR。* Between:用于查询字段在某个范围内的记录。* LessThan/LessThanEqual:用于查询字段小于某个值的记录。* GreaterThan/GreaterThanEqual:用于查询字段大于某个值的记录。* IsNull/IsNotNull:用于查询字段为空或不为空的记录。* Like/NotLike:用于模糊查询字段值。* OrderBy:用于指定查询结果的排序方式。** 删除方法:* deleteBy/removeBy 后面跟要查询的字段名,用于精确匹配。* delete/remove 后面跟要查询的字段名,使用条件表达式进行模糊匹配。** 统计方法:* countBy 后面跟要查询的字段名,用于精确匹配。* count 后面不跟字段名,表示统计所有记录数。** 更新方法:* updateBy 后面跟要查询的字段名,用于精确匹配。* update 后面跟要查询的字段名,使用条件表达式进行模糊匹配。** 支持的关键字:* Set:用于设置要更新的字段的值。* Where:用于指定更新操作的条件。** 部分查询关键字映射示例* 关键字                使用示例* And	                findByLastnameAndFirstname* Or	                findByLastnameOrFirstname* Is,Equals	        findByFirstnameIs,findByFirstnameEquals* Between	            findByStartDateBetween* LessThan	            findByAgeLessThan* LessThanEqual	    findByAgeLessThanEqual* GreaterThan	        findByAgeGreaterThan* GreaterThanEqual	    findByAgeGreaterThanEqual* After	            findByStartDateAfter* Before	            findByStartDateBefore* IsNull	            findByAgeIsNull* IsNotNull,NotNull	findByAge(Is)NotNull* Like	                findByFirstnameLike* NotLike	            findByFirstnameNotLike* StartingWith	        findByFirstnameStartingWith* EndingWith	        findByFirstnameEndingWith* Containing	        findByFirstnameContaining* OrderBy	            findByAgeOrderByLastnameDesc* Not	                findByLastnameNot* In	                findByAgeIn(Collection ages)* NotIn	            findByAgeNotIn(Collection age)* TRUE	                findByActiveTrue()* FALSE	            findByActiveFalse()* IgnoreCase	        findByFirstnameIgnoreCase*/
public interface UserRepository extends JpaRepository<UserDO, Long> {UserDO findByName(String name);UserDO findByNameOrEmail(String name, String email);Long countByName(String name);List<UserDO> findByNameLike(String name);UserDO findByNameIgnoreCase(String name);List<UserDO> findByNameContainingOrderByAgeDesc(String name);Page<UserDO> findByName(String name,Pageable pageable);}
JpaController
/*** jpa测试*/
@RestController
public class JpaController {@Autowiredprivate UserRepository userRepository;@GetMapping("/findByName")public UserDO findByName(String name) {return userRepository.findByName(name);}}
测试

image-20231130013434422

至此示例发送完成


总结

通过本文的介绍,我们了解了如何使用Spring Boot整合Jpa来进行数据库操作。

Spring Boot提供了简洁的配置和便捷的开发方式,而Jpa则提供了方便的数据库访问和操作方式。

将二者结合起来,可以更加高效地进行数据库开发。

希望本文对读者有所帮助,让大家能够快速上手并应用于实际项目中。


源码获取

如果需要完整源码请关注公众号"架构殿堂" ,回复 "SpringBoot+Jpa"即可获得


写在最后

感谢您的支持和鼓励! 😊🙏

如果大家对相关文章感兴趣,可以关注公众号"架构殿堂",会持续更新AIGC,java基础面试题, netty, spring boot, spring cloud等系列文章,一系列干货随时送达!

csdn-end

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

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

相关文章

linux 服务 下 redis 安装和 启动

官网下载 https://redis.io/download/ 安装步骤&#xff1a; 1.安装redis 所需要的依赖 yum install -y gcc tcl2.上传安装包并解压&#xff0c;下载安装包&#xff0c;上传到/usr/local/src目录&#xff0c;解压 tar -zxvf redis-7.2.3.tat.gz进入安装目录&#xff0c;运行…

【SK-learn学习】1.16 概率校准

一、说明 概率校准&#xff0c;指的是对于分类器而言&#xff0c;对应多种类别&#xff0c;概率最大就将样本归入&#xff0c;这个事实没有考虑置信度的问题。sklearn的calibration就是指的这种情形&#xff0c;参考本文。 二、关于sklearn.calibration的概念 执行分类时&#…

Haskell和http-client库下载代码示例

haskell import Network.HTTP.Client 然后&#xff0c;我们需要定义一个函数来下载视频。这个函数将接收一个URL作为参数&#xff0c;并返回一个IO动作&#xff0c;该动作将下载视频文件到当前目录。 haskell downloadVideo :: String -> IO () downloadVideo url do --…

Kubernetes(K8s)资源管理-03

资源管理 资源管理介绍 在kubernetes中&#xff0c;所有的内容都抽象为资源&#xff0c;用户需要通过操作资源来管理kubernetes。 kubernetes的本质上就是一个集群系统&#xff0c;用户可以在集群中部署各种服务&#xff0c;所谓的部署服务&#xff0c;其实就是在kubernetes集…

【同一局域网下】访问其他电脑的虚拟机

一、在被连接的电脑上对VMware进行设置 编辑 --> 虚拟网络编辑器 按顺序点击 如果22端口已被占用&#xff0c;可以自行定义 &#xff08;端口号越大&#xff0c;被占用的可能性越小&#xff09; 二、在被连接的电脑上对防火墙进行设置&#xff08;这里以win11为例&#xff…

AppDelete 4.3.3(软件清理卸载工具)

AppDelete for Mac是一款运行在Mac平台上的强大软件卸载工具&#xff0c;AppDelete Mac版不仅可以删除应用程序&#xff0c;还可以删除小部件&#xff0c;首选项窗格&#xff0c;插件和屏幕保护程序及其相关文件&#xff0c;卸载快速又干净&#xff0c;仅需要简单的拖拽即可。 …

【端到端可微1】端到端的训练,使用反向传播,要求过程可微分

文章目录 背景想法&#xff1a; Weighted least-squares fitting方法&#xff1a; Backpropagating through the fitting procedure.温习之前的基础前向传播反向传播 总结 背景 想做一个端到端训练的模型&#xff0c;将最小二乘嵌入其中。因此有了这系列文章。 想法&#xff…

用本子堆经验,手把手教你怎么写国自然项目基金!

随着社会经济发展和科技进步&#xff0c;基金项目对创新性的要求越来越高。申请人需要提出独特且有前瞻性的研究问题&#xff0c;具备突破性的科学思路和方法。因此&#xff0c;基金项目申请往往需要进行跨学科的技术融合。申请人需要与不同领域结合&#xff0c;形成多学科交叉…

手机笔记工具怎么加密?

选择用手机笔记工具记事&#xff0c;大家可以记录很多学习笔记、读书笔记、私密日记等&#xff0c;手机作为随身携带的设备&#xff0c;记录相关的笔记比较快捷且方便&#xff0c;当手机笔记中记录的内容比较私密时&#xff0c;大家担心手机笔记会被别人误看&#xff0c;这时候…

无电机光电测径仪稳定性好

目前市面上的在线测径仪主要是有电机的激光扫描式测径仪与无电机的光电平行光测径仪。均能完成外径尺寸的高精度尺寸检测&#xff0c;本文来简单介绍一下无电机光电测径仪的优势。 光电测径仪检测原理 发射镜头内置一个点光源&#xff0c;点光源发出的光通过透镜系统&#xf…

Amazon CodeWhisperer 使用体验

文章作者&#xff1a;STRIVE Amazon CodeWhisperer 是最新的代码生成工具&#xff0c;支持多种编程语言&#xff0c;如 java,js,Python 等&#xff0c;能减少开发人员手敲代码时间&#xff0c;提升工作效率。PS:本人是一名 CodeWhisperer 业余爱好者 亚马逊云科技开发者社区为开…

Vue拖拽div移动位置

<div id"TestDiv" mousedown"OnMouseDown"></div> css #TestDiv { position: absolute;left: 50%;top: 50%;width: 100px;height: 100px;z-index: 999;background-color: red; } 处理函数 const OnMouseDown(e:any)> {let videoBox:any…

C语言进阶之笔试题详解(2)

前言 这里的内容包括二维数组笔试题和指针笔试题&#xff0c;供给读者对这部分知识进行加深和巩固。 ✨ 猪巴戒&#xff1a;个人主页✨ 所属专栏&#xff1a;《C语言进阶》 &#x1f388;跟着猪巴戒&#xff0c;一起学习C语言&#x1f388; 目录 前言 笔试题 二维数组 题目…

自定义Windows服务启动失败

文章目录 自定义Windows服务启动失败报错内容解决方案管理员身份运行cmd进入到InstallUtil.exe的路径&#xff0c;使用cd命令。使用InstallUtil.exe工具安装服务。 自定义Windows服务启动失败 报错内容 “无法从命令行或调试器启动服务&#xff0c;必须首先安装Windows服务(使…

【python+Excel】读取和存储测试数据完成接口自动化测试

http_request2.py用于发起http请求 #读取多条测试用例 #1、导入requests模块 import requests #从 class_12_19.do_excel1导入read_data函数 from do_excel2 import read_data from do_excel2 import write_data from do_excel2 import count_case #定义http请求函数COOKIENon…

docker搭建node环境开发服务器

docker搭建node环境开发服务器 本文章是我自己搭建node环境开发服务器的过程记录&#xff0c;不一定完全适用所有人。根据个人情况&#xff0c;按需取用。 命名项目路径 为了方便cd到项目路径&#xff0c;将项目路径重命名&#xff0c;方便输入。 vim /etc/profile # 修改p…

展开运算符(...)

假如我们有一个数组&#xff1a; const arr [7,8,9];● 我们如果想要数组中的元素&#xff0c;我们必须一个一个手动的去获取&#xff0c;如下&#xff1a; const arr [7,8,9]; const badNewArr [5, 6, arr[0], arr[1],arr[2]]; console.log(badNewArr);● 但是通过展开运…

回归预测 | MATLAB实现基于LightGBM算法的数据回归预测(多指标,多图)

回归预测 | MATLAB实现基于LightGBM算法的数据回归预测&#xff08;多指标&#xff0c;多图&#xff09; 目录 回归预测 | MATLAB实现基于LightGBM算法的数据回归预测&#xff08;多指标&#xff0c;多图&#xff09;效果一览基本介绍程序设计参考资料 效果一览 基本介绍 MATLA…

Linux系统编程--文件操作函数

一.常见IO函数 fopen fclose fread fwrite fseek fflush fopen 运行过程 &#xff1a;打开文件 写入数据 数据写到缓冲区 关闭文件后 将数据刷新入磁盘 1.fopen 返回文件类型的结构体的指针 包括三部分 1).文件描述符&#xff08;整形值 索引到磁盘文件&#xff09;…

PGSQL(PostgreSQL)数据库安装教程

安装包下载 下载地址 下载后点击exe安装包 设置的data存储路径 设置密码 设置端口 安装完毕&#xff0c;配置PGSQL的ip远程连接&#xff0c;pg_hba.conf&#xff0c;postgresql.conf&#xff0c;需要更改这两个文件 pg_hba.conf 最后增加一行 host all all …