当前位置: 首页 > news >正文

Spring Boot 整合 JPA 实现数据持久化

目录

前言

一、JPA 核心概念与实体映射

1. 什么是 JPA?

2. JPA 的主要组件

3. 实体映射

4. 常见的字段映射策略

二、Repository 接口与自定义查询

1. 什么是 Repository 接口?

2. 动态查询方法

3. 自定义查询

4. 分页与排序

三、实战案例:完整数据持久化示例

1. 创建一个简单的用户管理系统

2. 测试接口


前言

在现代企业级应用开发中,数据持久化是不可或缺的一部分。Spring Boot 提供了对 JPA(Java Persistence API)的强大支持,使得数据库操作变得更加简单和高效。本文将从以下几个方面详细讲解如何在 Spring Boot 中整合 JPA 实现数据持久化:

  1. JPA 核心概念与实体映射
  2. Repository 接口与自定义查询

通过本文的学习,你将能够掌握 Spring Boot 中 JPA 的基本使用方法,并能够根据实际需求进行灵活的扩展。


一、JPA 核心概念与实体映射

1. 什么是 JPA?

JPA(Java Persistence API)是 Java EE 平台中用于对象关系映射(ORM)的标准 API。它允许开发者通过 Java 类来表示数据库中的表,并通过 JPA 提供的接口和注解来执行 CRUD(增删改查)操作。

2. JPA 的主要组件
  • EntityManager:负责管理实体对象的生命周期,并提供 CRUD 操作的方法。
  • Persistence Unit:一组相关的实体类和配置信息的集合。
  • Entity:表示数据库表的 Java 类。
3. 实体映射

在 JPA 中,实体类通过注解来映射到数据库表。以下是常用的注解:

  • @Entity:标识这是一个实体类。
  • @Table:指定实体类对应的数据库表名。
  • @Id:标识实体类的主键字段。
  • @GeneratedValue:指定主键的生成策略。
  • @Column:指定字段对应的数据库列名、长度等属性。

示例代码:

import jakarta.persistence.*; @Entity 
@Table(name = "users")
public class User {@Id @GeneratedValue(strategy = GenerationType.IDENTITY)private Long id;@Column(name = "username", length = 50, nullable = false)private String username;@Column(name = "email", unique = true)private String email;// Getter and Setter methods 
}
4. 常见的字段映射策略
  • 基本类型映射:如 StringIntegerLong 等。
  • 关联关系映射
    • 一对一(OneToOne):通过 @OneToOne 注解实现。
    • 一对多(OneToMany):通过 @OneToMany 注解实现。
    • 多对一(ManyToOne):通过 @ManyToOne 注解实现。
    • 多对多(ManyToMany):通过 @ManyToMany 注解实现。

示例代码(一对多关系):

import jakarta.persistence.*; @Entity 
@Table(name = "posts")
public class Post {@Id @GeneratedValue(strategy = GenerationType.IDENTITY)private Long id;@Column(name = "title", nullable = false)private String title;@Column(name = "content")private String content;@ManyToOne @JoinColumn(name = "user_id")private User user;// Getter and Setter methods 
}

二、Repository 接口与自定义查询

1. 什么是 Repository 接口?

Spring Data JPA 提供了一个 Repository 接口,用于简化数据访问层的开发。通过继承 JpaRepositoryCrudRepository,我们可以快速获得 CRUD 操作的能力。

示例代码:

import org.springframework.data.jpa.repository.JpaRepository; 
import org.springframework.stereotype.Repository; @Repository 
public interface UserRepository extends JpaRepository<User, Long> {
}

  • JpaRepository:继承了 CrudRepository PagingAndSortingRepository,提供了基本的 CRUD 操作和分页支持。
  • UserRepository:定义了一个针对 User 实体的仓库接口。
2. 动态查询方法

Spring Data JPA 支持通过方法名动态生成查询语句。例如:

public interface UserRepository extends JpaRepository<User, Long> {List<User> findByUsername(String username);List<User> findByEmailContaining(String keyword);List<User> findByUsernameAndEmail(String username, String email);
}

  • findByUsername:根据用户名查询用户。
  • findByEmailContaining:根据邮箱包含关键字查询用户。
  • findByUsernameAndEmail:根据用户名和邮箱联合查询用户。
