【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;运行…

安卓密码框、EditText

目录 1. 基础使用 2. 密码的展示与隐藏 (1) 使用setTransformationMethod方法 (2) 使用setInputType方法 3. imeOptions属性 4. 单行设置 在安卓中使用密码框普遍采用EditText设置inputType"textPassword"的方式。 1. 基础使用 <EditTextandroid:id"…

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

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

在网络安全护网中,溯源是什么?

在网络安全护网中&#xff0c;溯源是什么&#xff1f; 在网络安全护网中&#xff0c;溯源是指通过收集、分析和解释数字证据来追踪和还原网络攻击或其他网络犯罪活动的过程。它旨在确定攻击者的身份、行为和意图&#xff0c;以便采取适当的对策&#xff0c;并为法律机构提供必…

探究C语言中的分支和循环语句

C语言是一种广泛应用的编程语言&#xff0c;其强大的分支和循环语句为程序员提供了灵活性和控制流。在本文中&#xff0c;我们将深入探讨C语言中的分支和循环语句&#xff0c;以及它们在编程中的重要性和应用。 分支语句&#xff1a; 在C语言中&#xff0c;分支语句主要包括if语…

【已解决】Splunk workload rule invalid 问题

1: 背景: 今天由于要改变workload managment 里面的workload rule, 发现改了以后,splunk search haead 界面就报错:Failed to read / process workload rule = xxx_abort. Specify a valid workload rule in the workload_rules.conf file. 2: 解决问题: 先看文档: Co…

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

mysql基本操作增删改查

mysql基本操作 show databases; #查看所有数据库use [数据库];#选择数据库show tables;#查看当前数据库下所有的表insert into [表名] values ([字段值1],[字段值2],[字段值3]) ; #向表中插入数据delete from [表名] values ([字段值1],[字段值2],[字段值3]); #删除表中部分数据…

RESTful API 接口设计指南

目录 一. 前言 二. RESTful API 设计的定义 2.1. 重要术语 2.2. 一般规范 2.3. 协议 2.4. 域名 2.5. 版本&#xff08;Version&#xff09; 2.6. Http 动词 2.7. 路径&#xff08;Endpoint&#xff09; 2.8. 过滤&#xff08;Filter&#xff09; 2.9. 返回结果 2.1…

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

一、在被连接的电脑上对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…

oracle的sysaux使用量排查sql

水1篇工具sql SELECT OCCUPANT_NAME,OCCUPANT_DESC,SCHEMA_NAME,MOVE_PROCEDURE,MOVE_PROCEDURE_DESC,SPACE_USAGE_KBYTES SPACE_USAGE_KB,ROUND(SPACE_USAGE_KBYTES / 1024 / 1024,2) SPACE_USAGE_GFROM V$SYSAUX_OCCUPANTS DORDER BY D.SPACE_USAGE_KBYTES DESC; 分享些经…

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

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

手机笔记工具怎么加密?

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

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

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

C++函数模板的两种表现形式

函数模板利用关键字 template使用函数模板有两种方式&#xff1a;自动类型推导、显示指定类型模板的目的是为了提高复用性&#xff0c;将类型参数化## 自动类型推导 自动推导类型 template<typename T> //第一种模板类 void myvalue(T &a, T &b) {T temp a;…

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…