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

8.Rust+Axum 数据库集成实战:从 ORM 选型到用户管理系统开发

摘要

深入探讨 Rust+Axum 数据库集成,包括 ORM 选型及实践,助力用户管理系统开发。

一、引言

在现代 Web 应用开发中,数据库集成是至关重要的一环。Rust 凭借其高性能、内存安全等特性,与 Axum 这个轻量级且高效的 Web 框架结合,能为开发者打造出优秀的后端服务。而在数据库操作方面,合理选择 ORM(对象关系映射)工具并进行正确配置,对于提升开发效率和代码质量有着显著作用。本文将详细介绍 Rust+Axum 中数据库集成的相关内容,包括 ORM 选型、异步连接池配置、事务管理与连接生命周期,最后通过用户管理系统的 CRUD 开发实践来加深理解。

二、ORM 选型:SQLx 与 SeaORM

2.1 SQLx

SQLx 是一个基于 Rust 的异步 SQL 工具包,它并非传统意义上的 ORM,而是更侧重于类型安全的 SQL 查询。其优势在于能直接执行 SQL 语句,减少了抽象层带来的性能损耗,并且对多种数据库有良好的支持,如 PostgreSQL、MySQL、SQLite 等。例如,在项目中使用 SQLx 可以直接编写 SQL 查询语句,编译器会对其进行类型检查,确保查询的正确性。

2.2 SeaORM

SeaORM 是一个功能齐全的 Rust ORM,它提供了类似于其他编程语言中 ORM 的丰富功能,如实体映射、查询构建器等。SeaORM 具有良好的抽象性,能让开发者以面向对象的方式操作数据库,减少 SQL 语句的编写量,提高开发效率。它同样支持多种数据库,适用于不同规模的项目。

2.3 选型建议

如果项目对性能要求极高,且开发者熟悉 SQL 语句,希望直接操作数据库,那么 SQLx 是一个不错的选择。而如果项目规模较大,需要更高级的抽象和便捷的数据库操作方式,SeaORM 则更合适。

三、异步连接池配置

3.1 SQLx 异步连接池配置

以下是使用 SQLx 配置 PostgreSQL 异步连接池的示例代码:

use sqlx::postgres::{PgPool, PgPoolOptions};#[tokio::main]
async fn main() -> Result<(), sqlx::Error> {let database_url = "postgres://user:password@localhost:5432/mydb";let pool = PgPoolOptions::new().max_connections(5).connect(database_url).await?;// 使用连接池进行数据库操作Ok(())
}

在上述代码中,我们使用 PgPoolOptions 来配置连接池的最大连接数,并通过 connect 方法连接到 PostgreSQL 数据库。

3.2 SeaORM 异步连接池配置

以下是使用 SeaORM 配置 MySQL 异步连接池的示例代码:

use sea_orm::{Database, DatabaseConnection};#[tokio::main]
async fn main() -> Result<(), sea_orm::DbErr> {let database_url = "mysql://user:password@localhost:3306/mydb";let conn: DatabaseConnection = Database::connect(database_url).await?;// 使用连接进行数据库操作Ok(())
}

在这个示例中,我们使用 Database::connect 方法连接到 MySQL 数据库,SeaORM 会自动管理连接池。

四、事务管理与连接生命周期

4.1 事务管理

事务是数据库操作中保证数据一致性的重要机制。在 SQLx 中,可以通过以下方式实现事务管理:

use sqlx::{Transaction, postgres::PgPool};async fn perform_transaction(pool: &PgPool) -> Result<(), sqlx::Error> {let mut tx: Transaction<'_, sqlx::Postgres> = pool.begin().await?;// 执行一系列数据库操作sqlx::query("INSERT INTO users (name, email) VALUES ($1, $2)").bind("John Doe").bind("johndoe@example.com").execute(&mut tx).await?;// 提交事务tx.commit().await?;Ok(())
}

在 SeaORM 中,事务管理类似:

use sea_orm::{TransactionTrait, DatabaseConnection};async fn perform_transaction(conn: &DatabaseConnection) -> Result<(), sea_orm::DbErr> {let tx = conn.begin().await?;// 执行数据库操作// ...tx.commit().await?;Ok(())
}

4.2 连接生命周期

连接池会管理连接的生命周期,确保连接的复用和有效释放。在使用连接池时,开发者无需手动管理连接的打开和关闭,只需从连接池中获取连接进行操作即可。当操作完成后,连接会自动返回连接池,等待下一次使用。