3. 自定义查询

对于复杂的查询需求,可以通过 @Query 注解来自定义 JPQL(Java Persistence Query Language)或原生 SQL 查询。

示例代码:

import org.springframework.data.jpa.repository.JpaRepository; 
import org.springframework.data.jpa.repository.Query; 
import org.springframework.data.repository.query.Param; 
import org.springframework.stereotype.Repository; import java.util.List; @Repository 
public interface UserRepository extends JpaRepository<User, Long> {@Query("SELECT u FROM User u WHERE u.username  LIKE %:keyword%")List<User> findByUsernameLike(@Param("keyword") String keyword);@Query(value = "SELECT * FROM users WHERE email LIKE %?1%", nativeQuery = true)List<User> findByEmailLike(String keyword);
}
  • findByUsernameLike:使用 JPQL 查询用户名包含关键字的用户。
  • findByEmailLike:使用原生 SQL 查询邮箱包含关键字的用户。
4. 分页与排序

Spring Data JPA 提供了 Pageable 接口来支持分页和排序。

示例代码:

import org.springframework.data.domain.Page; 
import org.springframework.data.domain.Pageable; public interface UserRepository extends JpaRepository<User, Long> {Page<User> findAll(Pageable pageable);Page<User> findByUsernameContaining(String keyword, Pageable pageable);
}

三、实战案例:完整数据持久化示例

1. 创建一个简单的用户管理系统

实体类(User.java ):

import jakarta.persistence.*; @Entity 
@Table(name = "users")
public class User {@Id @GeneratedValue(strategy = GenerationType.IDENTITY)private Long id;@Column(name = "username", length = 50, nullable = false)private String username;@Column(name = "email", unique = true)private String email;// Getter and Setter methods 
}

Repository 接口(UserRepository.java ):

import org.springframework.data.jpa.repository.JpaRepository; 
import org.springframework.data.jpa.repository.Query; 
import org.springframework.data.repository.query.Param; 
import org.springframework.stereotype.Repository; import java.util.List; @Repository 
public interface UserRepository extends JpaRepository<User, Long> {List<User> findByUsername(String username);@Query("SELECT u FROM User u WHERE u.email  LIKE %:keyword%")List<User> findByEmailLike(@Param("keyword") String keyword);
}

 Service 层(UserService.java ):

import org.springframework.beans.factory.annotation.Autowired; 
import org.springframework.stereotype.Service; import java.util.List; @Service 
public class UserService {@Autowired private UserRepository userRepository;public List<User> findAllUsers() {return userRepository.findAll(); }public User saveUser(User user) {return userRepository.save(user); }public List<User> findByUsername(String username) {return userRepository.findByUsername(username); }public List<User> findByEmailLike(String keyword) {return userRepository.findByEmailLike(keyword); }
}

Controller 层(UserController.java ):

import org.springframework.beans.factory.annotation.Autowired; 
import org.springframework.web.bind.annotation.*; import java.util.List; @RestController 
@RequestMapping("/api/users")
public class UserController {@Autowired private UserService userService;@GetMapping public List<User> getAllUsers() {return userService.findAllUsers(); }@PostMapping public User createUser(@RequestBody User user) {return userService.saveUser(user); }@GetMapping("/username/{username}")public List<User> findByUsername(@PathVariable String username) {return userService.findByUsername(username); }@GetMapping("/email/{keyword}")public List<User> findByEmailLike(@PathVariable String keyword) {return userService.findByEmailLike(keyword); }
}

2. 测试接口

启动应用后,可以通过 Postman 或 Swagger UI 测试以下接口:

  • GET http://localhost:8080/api/users:获取所有用户。
  • POST http://localhost:8080/api/users:创建新用户。
  • GET http://localhost:8080/api/users/username/{username}:根据用户名查询用户。
  • GET http://localhost:8080/api/users/email/{keyword}:根据邮箱关键字查询用户。

相关文章:

Spring Boot 整合 JPA 实现数据持久化

