SpringBoot整合JPA 基础使用

一、什么是JPA

‌‌1.JPA的定义和基本概念‌‌

‌JPA(Java Persistence API)‌是Java中用于进行持久化操作的一种规范,它定义了一系列用于操作关系型数据库的API接口。通过这些接口,开发人员可以方便地进行数据库的增删改查等操作,而无需关注具体的数据库操作细节。JPA通过JDK 5.0注解或XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中。

‌2.JPA的核心概念‌

JPA的核心概念包括对象-关系映射(ORM)和实体对象持久化。ORM技术是一种将对象模型和关系模型进行映射的技术,通过ORM,开发人员可以将Java对象直接映射到数据库表中,从而避免了手动编写SQL语句的繁琐工作。JPA提供了一套注解和配置方式,可以方便地将Java类与数据库表进行映射,使得开发人员可以直接操作Java对象,而无需手动维护SQL语句。

‌3.JPA的用途和目标‌

JPA的目标是简化企业应用开发,使得开发者能够更容易地实现对象与数据库表之间的映射关系。它定义了对象-关系映射(ORM)以及实体对象持久化的标准接口,旨在规范和简化Java对象的持久化工作。通过提供统一的API和封装数据库操作细节,JPA使得开发人员可以更加方便地进行数据库操作,提高了代码的可维护性和可读性。

‌4.JPA的优势‌

使用JPA的优势包括提高代码的可维护性和可读性。通过使用JPA,开发人员可以使用面向对象的方式来操作数据库,无需直接操作SQL语句,这使得代码更加直观和易于理解。此外,JPA还提供了一些高级特性,如缓存管理、事务管理等,这些特性可以帮助开发人员更好地进行性能优化和并发控制。

二、JPA的使用

1.准备数据库脚本

DROP TABLE IF EXISTS user;CREATE TABLE user
(id BIGINT(20) NOT NULL COMMENT '主键ID',name VARCHAR(30) NULL DEFAULT NULL COMMENT '姓名',age INT(11) NULL DEFAULT NULL COMMENT '年龄',email VARCHAR(50) NULL DEFAULT NULL COMMENT '邮箱',PRIMARY KEY (id)
);

2.初始化数据

INSERT INTO user (id, name, age, email) VALUES
(1, 'Jone', 18, 'test1@baomidou.com'),
(2, 'Jack', 20, 'test2@baomidou.com'),
(3, 'Tom', 28, 'test3@baomidou.com'),
(4, 'Sandy', 21, 'test4@baomidou.com'),
(5, 'Billie', 24, 'test5@baomidou.com');

3.xml文件导入依赖

<!-- JPA框架 -->
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>

4.引入JPA配置

spring:jpa:hibernate:# ddl-auto 枚举:# none(默认):禁用DDL处理# validate:验证schema,不对数据库做任何操作# update:更新schema# create:创建schema,并销毁之前数据# create-drop:会话创建时创建schema,会话关闭时销毁schemaddl-auto: update# jpa配置:在控制台显示Hibernate的sql(可选)show-sql: true

(1)加载数据库驱动,springboot3.0开始mysql驱动改为com.mysql.cj.jdbc.Driver,而非com.mysql.jdbc.Driver。

(2)jpa底层实现采用hibernate,自动建表配置使用update,表示第一次创建schema,后续只做更新操作。

5.创建实体对象

import lombok.Data;import javax.persistence.*;@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;}

6.定义Repository接口

public interface UserRepository extends JpaRepository<UserDO, Long> {/*** 根据用户姓名查找用户** @param name 用户姓名* @return 找到的用户对象,如果不存在返回 null*/UserDO findByName(String name);/*** 根据用户姓名或电子邮箱查找用户** @param name  用户姓名* @param email 用户电子邮箱* @return 找到的用户对象,如果不存在返回 null*/UserDO findByNameOrEmail(String name, String email);/*** 根据用户姓名计数用户数量** @param name 用户姓名* @return 具有该姓名的用户数量*/Long countByName(String name);/*** 根据用户名进行模糊搜索** @param name 用户姓名(可以包含通配符)* @return 匹配的用户列表*/List<UserDO> findByNameLike(String name);/*** 根据用户姓名忽略大小写查找用户** @param name 用户姓名* @return 找到的用户对象,如果不存在返回 null*/UserDO findByNameIgnoreCase(String name);/*** 根据用户姓名查找用户,并按年龄降序排列** @param name 用户姓名* @return 匹配的用户列表,按年龄降序排列*/List<UserDO> findByNameContainingOrderByAgeDesc(String name);/*** 根据用户姓名进行分页查询** @param name     用户姓名* @param pageable 分页信息* @return 包含用户对象的分页结果*/Page<UserDO> findByName(String name, Pageable pageable);
}

注:Repository接口用于定义对实体对象UserDO进行持久化操作的方法。

7.创建controller层调用Repository接口方法

这里只是简单测了根据ID查询