五、实践:用户管理系统 CRUD 开发

5.1 项目初始化

首先,创建一个新的 Rust 项目,并添加 Axum、SQLx 或 SeaORM 等依赖:

[dependencies]
axum = "0.6"
sqlx = { version = "0.6", features = ["postgres", "runtime-tokio-native-tls"] }
tokio = { version = "1", features = ["full"] }

5.2 定义数据模型

以 SQLx 为例,定义用户表的模型:

use sqlx::FromRow;#[derive(Debug, FromRow)]
struct User {id: i32,name: String,email: String,
}

5.3 实现 CRUD 操作

以下是使用 Axum 和 SQLx 实现用户管理系统 CRUD 操作的示例代码:

use axum::{routing::{get, post, put, delete},Router,extract::{Path, State},Json,
};
use sqlx::postgres::PgPool;
use serde::{Deserialize, Serialize};#[derive(Debug, Serialize, Deserialize)]
struct CreateUser {name: String,email: String,
}async fn create_user(State(pool): State<PgPool>,Json(user): Json<CreateUser>,
) -> Result<Json<User>, sqlx::Error> {let new_user = sqlx::query_as!(User,"INSERT INTO users (name, email) VALUES ($1, $2) RETURNING id, name, email",user.name,user.email).fetch_one(&pool).await?;Ok(Json(new_user))
}// 实现其他 CRUD 操作,如获取用户、更新用户、删除用户等#[tokio::main]
async fn main() {let database_url = "postgres://user:password@localhost:5432/mydb";let pool = PgPool::connect(database_url).await.unwrap();let app = Router::new().route("/users", post(create_user));axum::Server::bind(&"127.0.0.1:3000".parse().unwrap()).serve(app.into_make_service()).await.unwrap();
}

六、总结

通过本文的介绍,我们了解了 Rust+Axum 中数据库集成的相关知识,包括 ORM 选型、异步连接池配置、事务管理与连接生命周期,以及用户管理系统的 CRUD 开发实践。合理选择 ORM 工具并正确配置数据库连接池,能为开发高性能、稳定的 Web 应用奠定坚实基础。在实际项目中,开发者可以根据项目需求和自身技术栈来选择合适的方案。

相关文章:

8.Rust+Axum 数据库集成实战:从 ORM 选型到用户管理系统开发

摘要 深入探讨 RustAxum 数据库集成&#xff0c;包括 ORM 选型及实践&#xff0c;助力用户管理系统开发。 一、引言 在现代 Web 应用开发中&#xff0c;数据库集成是至关重要的一环。Rust 凭借其高性能、内存安全等特性&#xff0c;与 Axum 这个轻量级且高效的 Web 框架结合…...

题解:CF886E Maximum Element

正难则反&#xff0c;考虑长度为 i i i 的排列得到正确的结果的方案数。 设 d p i dp_i dpi​ 表示长度为 i i i 的排列直到循环完也没有提前 return 的方案数。考虑 i i i 所放置的位置&#xff0c;由于不会提前 return&#xff0c;也就说明该数字所在的位置为 [ i − k…...

OPC Client第3讲(wxwidgets):wxFormBuilder;基础框架;事件处理

wxwidgets开源桌面软件框架使用 - 哔哩哔哩 wxwidgets跨平台GUI框架使用入门详解_哔哩哔哩_bilibili 一、wxwidgets配置【见上一讲五、】 二、安装wxFormBuilder 1、wxFormBuilder介绍、安装 wxFormBuilder是一个开源的GUI设计工具&#xff0c;支持C、Python等语言&#…...

20250418项目接入scalar