目录 前言 一、JPA 核心概念与实体映射 1. 什么是 JPA&#xff1f; 2. JPA 的主要组件 3. 实体映射 4. 常见的字段映射策略 二、Repository 接口与自定义查询 1. 什么是 Repository 接口&#xff1f; 2. 动态查询方法 3. 自定义查询 4. 分页与排序 三、实战案例&…...

KUKA 机器人仿真——Simpro4.1和OfficeLite8.6.2 连接实现虚拟示教器

一、准备软件 1、Simpro4.1&#xff0c;是一机一密钥&#xff0c;不好破解&#xff0c;我在某宝买的&#xff0c;省事了。 2、OfficeLite8.6.2&#xff0c;看我的博文的第三步虚拟机内安装OfficeLite8.6.2 KUKA示教器仿真软件OfficeLite8.6.2&#xff0c;EthernetKRL3.1.3通信…...

IntelliJ IDEA使用经验(十三):使用Git克隆github的开源项目

文章目录 问题背景办法1、设置git代理&#xff1b;2、再次克隆项目&#xff1b;3、再次按常规方式进行git克隆即可。 问题背景 由于github在国外&#xff0c;很多时候我们在使用idea克隆开源项目的时候&#xff0c;没办法检出&#xff0c;提示 连接重置。 办法 1、设置git代…...

互联网大厂中面试的高频计算机网络问题及详解

前言 哈喽各位小伙伴们,本期小梁给大家带来了互联网大厂中计算机网络部分的高频面试题,本文会以通俗易懂的语言以及图解形式描述,希望能给大家的面试带来一点帮助,祝大家offer拿到手软!!! 话不多说,我们立刻进入本期正题! 一、计算机网络基础部分 1 先来说说计算机网…...

综合实验练习实验报告

一、需求分析 1.防火墙上配置DHCP服务&#xff0c;完成接口配置 2.用户建立以及认证策略建立 3.安全策略建立 二、详细配置 DHCP配置 [FW1]dhcp enable [FW1]int g1/0/1.1 [FW1-GigabitEthernet1/0/1.1]dhcp select interface [FW1]int g1/0/1.2 [FW1-GigabitEthernet…...

Ubuntu22.04 配置deepseek知识库

文章目录 安装 docker配置 dify配置 ollama创建大模型 安装 docker 更新系统&#xff1a;sudo apt update sudo apt upgrade -y安装必要的依赖&#xff1a;sudo apt install apt-transport-https ca-certificates curl software-properties-common -y添加 Docker 的官方 GPG 密…...

如何在WPS和Word/Excel中直接使用DeepSeek功能

以下是将DeepSeek功能集成到WPS中的详细步骤&#xff0c;无需本地部署模型&#xff0c;直接通过官网连接使用&#xff1a;1. 下载并安装OfficeAI插件 &#xff08;1&#xff09;访问OfficeAI插件下载地址&#xff1a;OfficeAI助手 - 免费办公智能AI助手, AI写作&#xff0c;下载…...

Mp4视频播放机无法播放视频-批量修改视频分辨率(帧宽、帧高)

背景 家人有一台夏新多功能 视频播放器(夏新多功能 视频播放器),用来播放广场舞。下载了一些广场舞视频, 只有部分视频可以播放,其他视频均无法播放,判断应该不是帧速率和数据速率的限制, 分析可能是播放器不支持帧高度大于720的视频。由于视频文件较多,需要借助视频编…...

jvm 线程监控调试

文章目录 前言一、使用JDK工具转储线程文件(如jstack)1. 找到Java进程的PID:2. 使用jstack生成线程转储文件:3.验证生成的线程转储文件:二、分析文件1.使用在线工具进行分析上传thread-dump文件,等待解析完成2.查看分析结果总结前言 提示:使用jdk自带工具转储线程监控文…...

超越 DeepSeek V3 -->【Qwen2.5-Max】

&#x1f525; 先说明&#xff0c;不是广子&#xff0c;不是广子&#xff01;&#xff01;&#xff01;单纯分享这个工具给大家&#xff0c;毕竟最近使用 DeepSeek 太容易崩了&#xff0c;每天深度思考一次之后就开始转圈圈用不了&#xff0c;然后就找到了这个工具使用 一、前言…...