@RestController
@RequestMapping("/user")
public class UserController {@Autowiredprivate UserRepository userRepository;/*** 测试单条查询*/@GetMapping("/id")public void testSelectOne() {// 从 UserRepository 中查找 ID 为 1 的用户Optional<UserDO> user = userRepository.findById(1L);System.out.println(user);}
}

测试效果:

三、JPA的常用

1.常用注解

注解

描述

@Entity

声明该类为实体类。

@Table

指定实体类映射的数据库表,通常与@Entity注解一起使用。

@Id

声明实体类的属性或字段作为数据库表的主键。

@GeneratedValue

指定主键的生成策略。

@Column

用于标注实体类中的属性与数据库表中的字段之间的映射关系。

@Transient

声明实体类的属性或字段不是持久化的。

@Basic

指定实体类属性的存取策略。

@Temporal

指定java.util.Date或java.util.Calendar

属性映射到数据库类型时的时间精度。

@Enumerated

指定枚举类型的属性映射。

@OneToOne

指定一对一的关联映射。

@OneToMany

指定一对多的关联映射。

@ManyToOne

指定多对一的关联映射。

@ManyToMany

指定多对多的关联映射。

@JoinColumn

指定关联的外键列。

@MapKey

指定映射关系中的键。

2.常用查询方法

方法类型

方法名称

描述

查询方法

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

指定更新操作的条件。

 3.部分查询关键字映射示例

部分查询关键字映射示例

关键字

使用示例

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 ages)

TRUE

findByActiveTrue()

FALSE

findByActiveFalse()

IgnoreCase

findByFirstnameIgnoreCase

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

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

相关文章

DC00021基于springboot问卷调查管理系统web项目调查问卷管理系统MySQL(附源码)

1、项目功能演示 DC00021基于springboot问卷调查管理系统web项目调查问卷管理系统MySQL 2、项目功能描述 基于springboot问卷调查管理系统包括以下功能&#xff1a; 1、系统登录、系统注册 2、创建题目、题目信息查看 3、创建问卷、我的问卷信息查看 4、创建活动、我的活动信息…

看Threejs好玩示例,学习创新与技术(ThreePipe)

下面这个示例我觉得特别棒&#xff0c;我会推荐给我们的美工&#xff0c;以后产品的宣传图用它。比如下面这个图&#xff0c;不需要PS&#xff0c;仅需拖拽一个照片进去&#xff0c;它会自动铺到笔记本电脑上。完成后点击截图就可以得到高清图片&#xff0c;不需要摆拍和PS。大…

光伏设计难点在哪儿?如何解决?

一、光伏设计的主要难点 1.技术门槛高 光伏设计领域的一大难题在于技术使用的复杂性。用户往往需要下载并安装特定的软件和控件&#xff0c;这些工具操作复杂&#xff0c;增加了学习成本和使用难度。此外&#xff0c;现有的设计工具并非专为光伏设计而生&#xff0c;组件库不…

【华为】用策略路由解决双出口运营商问题

需求描述 不同网段访问互联网资源时&#xff0c;走不同的出口&#xff0c;即PC1走电信出口&#xff0c;PC2走移动出口。 客户在内网接口下应用策略路由后往往出现无法访问内网管理地址的现象&#xff0c;该举例给出解决办法。 拓扑图 基础配置 #sysname R1 # # interface G…

Android15音频进阶之新播放器HwAudioSource(八十六)

简介: CSDN博客专家、《Android系统多媒体进阶实战》一书作者 新书发布:《Android系统多媒体进阶实战》🚀 优质专栏: Audio工程师进阶系列【原创干货持续更新中……】🚀 优质专栏: 多媒体系统工程师系列【原创干货持续更新中……】🚀 优质视频课程:AAOS车载系统+…

亚马逊IP关联揭秘:发生ip关联如何处理

在亚马逊这一全球领先的电商平台上&#xff0c;IP关联是一个不可忽视的问题&#xff0c;尤其是对于多账号运营的卖家而言。本文将深入解析亚马逊IP关联的含义、影响以及应对策略&#xff0c;帮助卖家更好地理解和应对这一问题。 什么是亚马逊IP关联&#xff1f; 亚马逊IP关联…

Redis篇(应用案例 - 优惠卷秒杀)

目录 一、全局唯一ID 1. 简介 2. Redis实现全局唯一Id 3. 测试类 3.1. 关于 countdownlatch 3.2. CountDownLatch 中有两个最重要的方法 二、添加优惠卷 三、实现秒杀下单 四、库存超卖问题分析 六、乐观锁解决超卖问题 七、优惠券秒杀-一人一单 八、集群环境下的并…

1比25万基础电子地图(港澳版)

我们为你分享过四川、云南、江西、贵州、重庆、青海、西藏、新疆、甘肃、黑龙江、吉林、湖北、内蒙古、广东、广西、浙江、河南、湖南、宁夏、山西、陕西、天津、山东、河北、江苏、福建、辽宁、北京、安徽、上海、海南和台湾的1比25万基础电子地图&#xff0c;现在再为你分享港…

MySQL --数据类型