scalar官网地址 scalar-dotnet文档地址 1. 引入nuget包 这里必须是2.1.* 以上 否则不支持多库 <PackageReference Include"Scalar.AspNetCore" Version"2.1.16" />2. 引入命名空间 using Scalar.AspNetCore;3. 使用scalar var documents new[] {…...

数控铣床自动上下料机械手控制装置设计

一、引言 在数控铣床加工过程中&#xff0c;实现自动上下料能够提高生产效率、降低劳动强度、减少人为因素对加工质量的影响。设计一款高效、可靠的数控铣床自动上下料机械手控制装置&#xff0c;是实现数控铣床自动化加工的关键。 二、控制装置设计要求 自动化程度&#xf…...

STM32F407的引脚说明

当笔记站 引脚说明在STM32F407数据手册中的48页到71页&#xff0c;下载地址&#xff1a; https://www.stmcu.com.cn/Designresource/detail/document/696193?auto_download1 以下是在图片转表格得到的东西 Pinouts and pin description …...

STM32单片机入门学习——第41节: [12-1] Unix时间戳

写这个文章是用来学习的,记录一下我的学习过程。希望我能一直坚持下去,我只是一个小白,只是想好好学习,我知道这会很难&#xff0c;但我还是想去做&#xff01; 本文写于&#xff1a;2025.04.18 STM32开发板学习——第41节: [12-1] Unix时间戳 前言开发板说明引用解答和科普一…...

使用Pydantic优雅处理几何数据结构 - 前端输入验证实践

使用Pydantic优雅处理几何数据结构 - 前端输入验证实践 一、应用场景解析 在视频分析类项目中&#xff0c;前端常需要传递几何坐标数据。例如智能安防系统中&#xff0c;需要接收&#xff1a; 视频流地址&#xff08;rtsp_video&#xff09;检测区域坐标点&#xff08;point…...

【Hot100】41. 缺失的第一个正数

目录 引言缺失的第一个正数初始理解问题方法一分析&#xff1a;排序后遍历方法二分析&#xff1a;辅助数组寻找满足条件的解法代码实现验证例子复杂度分析 &#x1f64b;‍♂️ 作者&#xff1a;海码007&#x1f4dc; 专栏&#xff1a;算法专栏&#x1f4a5; 标题&#xff1a;【…...

FairMOT算法详解

FairMOT(Fairness in Detection and Re-Identification for Multi-Object Tracking)是一种基于联合学习(Joint Learning)的多目标跟踪(MOT)算法,由中科院自动化所团队提出。其核心思想是通过单阶段网络同时完成目标检测和重识别(Re-ID)特征提取,解决了传统两阶段方法…...

java线程池原理及使用和处理流程

实际测试使用如下&#xff1a; package com.study;import java.util.concurrent.*;/*** 线程池作用&#xff1a;* 1、线程的复用* 2、资源管理* 3、任务调度* --------------执行过程--------------* 第1-3个任务进来时&#xff0c;直接创建任务并执行* 第4-8个任务进来时&…...

奖学金排序问题

#include <bits/stdc.h> using namespace std;const int N 305; // 定义最大学生人数为305// 定义学生结构体&#xff0c;包含语文、数学、英语成绩、总分以及学生编号 struct node {int yuwen; // 语文成绩int mat_h; // 数学成绩int english; // 英语成绩i…...

useMemo + memo + useContext 性能优化实战:从无感重渲染到丝滑体验

在 Vue 中我们可能依赖 Vuex computed 进行状态共享和性能优化&#xff0c;而在 React 里呢&#xff1f;不需要用 Redux&#xff0c;靠 useContext、memo、useMemo 三剑客就能构建高性能组件通信方案&#xff01; &#x1f9e9; useContext 再回顾&#xff1a;状态共享不等于性…...

集合框架--Set集合详解

set集合 set 系列集合特点&#xff1a; 无序&#xff1a;存或取的元素的顺序可能是一致的&#xff0c;也可能不是 不重复&#xff1a;集合中不能存储重复的元素&#xff0c;我们可以利用这个特性去重 无索引&#xff1a;我们不可以通过索引获得set中的每一个元素 Set接口没…...

git -- 对远程仓库的操作 -- 查看,添加(与clone对比),抓取和拉取,推送(注意点,抓取更新+合并的三种方法,解决冲突,对比),移除

目录 对远程仓库的操作 介绍 查看 (git remote) 介绍 查看详细信息 添加(git remote add) 介绍 与 git clone对比 从远程仓库中抓取与拉取 抓取(git fetch) 拉取(git pull) 推送(git push) 介绍 注意 抓取更新合并的方法 git fetch git merge 解决冲突 git …...

Hadoop的三大结构及其作用

Hadoop 的三大核心结构及其作用如下&#xff1a; 1. 分布式文件系统&#xff08;HDFS&#xff0c;Hadoop Distributed File System&#xff09; 作用&#xff1a; 海量数据存储&#xff1a;提供高吞吐量、高容错性的分布式存储能力&#xff0c;支持存储 TB/PB 级的大规模数据…...

Java学习笔记--多态:多态的介绍,多态的基本使用,多态的条件下成员的访问特点,多态的好处

目录 1.多态的介绍 2.多态的基本使用 ​编辑 3.多态的条件下成员的访问特点 3.1成员变量 3.2成员方法 4.多态的好处(为什么学多态) 1.问题描述: 2.多态方式和原始方式new对象的优缺点: 一.多态的介绍 1.前提:a.必须有子父类继承或者接口实现关系b.必须有方法的重写(没…...

使用Python设置Excel单元格边框

在数据驱动的业务场景中&#xff0c;自动化设置Excel单元格边框成为提升数据处理效率的关键环节。通过程序化控制边框样式&#xff0c;不仅能确保海量报表格式的统一性&#xff0c;还能通过粗细、虚实等视觉元素强化数据逻辑层次。当面对动态更新的分析报告时&#xff0c;代码驱…...

ES中常用的Query和查询作用,以及SpringBoot使用实例

ES中常用的Query和查询作用&#xff0c;以及 SpringBoot 使用实例 文章目录 ES中常用的Query和查询作用&#xff0c;以及 SpringBoot 使用实例MatchAllQueryTermQueryBoolQueryRangeQueryMatchQueryMultiMatchQueryTermsQueryPrefixQueryWildcardQueryRegexpQueryFuzzyQueryDis…...

美信监控易告警:功能强大

美信监控易是一款功能强大的运维管理软件&#xff0c;其告警功能在保障系统稳定运行方面发挥着重要作用。 一、运维行业背景 随着信息技术的快速发展&#xff0c;企业的信息化程度越来越高&#xff0c;对 IT 系统的依赖也日益增强。IT 系统的稳定运行直接关系到企业的业务正常…...

字符串系列一>最长回文子串

目录 题目&#xff1a;解析&#xff1a;代码&#xff1a; 题目&#xff1a; 链接: link 解析&#xff1a; 代码&#xff1a; class Solution {public String longestPalindrome(String s) {char[] ss s.toCharArray();int n ss.length;int begin 0;//返回结果的起始字符串…...

CAPL编程系列_02

1_CAPL 中的运算符 在CAPL&#xff08;CANoe/CANalyzer Programming Language&#xff09;中&#xff0c;运算符用于执行各种运算操作&#xff0c;类似于其他编程语言。CAPL中的运算符可以分为以下几类&#xff1a; 1. 算术运算符 算术运算符 加法运算符 - 减法运算符*乘法运…...

AI Agents系列之构建多智能体系统

&#x1f9e0; 向所有学习者致敬&#xff01; “学习不是装满一桶水&#xff0c;而是点燃一把火。” —— 叶芝 我的博客主页&#xff1a; https://lizheng.blog.csdn.net &#x1f310; 欢迎点击加入AI人工智能社区&#xff01; &#x1f680; 让我们一起努力&#xff0c;共创…...

FPGA学习——DE2-115开发板上设计波形发生器

1. 实验目的 掌握直接数字频率合成&#xff08;DDS&#xff09;技术的基本原理和应用。使用DE2-115开发板实现正弦波和方波的生成。使用SignalTap II嵌入式逻辑分析仪测试输出波形的离散数据。 2. 实验原理 DDS技术&#xff1a;通过相位累加器生成相位信息&#xff0c;结合波…...

51单片机实验二:数码管静态显示

目录 一、实验环境与实验器材 二、实验内容及实验步骤 1.单个数码管显示 2.六个数码管依次从0~F变换显示 3.proteus仿真 一、实验环境与实验器材 环境&#xff1a;Keli&#xff0c;STC-ISP烧写软件,Proteus. 器材&#xff1a;TX-1C单片机&#xff08;STC89C52RC…...

JavaScript性能优化实战指南

1. 引言 JavaScript作为现代Web开发的核心技术&#xff0c;为网页带来了丰富的交互性和动态功能。然而&#xff0c;随着Web应用日益复杂&#xff0c;JavaScript代码的性能成为影响用户体验的关键因素。性能不佳的JavaScript可能导致页面加载缓慢、交互卡顿、甚至浏览器无响应&…...

POSIX 信号量(Semaphore)

一、POSIX 信号量基础 1. 什么是信号量&#xff1f; 信号量 是一种同步机制&#xff0c;用于控制对共享资源的访问。它通过一个整数值表示可用资源的数量&#xff0c;支持两种原子操作&#xff1a; P操作&#xff08;Wait&#xff09;&#xff1a;尝试减少信号量值&#xff0…...

深度学习驱动下的字符识别:挑战与创新

一、引言 1.1 研究背景 深度学习在字符识别领域具有至关重要的地位。随着信息技术的飞速发展&#xff0c;对字符识别的准确性和效率要求越来越高。字符识别作为计算机视觉领域的一个重要研究方向&#xff0c;其主要目的是将各种形式的字符转换成计算机可识别的文本信息。近年…...

DOM TreeWalker API 详解

DOM TreeWalker API 详解 TreeWalker API 是 DOM 中一个强大但相对较少使用的功能&#xff0c;它提供了一种有效遍历文档树的方式。它比手动递归或使用简单的节点导航方法更加灵活和高效。 TreeWalker 基本概念 TreeWalker 对象可以让你按照指定的过滤条件&#xff0c;以特定…...

深度学习| Deep Snake环境配置+训练+预测评估(超全面)

前言:Deep Snake是一个比较经典结合了轮廓的深度学习分割方法,但是去实际运行Deep Snake项目的时候遇到了很多问题。这篇文章把Deep Snake从环境配置、训练到预测评估,都做了详细的教程,还补充了一些相关的知识点。 Deep Snake配置和运行 Deep Snake信息数据集COCOMask-&g…...

NHANES指标推荐:CMI

文章题目&#xff1a;Association between cardiometabolic index and biological ageing among adults: a population-based study DOI&#xff1a;10.1186/s12889-025-22053-3 中文标题&#xff1a;成年人心脏代谢指数与生物衰老之间的关系&#xff1a;一项基于人群的研究 发…...

非比较排序——计数排序

计数排序 计数排序是非比较排序 void CountSort(int *a,int n) {//找范围int mina[0],maxa[0];for(int i0;i<n;i){if(a[i]<min){mina[i];}if(a[i]>max){mina[i];}}int rangemax-min1;//创建计数用的数组int *count(int *) malloc(range* sizeof(int));//计数数组的元…...

spring cloud gateway前面是否必须要有个nginx

在 **"客户端 → Nginx (前置限流) → Spring Cloud Gateway → 微服务(Sentinel 熔断限流)"** 的架构中&#xff0c;**Spring Cloud Gateway 前面并不强制要求必须有 Nginx**&#xff0c;是否需要取决于具体场景。以下是详细分析&#xff1a; 一、必须使用 Nginx 的…...

复现SCI图像增强(Toward fast, flexible, and robust low-light image enhancement.)

运行train.py报错 > File "/home/uriky/桌面/SCI-main/SCI-main/train.py", line 105, in main > train_queue torch.utils.data.DataLoader( File "/home/uriky/anaconda3/envs/AA/lib/python3.8/site-packages/torch/utils/data/dataloader.py&q…...

Linux 进程

文章目录 1. 冯诺依曼体系结构1.1 什么是冯诺依曼体系结构1.2 为什么选择冯诺依曼结构 2. 操作系统2.1 操作系统是什么2.2 操作系统如何对硬件资源进行管理2.3 计算机的层状体系结构 3. 进程3.1 进程是什么3.2 进程的相关属性3.3 在Linux中了解进程3.3.1 查看进程3.3.2 子进程由…...

TVM计算图分割--Collage

1 背景 为满足高效部署的需要&#xff0c;整合大量优化的tensor代数库和运行时做为后端成为必要之举。现在的深度学习后端可以分为两类&#xff1a;1&#xff09;算子库(operator kernel libraries)&#xff0c;为每个DL算子单独提供高效地低阶kernel实现。这些库一般也支持算…...

Liunx知识点

1./dev&#xff1a;是系统设备文件存放位置 /home&#xff1a;是普通用户存放目录 /etc&#xff1a;大部分配置文件的存放目录 /mnt&#xff1a;挂载服务需要的目录 /tmp&#xff1a;存放临时文件 /boot&#xff1a;启动文件 /root&#xff1a;root用户存放目录 /var&am…...

全栈架构设计图

以下是针对Vue前端、服务端、管理后台及数据库的架构图和交互流程设计&#xff0c;采用分层结构和模块化设计思路&#xff1a; 一、系统整体架构图 #mermaid-svg-vAtZ3R6d5Ujm6lYT {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}…...

【SAP ME 42】SAP ME 性能改进

性能问题症状 可观察到以下症状:com.sap.me.production$SfcStartService#startSfc - 此 API 方法具有来自 RESOURCE_TYPE_RESOURCE 表的 SQL 查询的运行速度较慢。 com.sap.me.production$CreateSfcService#createSfc - 对于每个创建的车间作业控制,检查在计划标准配置中是否…...

《GPT-4.1深度解析:AI进化新标杆,如何重塑行业未来?》

一、GPT-4.1:AI 领域的 “全能战士” 降临 1.1 发布背景与战略意义 在 OpenAI 的技术迭代版图中,GPT-4.1 被赋予了 “承前启后” 的关键角色。它不仅是 GPT-4o 的全面升级版,更被视为向 GPT-5 过渡的重要桥梁。2025 年 4 月 15 日的发布会上,OpenAI 宣布 GPT-4.1 系列模型…...

node.js 基础

模块导入和导出 形式1 function get_jenkins(){return "jenkins....." }function test_cc(){return "4444444" }export {get_jenkins,test_cc}// 主函数 import { get_jenkins, test_cc } from ./module.js;console.log(get_jenkins()); console.log(tes…...

数据结构中的宝藏秘籍之广义表

广义表&#xff0c;也被称作列表&#xff08;Lists&#xff09;&#xff0c;是一种递归的数据结构。它就像一个神秘的盒子&#xff0c;既可以装着单个元素&#xff08;原子&#xff09;&#xff0c;也可以嵌套着其他的盒子&#xff08;子列表&#xff09;。比如广义表 (a (b c)…...

电流模式控制学习

电流模式控制 电流模式控制&#xff08;CMC&#xff09;是开关电源中广泛使用的一种控制策略&#xff0c;其核心思想是通过内环电流反馈和外环电压反馈共同调节占空比。相比电压模式控制&#xff0c;CMC具有更快的动态响应和更好的稳定性&#xff0c;但也存在一些固有缺点。 …...

汽车免拆诊断案例 | 2011款雪铁龙世嘉车刮水器偶尔自动工作

故障现象 一辆2011款雪铁龙世嘉车&#xff0c;搭载1.6 L 发动机&#xff0c;累计行驶里程约为19.8万km。车主反映&#xff0c;该车刮水器偶尔会自动工作&#xff0c;且前照灯偶尔会自动点亮。 故障诊断 接车后试车发现&#xff0c;除了上述故障现象以外&#xff0c;当用遥控器…...

#去除知乎中“盐选”付费故事

添加油猴脚本&#xff0c;去除知乎中“盐选”付费故事 // UserScript // name 盐选内容隐藏脚本 // namespace http://tampermonkey.net/ // version 0.2 // description 自动隐藏含有“盐选专栏”或“盐选”文字的回答卡片 // author YourName // mat…...

github 项目迁移到 gitee

1. 查看远程仓库地址 git remote -v 2. 修改远程仓库地址 确保 origin 指向你的 Gitee 仓库&#xff0c;如果不是&#xff0c;修改远程地址。 git remote set-url origin https://gitee.com/***/project.git 3. 查看本地分支 git branch 4. 推送所有本地分支 git p…...

2025年03月中国电子学会青少年软件编程(Python)等级考试试卷(五级)答案 + 解析

青少年软件编程(Python)等级考试试卷(五级) 分数:100 题数:38 一、单选题(共25题,共50分) 1. 以下哪个选项不是Python中的推导式?( ) A. 列表推导式 B. 字典推导式 C. 集合推导式 D. 元组推导式 正确答案:D 答案解析:Python中的推导式包括列表推导式、字典推导式…...

[Unity]-[UI]-[Prefab] 关于UGUI UI Prefab的制作技巧

从上到下&#xff0c;从外到里&#xff0c;多用空物体套壳 这个意思就是说在使用ugui时制作prefab时&#xff0c;要遵循“从上到下&#xff0c;从外到里&#xff0c;多用空物体套壳”的原则&#xff0c;好处就是后面好修改&#xff0c;并且可以复用不同的prefab子模块。且在布…...

【Reading Notes】(8.3)Favorite Articles from 2025 March

【March】 雷军一度登顶中国首富&#xff0c;太厉害了&#xff08;2025年03月02日&#xff09; 早盘&#xff0c;小米港股一路高歌猛进&#xff0c;暴涨4%&#xff0c;股价直接飙到52港元的历史新高。这一波猛如虎的操作&#xff0c;直接把雷军的身家拉到了2980亿元&#xff0c…...

2021-11-09 C++倍数11各位和为13

缘由c函数题找数字的-编程语言-CSDN问答 void 倍数11各位和为13(int n, int& b, int* h) {//缘由https://ask.csdn.net/questions/7559803?spm1005.2025.3001.5141b !(n % 11);while(n)*h n % 10, n / 10; }int a 1, b 1, c 0, d 0;while (a < 100){倍数11各位和…...