301.华为交换机堆叠技术基础

华为交换机堆叠技术基础 一、概念及原理部分1.堆叠简介1.1 什么是堆叠1.2 可靠性网络架构1.3 华为堆叠设备1.4 其他厂商的堆叠2.堆叠的示意图3.堆叠的应用3.1 中小企业3.2 园区网4.堆叠的原理4.1基本的概念4.2 堆叠建立4.3 角色选举4.4 版本同步4.5 配置同步4.6 堆叠系统的登录…...

【开源AI】AI一页一页读PDF

【开源AI】AI一页一页读PDF 可以在这里看 : 让AI 处理 PDF 文件,提取其中的知识点,并生成总结。 只是无法修改,后续若有更新在csdn这里。 【OpenAI】 API 更新: JSON 结构化输出约束机制( JSON Schema) 的一次实战。知识库的JSON Schema形式 每一页都要总结,总结的知识…...

Spring AI 介绍

文章来源&#xff1a;AI 概念 (AI Concepts) _ Spring AI1.0.0-SNAPSHOT中文文档(官方文档中文翻译)|Spring 教程 —— CADN开发者文档中心 本节介绍 Spring AI 使用的核心概念。我们建议仔细阅读它&#xff0c;以了解 Spring AI 是如何实现的。 模型 AI 模型是旨在处理和生成…...

React - 事件绑定this

在 React 中&#xff0c;this 的绑定是一个常见问题&#xff0c;尤其在类组件中使用事件处理函数时。JavaScript 中的 bind 函数用于设置函数调用时 this 的值。 bind 函数的作用 bind() 方法创建一个新的函数&#xff0c;当被调用时&#xff0c;其 this 关键字被设置为提供的…...

【3.Git与Github的历史和区别】

目录 Git的历史和Github的区别本质和功能 Git的历史和Github的区别 Git是由Linux内核的创造者Linus Torvalds于2005年创建的。当时&#xff0c;Linux内核开源项目使用BitKeeper作为版本控制系统&#xff0c;但2005年BitKeeper的商业公司终止了与Linux社区的合作&#xff0c;收…...

【设计模式】【行为型模式】职责链模式(Chain of Responsibility)

&#x1f44b;hi&#xff0c;我不是一名外包公司的员工&#xff0c;也不会偷吃茶水间的零食&#xff0c;我的梦想是能写高端CRUD &#x1f525; 2025本人正在沉淀中… 博客更新速度 &#x1f4eb; 欢迎V&#xff1a; flzjcsg2&#xff0c;我们共同讨论Java深渊的奥秘 &#x1f…...

【算法学习】二分查找开区间写法总结

根据灵神教学中的二分查找开区间写法进行如下总结&#xff1a; 我们需要注意的是&#xff0c;lowerBound 模板求解的是 > target 的最小下标 private int lowerBound(int[] nums, int target) {int left -1;int right nums.length; // 开区间 (left, right)while (left …...

信息科技伦理与道德3-2:智能决策

2.2 智能推荐 推荐算法介绍 推荐系统&#xff1a;猜你喜欢 https://blog.csdn.net/search_129_hr/article/details/120468187 推荐系统–矩阵分解 https://blog.csdn.net/search_129_hr/article/details/121598087 案例一&#xff1a;YouTube推荐算法向儿童推荐不适宜视频 …...

【干活分享】2025年可以免费问答的一些GPT网站-deepseek等免费gpt

2025年已经到来&#xff0c;大家也都陆续回归到忙碌的工作中。在新的一年里&#xff0c;如何更高效地完成工作任务&#xff0c;提升工作效率&#xff0c;是很多人关心的问题。今天&#xff0c;就为大家分享一些实用性很强的GPT网站&#xff0c;帮助大家在工作中事半功倍。 Dee…...

webpack配置之---入口