文章目录 1.数据类型分类2.数值类型2.1 tinyint类型2.2 bit类型2.3小数类型2.31float2.32decimal 3.字符串类型3.1 char3.2varchar3.3 char和varchar比较 4.日期和时间类型5.enum和set 1.数据类型分类 2.数值类型 2.1 tinyint类型 数值越界测试&#xff1a; create table tt1…

ubuntu内网穿透后在公网使用ssh登录

需求&#xff1a; 我有一台内网可以通过ssh 22端口访问的设备操作系统是ubuntu server我还有1台拥有公网IP的服务器&#xff0c;IP地址是 6.66.666.6666我想随时从其他网段通过ssh访问我的ubuntu server设备 实现&#xff1a; 工具准备&#xff1a;frp 网址&#xff1a;https…

Spring源码学习:SpringMVC(3)mvcannotation-driven标签解析【RequestMappingHandlerMapping生成】

目录 前言mvc:annotation-driven标签概述mvc:annotation-driven标签解析【RequestMappingHandlerMapping生成】AnnotationDrivenBeanDefinitionParser#parse &#xff08;解析入口&#xff09;RequestMappingHandlerMapping的实例化类图afterPropertiesSetAbstractHandlerMetho…

MySQL数据库——索引

目录 什么是索引&#xff08;Index&#xff09;&#xff1f; 怎样加索引&#xff1f; 索引的特点 索引类型 主键索引(Primary Key) 辅助索引&#xff08;二级索引&#xff09; 聚集索引和非聚集索引 聚集索引 非聚集索引 单列索引和联合索引 单列索引 联合索引 创…

mac Wireshark You do not have permission to capture on device “rvio“.

原因&#xff1a; 权限不足 解决方案&#xff1a; 打开终端在终端输入 whoamin (会在终端显示本机的实际用户名字) 例如&#xff1a;xiaoming进入 /dev 目录 cd /dev输入命令&#xff1a;ls -la | grep bp输入命令&#xff1a;sudo chown whoamin xiaoming:admin bp*重新打开 …

Python(五)-函数

目录 函数的定义与调用 特点 语法格式 函数的参数 函数的返回值 函数嵌套调用 变量的作用域 局部变量 全局变量 函数的多种参数 位置参数 关键字参数 默认参数 可变参数 函数的定义与调用 python函数需要使用def关键字来定义,需要先定义,后调用 特点: 先定义…

【数据结构与算法】LeetCode:二分查找

文章目录 二分查找二分查找搜索插入位置 &#xff08;Hot 100&#xff09;x 的平方根搜索二维矩阵&#xff08;Hot 100&#xff09;在排序数组中查找元素的第一个和最后一个位置 &#xff08;Hot 100&#xff09;搜索旋转排序数组 &#xff08;Hot 100&#xff09;寻找旋转排序…

【Ubuntu】minicom安装、配置、使用以及退出

目录 1 安装 2 配置 3 使用 4 退出 minicom是一个串口通信的工具&#xff0c;以root权限登录系统&#xff0c;可用来与串口设备通信。 1 安装 sudo apt-get install minicom 2 配置 使用如下命令进入配置界面&#xff1a; sudo minicon -s 进入配置界面后&#xff0c;…

【STM32】 TCP/IP通信协议--LwIP介绍

一、前言 TCP/IP是干啥的&#xff1f;它跟SPI、IIC、CAN有什么区别&#xff1f;它如何实现stm32的通讯&#xff1f;如何去配置&#xff1f;为了搞懂这些问题&#xff0c;查询资料可解决如下疑问&#xff1a; 1.为什么要用以太网通信? 以太网(Ethernet) 是指遵守 IEEE 802.3 …

OCR Fusion: EasyOCR/Tesseract/PaddleOCR/TrOCR/GOT

文章目录 前言一、基类 OCRExecutorBase二、EasyOCR1.安装2.模型下载3.DEMO 三、Tesseract1.安装2.使用问题3.DEMO 四、PaddleOCR1.安装2.DEMO 五、PaddleOCR&#xff08;PyTorch移植版&#xff09;1.代码整理2.DEMO 六、TrOCR1.安装2.模型下载3.DEMO 七、GOT1.安装2.模型下载3…

TCP\IP标准与OSI标准

TCP/IP 模型和 OSI 模型都是用于描述网络体系结构的模型&#xff0c;但它们的设计理念和层次结构有所不同。TCP/IP 模型更注重实际实现&#xff0c;而 OSI 模型更注重抽象和标准化。 1. OSI 模型 (Open Systems Interconnection Model) OSI 模型是一个七层模型&#xff0c;从…

UFS 3.1架构简介

整个UFS协议栈可以分为三层:应用层(UFS Application Layer(UAP)),传输层(UFS Transport Layer(UTP)),链路层(UIC InterConnect Layer(UIC))。应用层发出SCSI命令(UFS没有自己的命令使用的是简化的SCSI命令),在传输层将SCSI分装为UPIU,再经过链路层将命令发送给Devices。下…