entry 单入口 由于一般的单页面项目只有一个入口&#xff0c;也就是单入口&#xff0c;单入口的配置方式有以下三种方式&#xff0c;如果有遗漏的欢迎补充 1、字符串方式 以下这几行代码解释&#xff1a; entry&#xff1a;本项目的入口文件 output&#xff1a;本项目打包…...

Golang GORM系列:GORM CRUM操作实战

在数据库管理中&#xff0c;CRUD操作是应用程序的主干&#xff0c;支持数据的创建、检索、更新和删除。强大的Go对象关系映射库GORM通过抽象SQL语句的复杂性&#xff0c;使这些操作变得轻而易举。本文是掌握使用GORM进行CRUD操作的全面指南&#xff0c;提供了在Go应用程序中有效…...

[M模拟] lc380. O(1) 时间插入、删除和获取随机元素(模拟+数据结构+脑筋急转弯+数组快捷删除技巧+项目思考)

文章目录 1. 题目来源2. 题目解析 1. 题目来源 链接&#xff1a;380. O(1) 时间插入、删除和获取随机元素 题单&#xff1a; 待补充 2. 题目解析 其实这个题目抽象一下的话在项目中也能出现&#xff0c;可能日常项目中没有算法基础的话&#xff0c;就很容易直接去进行新内…...

30~32.ppt

目录 30.导游小姚-介绍首都北京❗ 题目​ 解析 31.小张-旅游产品推广文章 题目 解析 32.小李-水的知识❗ 题目​ 解析 30.导游小姚-介绍首都北京❗ 题目 解析 新建幻灯片-从大纲-重置-检查设计→主题对话框→浏览主题&#xff1a;考生文件夹&#xff08;注意&#x…...

一键查看电脑各硬件详细信息 轻松查看电脑硬件参数

今天为大家推荐两款非常实用的电脑硬件查看软件&#xff0c;它们能够一键快速查看电脑的各种配置信息&#xff0c;使用起来非常方便。 一键查看电脑各硬件详细信息 这款软件是绿色版的&#xff0c;无需安装&#xff0c;打开即可使用&#xff0c;文件大小仅为900多KB&#xff0…...

java如何创建自定义异常?

在Java中&#xff0c;创建自定义异常通常需要继承Exception类或其子类。以下是创建自定义异常的基本步骤&#xff1a; 定义异常类&#xff1a;创建一个新的类&#xff0c;继承自Exception或RuntimeException&#xff08;根据需要选择&#xff09;。 构造方法&#xff1a;提供一…...

2025/2/10 心得

第一题。J. C - Grand Garden (AI) 问题陈述 在一个花坛里&#xff0c;有 NN 朵花&#xff0c;编号为 1,2,\ldots,N1,2,…,N。最初&#xff0c;所有花的高度都是 00。你将得到一个高度序列 h{h\_1,h\_2,h\_3,\ldots\} 作为输入。你希望通过重复以下“浇水”操作来将所有花的编…...

Visual Studio 2022 中使用 Google Test

要在 Visual Studio 2022 中使用 Google Test (gtest)&#xff0c;可以按照以下步骤进行&#xff1a; 安装 Google Test&#xff1a;确保你已经安装了 Google Test。如果没有安装&#xff0c;可以通过 Visual Studio Installer 安装。在安装程序中&#xff0c;找到并选择 Googl…...

软开关和硬开关

硬开关&#xff1a; 电路结构相对简单&#xff0c;一般只包含基本的开关管、电源、负载等元件&#xff0c;没有专门的谐振电路来辅助开关过程。 开关管在导通或关断时&#xff0c;电压或电流的变化率非常快&#xff0c;形成急剧的开关过程。开通时&#xff0c;开关器件的电流…...

C++17中的std::clamp:限制值的范围

文章目录 一、背景与动机二、std::clamp的定义三、使用示例示例1&#xff1a;基本用法示例2&#xff1a;浮点数和自定义类型 四、实际应用场景1. 游戏开发2. 图形处理3. 数值计算 五、注意事项六、总结 在C17中&#xff0c; std::clamp是一个极为实用的算法&#xff0c;它能够…...

Python的

& 运算符可用于不同集合类型&#xff0c;它主要用于集合的交集操作 下面分别介绍它在 set&#xff08;集合&#xff09;和 frozenset&#xff08;不可变集合&#xff09;这两种常见集合类型中的使用 set 类型 set 是 Python 中内置的可变集合类型&#xff0c;使用 & …...

计算机毕业设计Spark+大模型知网文献论文推荐系统 知识图谱 知网爬虫 知网数据分析 知网大数据 知网可视化 预测系统 大数据毕业设计 机器学习

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 作者简介&#xff1a;Java领…...

13.8 聚焦应用场景的Prompt设计实战:从通用到领域专用的翻译质量跃升

聚焦应用场景的Prompt设计实战:从通用到领域专用的翻译质量跃升 关键词:领域特定Prompt设计、翻译质量优化、动态术语控制、多阶段推理链、Prompt版本管理 1. 翻译Prompt设计核心原则 1.1 领域知识深度渗透 def build_medical_prompt(): return ChatPromptTemplate.from_…...

基础入门-HTTP数据包红蓝队研判自定义构造请求方法请求头修改状态码判断

知识点&#xff1a; 1、请求头&返回包-方法&头修改&状态码等 2、数据包分析-红队攻击工具&蓝队流量研判 3、数据包构造-Reqable自定义添加修改请求 一、演示案例-请求头&返回包-方法&头修改&状态码等 数据包 客户端请求Request 请求方法 …...

Golang Web单体项目目录结构最佳实践

在Golang 开发Web 项目的过程中&#xff0c;如何组织目录结构是一项至关重要的任务。合理的目录结构不仅能提高代码的可维护性&#xff0c;还能为团队协作提供清晰的代码规范。 为什么要设计合理的目录结构&#xff1f; 在 Golang 项目中&#xff0c;代码的组织方式会影响开发…...

【系统架构设计师】体系结构文档化

目录 1. 说明2. 重要性3. 主要内容4. 编写原则5. 实践建议6. 例题6.1 例题1 1. 说明 1.绝大多数的体系结构都是抽象的&#xff0c;由一些概念上的构建组成。2.层的概念在任何程序设计语言中都不存在。3.要让系统分析员和程序员去实现体系结构&#xff0c;还必须将体系结构进行…...

C++性能优化—AI润色版

上接《C性能优化—人工底稿版》 C性能优化深度解析&#xff1a;从编码技巧到硬件协同 "过早优化是万恶之源" —— Donald Knuth 但合理的性能优化是优秀C工程师的核心能力。本文从编码实践到硬件原理&#xff0c;系统梳理C性能优化的知识体系。 一、性能优化的哲学…...

继承(python)

一、基础知识 &#xff08;一&#xff09;定义&#xff1a;子类能继承父类所有的公有属性和公有方法&#xff08;先使用子类的方法、属性&#xff09; &#xff08;二&#xff09;格式&#xff1a; class 子类名&#xff08;父类名&#xff09;&#xff1a; #父类 class Ph…...

jmap使用

常用命令 jmap -heap PID jmap -histo PID | head -20 jmap -dump:formatb,fileheap_dump.hprof PID jmap 是 Java 开发工具包&#xff08;JDK&#xff09;提供的一个命令行工具&#xff0c;用于生成 Java 进程的内存映射信息。它可以帮助开发者分析 Java 堆内存的使用情况…...

Android的MQTT客户端实现

在 Android 平台上实现 MQTT 客户端的完整技术方案&#xff0c;涵盖基础实现、安全连接、性能优化和最佳实践&#xff1a; 一、技术选型与依赖配置 推荐库 Eclipse Paho Android Service&#xff08;官方维护&#xff0c;支持后台运行&#xff09; gradle 复制 // build.gradl…...

Vue.js 如何自定义主题和样式

Vue.js 如何自定义主题和样式 今天我们来聊聊如何在 Vue 项目中自定义主题和样式。无论是你想让自己的应用看起来独一无二&#xff0c;还是想快速适配设计稿&#xff0c;自定义主题和样式都是必不可少的一环。下面我将和大家分享几种常见的自定义方法和技巧。 为什么要自定义…...

强化学习 DPO 算法:基于人类偏好,颠覆 PPO 传统策略

目录 一、引言二、强化学习基础回顾&#xff08;一&#xff09;策略&#xff08;二&#xff09;价值函数 三、近端策略优化&#xff08;PPO&#xff09;算法&#xff08;一&#xff09;算法原理&#xff08;二&#xff09;PPO 目标函数&#xff08;三&#xff09;代码示例&…...

线上HBase client返回超时异常分析 HBase callTimeout=60000

问题现象 HBase client直接返回超时异常 HBase callTimeout=60000, callDuration=60301: row ‘12649160863966c2790195059018040900010003320’ on table ‘Z_UPA’ at region=Z_UPA,1213d1a56,1184027415643. ba7224f83dbb09591a74b7059f17., hostname=abcd,60020,891863950…...

CTF中特别小的EXE是怎么生成的

我们在打CTF时候&#xff0c;出题的爷爷们给出的exe都很小 就10k左右&#xff0c;有的甚至就5k&#xff0c;那时候我很郁闷啊。现在我也能了啊哈哈 不多bb按如下操作&#xff1a; 我们来看看正常的release生成的代码# Copy #include "windows.h" int main(){ Messa…...

Python 字典(一个简单的字典)

在本章中&#xff0c;你将学习能够将相关信息关联起来的Python字典。你将学习如何访问和修改字典中的信息。鉴于字典可存储的信息量几乎不受限制&#xff0c;因此我们会演示如何遍 历字典中的数据。另外&#xff0c;你还将学习存储字典的列表、存储列表的字典和存储字典的字典。…...

爬虫技巧汇总

一、UA大列表 USER_AGENT_LIST 是一个包含多个用户代理字符串的列表&#xff0c;用于模拟不同浏览器和设备的请求。以下是一些常见的用户代理字符串&#xff1a; USER_AGENT_LIST [Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; Hot Lingo 2.0),Mozilla…...

SCT2A15一款5.5V-100V 1.8A峰值电流限制 高效率非同步降压DCDC转换器,SOT23-6L封装

SCT2A15是一款异步降压转换器&#xff0c;输入电压范围从5.5V到100V&#xff0c;可适应各种降压应用&#xff0c;是汽车、工业和照明应用的理想选择。 SCT2A15集成了975mΩ高侧MOSFET&#xff0c;峰值输出电流在Vin<60V时限制为1.8A&#xff0c;可支持高峰值电流的应用。 SC…...

数据结构——二叉树

好&#xff0c;上一篇我们已经讲过了堆&#xff0c;也已经了解了二叉树的基础知识后&#xff0c;我们今天来实现二叉树的相关代码。 由于初始二叉树&#xff0c;由于现在对二叉树结构掌握还不够深入&#xff0c;为了降低学习成本&#xff0c;此处我们来手动快速创建一棵简单的二…...

六、 通用异步收发器UART

6.1 UART简介 UART&#xff08;Universal Asynchronous Receiver/Transmitter&#xff0c;通用异步收发传输器&#xff09;是一种用于异步串行通信的硬件设备。它通过两根信号线&#xff08;TX 和 RX&#xff09;实现全双工通信&#xff0c;广泛应用于微控制器、计算机和外设之…...

基于Kotlin中Flow扩展重试方法

最近项目中统一采用Kotlin的Flow来重构了网络请求相关代码。 目前的场景是&#xff0c;接口在请求的时候需要一个accessToken值&#xff0c;因为此值会过期或者不存在&#xff0c;需要刷新&#xff0c;因此最终方案是在使用Flow请求的时候先获取accessToken值然后再进行接口请求…...

在 Open WebUI+Ollama 上运行 DeepSeek-R1-70B 实现调用

在 Open WebUI Ollama 上运行 DeepSeek-R1-70B 实现调用 您可以使用 Open WebUI 结合 Ollama 来运行 DeepSeek-R1-70B 模型&#xff0c;并通过 Web 界面进行交互。以下是完整的部署步骤。 1. 安装 Ollama Ollama 是一个本地化的大模型管理工具&#xff0c;它可以在本地运行 …...