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

Erupt 项目搭建

创建Spring Boot项目

Maven依赖

Spring Boot版本为 2.7.10,erupt版本为 1.12.14

erupt版本要与Spring Boot版本适配,3.x.x版本Spring Boot暂不适用说是

    <properties><erupt.version>1.12.14</erupt.version></properties>
    <dependencies><!--tomcat--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-tomcat</artifactId><scope>provided</scope></dependency><!--test测试--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><!--MySql--><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.16</version><scope>runtime</scope></dependency><!--核心管理模块--><dependency><groupId>xyz.erupt</groupId><artifactId>erupt-admin</artifactId><version>${erupt.version}</version></dependency><!--后台WEB界面--><dependency><groupId>xyz.erupt</groupId><artifactId>erupt-web</artifactId><version>${erupt.version}</version></dependency><!-- ****** 以下模块不需要可以去掉 ****** --><!--erupt-cloud 云节点分布式控制模块--><dependency><groupId>xyz.erupt</groupId><artifactId>erupt-cloud-server</artifactId><version>${erupt.version}</version></dependency><!--任务管理模块--><dependency><groupId>xyz.erupt</groupId><artifactId>erupt-job</artifactId><version>${erupt.version}</version></dependency><!--代码生成器模块--><dependency><groupId>xyz.erupt</groupId><artifactId>erupt-generator</artifactId><version>${erupt.version}</version></dependency><!--服务监控模块--><dependency><groupId>xyz.erupt</groupId><artifactId>erupt-monitor</artifactId><version>${erupt.version}</version></dependency><!--在线接口开发--><dependency><groupId>xyz.erupt</groupId><artifactId>erupt-magic-api</artifactId><version>${erupt.version}</version></dependency><!--自定义页面模块--><dependency><groupId>xyz.erupt</groupId><artifactId>erupt-tpl</artifactId><version>${erupt.version}</version></dependency><!--element-ui--><dependency><groupId>xyz.erupt</groupId><artifactId>erupt-tpl-ui.element-ui</artifactId><version>${erupt.version}</version></dependency><!--velocity--><dependency><groupId>org.apache.velocity</groupId><artifactId>velocity-engine-core</artifactId><version>2.3</version></dependency></dependencies>

xxxApplication启动类添加注解

import org.springframework.boot.autoconfigure.domain.EntityScan;
import xyz.erupt.core.annotation.EruptScan;@EruptScan
@EntityScan

 main方法中加入下列代码,启动后自动打开指定页面

        try {System.setProperty("java.awt.headless", "false");Desktop.getDesktop().browse(new URI("http://localhost:8088"));} catch (Exception ignore) {}

yml参数配置

server:port: 8081# 启用 gzip 压缩compression:mime-types: application/javascript,text/css,application/json,application/xml,text/html,text/xml,text/plainenabled: trueerror:includeException: trueincludeStacktrace: ALWAYSincludeMessage: ALWAYSspring:#当 erupt.redisSession 为 true 时必须配置此项!redis:database: 0timeout: 10000host: 127.0.0.1datasource:url: jdbc:mysql://127.0.0.1:3306/erupt?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghaiusername: rootpassword: ****jpa:show-sql: falsegenerate-ddl: truedatabase-platform: org.hibernate.dialect.MySQL5InnoDBDialectdatabase: mysqlproperties:hibernate:format_sql: falsemail:username: xxxx@qq.compassword: xxxxxxxhost: smtp.qq.comproperties:mail.smtp.ssl.auth: truemail.smtp.ssl.enable: truemail.smtp.ssl.required: trueservlet:multipart:max-file-size: 100MBmax-request-size: 100MBprofiles:active: dev#避免依赖循环引用
#  main:
#    allow-circular-references: trueerupt-app:# 登录失败几次,需要验证码verifyCodeCount: 2# 是否开启水印,1.12.0 及以上版本支持water-mark: true# 登录失败几次出现验证码,值为0时表示一直需要登录验证码verify-code-count: 2# 登录密码是否加密传输,特殊场景如:LDAP登录可关闭该功能获取密码明文pwd-transfer-encrypt: true# 是否开启密码重置功能,关闭后前端会屏蔽所有重置密码的入口适用于 ldap 等场景,1.12.7 及以上版本支持reset-pwd: true# 多语言配置locales: ["zh-CN",      // 简体中文"zh-TW",      // 繁体中文"en-US",      // English"fr-FR",      // En français"ja-JP",      // 日本語"ko-KR",      // 한국어"ru-RU",      // русск"es-ES"       // español]# 自定义登录页路径,1.10.6 及以上版本支持,支持http网络路径
#  login-page-path: /customer-login.html
erupt:# 是否开启csrf防御csrf-inspect: true# 开启redis方式存储session,默认false,开启后需在配置文件中添加redis配置(同 Spring Boot)redis-session: false# redis session是否自动续期,1.10.8及以上版本支持redis-session-refresh: false# 附件上传存储路径, 默认路径为:/opt/erupt-attachmentupload-path: D:/erupt/annex# 是否保留上传文件原始名称keep-upload-file-name: false# 项目初始化方式,NONE 不执行初始化代码、EVERY 每次启动都进行初始化、FILE 通过标识文件判断是否需要初始化init-method-enum: file# 默认语言,1.12.3 及以上版本支持default-locales: zh-CN# 是否开启任务调度(导入erupt-job时有效)job.enable: true# 是否开启日志采集,开启后可在系统日志中查看实时日志 1.12.14 及以上版本支持log-track: true# 日志采集最大暂存行数 1.12.14 及以上版本支持log-track-cache-size: 1000# 是否记录操作日志,默认true,该功能开启后可在【系统管理 → 操作日志】中查看操作日志security:record-operate-log: trueupms:# 登录 session 时长(redisSession为true时有效)# redisSession 为 false 时控制有效期的方法:server.servlet.session.timeoutexpire-time-by-login: 60# 严格的角色菜单策略,如果非管理员用户拥有“角色管理权限”则仅能编辑已有权限的角色菜单strict-role-menu-legal: falsemagic-api:web: /magic/web# 接口配置文件存放路径resource.location: D:/erupt/magic-scriptshow-url: false
数据库配置

根据所用数据库类型选择MySQL、SQLServer等进行配置

建立一个数据库(erupt),其他名也行,暂时不用建表,项目启动会自动建立多个基础表

首页配置(home.html)

手动创建,位置:/resources/public/home.html

<!DOCTYPE html>
<html lang="en">
<head><title>home</title><meta charset="UTF-8"><meta content="width=device-width, initial-scale=1" name="viewport">
</head>
<style>body {/* 设置背景图片 */background-image: url('login-img-BlackSilk.jpg');/* 背景图片覆盖整个元素 */background-size: cover;/* 背景图片不重复 */background-repeat: no-repeat;/* 背景图片居中显示 */background-position: center;/* 可选:设置背景图片固定,滚动页面时不移动 */background-attachment: fixed;/* 可选:设置边距,根据需要调整 */margin: 0;padding: 0;/* 确保整个页面都有背景图片 */height: 100vh; /* 视口高度 */width: 100vw; /* 视口宽度,但通常不需要设置,因为body默认就是100%宽度 */}
</style>
<body>
</body>
</html>

 前端配置(app.js)

手动创建,位置:/resources/public/app.js

window.eruptSiteConfig = {//erupt接口地址,在前后端分离时指定domain: "",//附件地址,一般情况下不需要指定,如果自定义对象存储空间,则需在此指定附件资源访问地址fileDomain: "",//登录页中间标题title: "風華絕代",//登录页中间标题描述desc: "風華絕代-Leslie",//是否展示版权信息copyright: true,//自定义版权内容,1.12.8及以上版本支持,值可以是方法也可以是字符串copyrightTxt: function() {return "風華絕代-Cheung Kowk Wing"},//高德地图 api key,使用地图组件须指定此属性,amapKey获取地址:https://lbs.amap.com (服务平台为:Web端(JS API))amapKey: "xxxx",//高德地图 SecurityJsCodeamapSecurityJsCode: "xxxxx",//登录页logo路径logoPath: "log-Leslie.jpg",//登录后左上角logo旁边的文字logoText: "風華絕代",//注册页地址,会在登录页面增加一个链接 (仅是一个链接,需要自定义实际样式)registerPage: "",//自定义导航栏按钮,配置后将会出现在页面右上角r_tools: [{text: "自定义功能按钮",icon: "fa-eercast",mobileHidden: true,click: function (event) {alert("Function button");}}],//登录成功事件 1.12.3 及以上版本移动至window.eruptEvent中声明login: function(user){},//注销事件 1.12.3 及以上版本移动至window.eruptEvent中声明logout: function(user){}
};//路由回调函数
window.eruptRouterEvent = {//key表示要监听的路由切换地址,为url hash地址最后一段//例如:http://www.erupt.xyz:9999/#/build/table/demo中demo为回调keydemo: {//路由载入事件load: function (e) {},//路由退出事件unload: function (e) {}},//$ 为全路径通配符,在任何路由切换时都会执行load与unload事件$: {load: function (e) {},unload: function (e) {}}
};//erupt生命周期函数
window.eruptEvent = {//页面加载完成后回调startup: function () {},//登录成功login: function(user){},//注销事件logout: function(user){}
}

前端样式(app.css)

手动创建,位置:/resources/public/app.css

/* 例:修改登录页样式 */
layout-passport > .container {background-position: center !important;background-repeat: repeat !important;background-size: cover !important;background-color: #fff !important;background-image: url(login-img-BlackSilk.jpg) !important;/*background-image: url(https://www.erupt.xyz/demo/login-bg.svg) !important;*/
}

启动项目

访问地址:localhost:8081

默认账号:erupt

默认密码:erupt

登录

默认有以下菜单栏

新建菜单

新建下级菜单(表格视图)

新建实体类

实体类对应的表,数据库中如果没有,项目启动时会自动创建

实体类字段名为驼峰命名的字段在表中会转为“_”类型的字段名,例如:

recommendedLevel        ==>        recommended_level

import xyz.erupt.annotation.Erupt;
import xyz.erupt.annotation.EruptField;
import xyz.erupt.annotation.sub_field.Edit;
import xyz.erupt.annotation.sub_field.EditType;
import xyz.erupt.annotation.sub_field.View;
import xyz.erupt.annotation.sub_field.ViewType;
import xyz.erupt.annotation.sub_field.sub_edit.AttachmentType;
import xyz.erupt.annotation.sub_field.sub_edit.ChoiceType;
import xyz.erupt.annotation.sub_field.sub_edit.VL;
import xyz.erupt.upms.model.base.HyperModel;import javax.persistence.Entity;
import javax.persistence.Table;/*** @Package_Name * @Author * @TIME* @Version*/
@Erupt(name = "風華"
)
@Table(name = "leslie")
@Entity
public class Leslie extends HyperModel {@EruptField(views = {@View(title = "名称")},edit = @Edit(title = "名称", notNull = true))private String name;@EruptField(views = {@View(title = "年龄")},edit = @Edit(title = "年龄", notNull = true))private Integer age;@EruptField(views = {@View(title = "相片", type = ViewType.IMAGE)},edit = @Edit(title = "相片", notNull = true, type = EditType.ATTACHMENT,attachmentType = @AttachmentType(type = AttachmentType.Type.IMAGE)))private String image;@EruptField(views = @View(title = "实力"),edit = @Edit(title = "实力", notNull = true, type = EditType.CHOICE,choiceType = @ChoiceType(vl = {@VL(value = "0", label = "不是man"),@VL(value = "10", label = "失败的man"),@VL(value = "20", label = "成功的man"),@VL(value = "30", label = "嚣张的man")})))private Integer recommendedLevel;
}

注解

@Erupt 类注解

使用方法:添加在类上

排序OrderBy

布局定义 @Layout

 权限控制 @Power

控制erupt类能力,包括:新增、修改、删除、导入、导出等

数据过滤 @Filter

树形展示 @Tree

暂时没弄明白

左树右表 @LinkTree
@Erupt(name = "Erupt",linkTree = @LinkTree(field = "tree") //field 的值为类中支持树组件字段
)
public class EruptTest extends BaseModel {@ManyToOne@JoinColumn(name = "parent")//如果 linkTree 配置中 dependNode 值为 true 可以不声明 @EruptField 新增时会自动填充当前选择的树节点@EruptField(views =  @View(title = "树节点选择", column = "name"),//title-显示名称,column-实际值,实体类的字段edit = @Edit(title = "树节点选择", type = EditType.REFERENCE_TREE,referenceTreeType = @ReferenceTreeType(pid = "parent.id", expandLevel = 1)))private Tree tree;//另一个实体类,字段名与linkTree注解里的对应}

效果示例

代码:

页面效果

 数据钻取 @Drill (无需外键,低耦合一对多)

暂时没整明白

@EruptField 字段注解

@View

@View → type参照

@Edit

@Edit → type参照

逻辑删除

添加注解@Filter、@SQLDelete

import org.hibernate.annotations.SQLDelete;
import xyz.erupt.annotation.sub_erupt.Filter;

@Filter:对数据进行过滤,只显示未删除的

@SQLDelete:覆盖删除语句,改为修改 deleted 字段实现逻辑删除

添加实体类字段

    private Date deleteTime;private Boolean deleted = false;

注意事项:

1、项目启动生成的表,没有这两个字段

2、这时候配置逻辑删除后,项目启动后表中自动生成对应字段,但是查询时后报错,需要将表中数据的 deleted 字段值设为 0(0-false,1-true)

3、@Filter注解中过滤字段需为 表名.字段

                                                                Leslie Lee 随笔

相关文章:

Erupt 项目搭建

创建Spring Boot项目 Maven依赖 Spring Boot版本为 2.7.10&#xff0c;erupt版本为 1.12.14 erupt版本要与Spring Boot版本适配&#xff0c;3.x.x版本Spring Boot暂不适用说是 <properties><erupt.version>1.12.14</erupt.version></properties> <…...

HarmonyOS Next 系列之列表下拉刷新和触底加载更多数据实现(十一)

系列文章目录 HarmonyOS Next 系列之省市区弹窗选择器实现&#xff08;一&#xff09; HarmonyOS Next 系列之验证码输入组件实现&#xff08;二&#xff09; HarmonyOS Next 系列之底部标签栏TabBar实现&#xff08;三&#xff09; HarmonyOS Next 系列之HTTP请求封装和Token…...

比特位的计算

给你一个整数 n &#xff0c;对于 0 < i < n 中的每个 i &#xff0c;计算其二进制表示中 1 的个数 &#xff0c;返回一个长度为 n 1 的数组 ans 作为答案。 示例 1&#xff1a; 输入&#xff1a;n 2 输出&#xff1a;[0,1,1] 解释&#xff1a; 0 --> 0 1 --> …...

SQLAlchemy 学习笔记

通信类型&#xff1a;AF_INET 协议家族一般是表示TCP通信的SOC_STREAM和UDP通信的SOCK_DGRAM。对于TCP通信&#xff0c;建立socket连接&#xff0c;&#xff1a; s socket.socket(socket.AF_INET, socket.SOCK_STREAM)连接socket&#xff0c; s.connect((host,port))socket通信…...

Linux内核分析(调度类和调度实体)

文章目录 前言一、调度类1. stop_sched_class2. dl_sched_class3. rt_sched_class4. fair_sched_class5. idle_sched_class总结 二、调度类中的操作函数三、调度实体 前言 调度是操作系统内核的一个关键职责&#xff0c;它涉及到如何合理分配CPU时间给不同的进程或线程。在Lin…...

用输入输出流(I/O)流,递归复制和删除多级文件

一、&#xff08;I/O&#xff09;流递归复制一个文件 第一种&#xff1a; else if语句过多&#xff0c;看起来冗余&#xff0c;优点&#xff1a;多级文件一次性复制完整 import java.io.*;//数据源&#xff1a;src/main/java/day15_8_13/haha //目标;src/main/java/LaJi pub…...

kafka监控工具EFAK

kafka监控工具&#xff08;EFAK&#xff09; 1、下载2、解压3、配置3.1、安装数据库&#xff0c;需要mysql是&#xff0c;并创建ke数据库3.2、修改配置文件 4、启动4.1、启动zookeeper4.2、启动kafka4.3、启动EFAK 5、访问http://ip:8048 github地址&#xff1a;https://github…...

Page与自定义Components生命周期

自定义组件 自定义组件一般可以用component,装饰&#xff0c;在结构体里面用build方法定义UI,或者用builder装饰一个方法&#xff0c;来作为自定义组件的构造方法 而页面page一般用Entry,和component结合起来使用 页面生命周期方法: onPageShow:页面每次显示时触发 onPageHid…...

Chain of Thought (CoT) 系列论文:大模型思维链,提升 LLM 的推理能力

文章目录 1. COT&#xff1a;Chain of Thought1. 研究背景2. CoT的原理3. CoT Prompt 1. COT&#xff1a;Chain of Thought COT 是 2022.01 由 google 提出的针对提升 LLM 的推理能力的 Prompt Engineering 方法。 paper&#xff1a; Chain-of-Thought Prompting Elicits Re…...

已解决:java.net.BindException: 地址已在使用

1. 问题描述 java.net.BindException: 地址已在使用 是一种常见的网络异常&#xff0c;通常在服务器程序尝试绑定到一个已经被占用的端口或地址时出现。具体的异常信息可能如下&#xff1a; java.net.BindException: Address already in use: JVM_Bind或 java.net.BindExcep…...

看书标记【数据科学:R语言实战 8】

看书标记——R语言 Chapter 8 数据可视化——绘图8.1 功能包8.2 散点图8.2.1 回归线8.2.2 lowess线条8.2.3 scatterplot函数8.2.4 Scatterplot矩阵1.splom——展示矩阵数据2.cpairs——绘图矩阵图 8.2.5 密度散点图 8.3 直方图和条形图8.3.1 条形图8.3.2 直方图 8.3.3 ggplot28…...

STM32标准库学习笔记-1.基础知识

STM32介绍&#xff1a; STM32是ST公司基于ARM Cortex-M内核开发的32位微控制器。 ARM的含义&#xff1a; 公司名称&#xff1a;ARM公司成立于1990年&#xff0c;全称是Advanced RISC Machines&#xff08;RISC:Reduced Instruction Set Computer 精简指令集计算机 相对应有C…...

Nginx:高效HTTP服务器与反向代理

Nginx&#xff1a;高效HTTP服务器与反向代理 1、核心特点2、应用场景 &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收藏不迷路&#x1f496; Nginx&#xff0c;一个开源的HTTP服务器与反向代理工具&#xff0c;因其高性能、低资源消耗而备受推崇。以下是Nginx的几…...

vue3二次封装element-puls

将表单的通用信息给设置出来 如: label 的提示信息 , type 的类型 // 定义表单的配置项 const formConfig{ formItems:[ { type:"input", label:"用户ID", placeholder:"请输入用户ID" } ] } 页面配置如 <template v-for"(it…...

在CentOS 7上安装Apache Tomcat 8的方法

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站。 介绍 Apache Tomcat 是一个用于提供 Java 应用程序的 Web 服务器和 Servlet 容器。Tomcat 是由 Apache 软件基金会发布的 Java Servlet…...

深入理解分布式事务中的三阶段提交(3PC),什么是3PC,3PC原理是怎样?3PC的优化?

在上一篇文章中&#xff0c;我们详细介绍了分布式事务中的两阶段提交&#xff0c;以及知道了两阶段提交存在一定的问题 深入理解分布式事务中的两阶段提交&#xff08;2PC&#xff09;&#xff0c;什么是2PC&#xff0c;2PC原理是怎样&#xff1f;2PC有没有什么问题&#xff1…...

这款新的 AI 工具会消灭 ChatGPT 吗?

随着大型语言模型 (LLM) 的出现&#xff0c;ChatGPT迅速成为全球计算机用户的家喻户晓的名字。这款由 OpenAI 设计的深度学习聊天机器人以知识宝库而闻名——一部互联网百科全书。 继ChatGPT的脚步之后&#xff0c;许多其他生成式AI工具也纷纷涌现。 2023 年 3 月&#xff0c;一…...

谷粒商城实战笔记-214~219-商城业务-认证服务-验证码防刷校验

文章目录 一&#xff0c;验证码防刷校验1&#xff0c;第三方服务提供发送短信的接口2&#xff0c;登录服务提供给前端的接口 二&#xff0c;215-商城业务-认证服务-一步一坑的注册页环境三&#xff0c;商城业务-认证服务-异常机制四&#xff0c;217-商城业务-认证服务-MD5&…...

在华为服务器的openEuler系统中适配Pytorch调用NPU

服务器架构&#xff1a;aarch64 yolov7 和 mindyolo 二选一即可&#xff0c;yolov7是基于pytorch&#xff0c;mindyolo是基于mindspore 本文档基于CANN8.0RC3 , 刚发布比较新&#xff0c;如果有问题&#xff0c;可将CANN版本降低 导读 资料首页&#xff1a;https://www.hiasce…...

MVCC工作原理深入解析

一、事务概述 mysql事务是指一组命令操作&#xff0c;在执行过程中用来保证要么全部成功&#xff0c;要么全部失败。事务是由引擎层面来支持的&#xff0c;MyISM引擎不支持事务&#xff0c;InnoDB引擎支持事务。 事务具有ACID四大特性 原子性&#xff08;Atomicity&#xff0…...

日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする

日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする 1、前言(1)情况说明(2)工程师的信仰2、知识点(1) にする1,接续:名词+にする2,接续:疑问词+にする3,(A)は(B)にする。(2)復習:(1)复习句子(2)ために & ように(3)そう(4)にする3、…...

Zustand 状态管理库:极简而强大的解决方案

Zustand 是一个轻量级、快速和可扩展的状态管理库&#xff0c;特别适合 React 应用。它以简洁的 API 和高效的性能解决了 Redux 等状态管理方案中的繁琐问题。 核心优势对比 基本使用指南 1. 创建 Store // store.js import create from zustandconst useStore create((set)…...

java调用dll出现unsatisfiedLinkError以及JNA和JNI的区别

UnsatisfiedLinkError 在对接硬件设备中&#xff0c;我们会遇到使用 java 调用 dll文件 的情况&#xff0c;此时大概率出现UnsatisfiedLinkError链接错误&#xff0c;原因可能有如下几种 类名错误包名错误方法名参数错误使用 JNI 协议调用&#xff0c;结果 dll 未实现 JNI 协…...

【JVM】- 内存结构

引言 JVM&#xff1a;Java Virtual Machine 定义&#xff1a;Java虚拟机&#xff0c;Java二进制字节码的运行环境好处&#xff1a; 一次编写&#xff0c;到处运行自动内存管理&#xff0c;垃圾回收的功能数组下标越界检查&#xff08;会抛异常&#xff0c;不会覆盖到其他代码…...

解锁数据库简洁之道:FastAPI与SQLModel实战指南

在构建现代Web应用程序时&#xff0c;与数据库的交互无疑是核心环节。虽然传统的数据库操作方式&#xff08;如直接编写SQL语句与psycopg2交互&#xff09;赋予了我们精细的控制权&#xff0c;但在面对日益复杂的业务逻辑和快速迭代的需求时&#xff0c;这种方式的开发效率和可…...

GitHub 趋势日报 (2025年06月08日)

&#x1f4ca; 由 TrendForge 系统生成 | &#x1f310; https://trendforge.devlive.org/ &#x1f310; 本日报中的项目描述已自动翻译为中文 &#x1f4c8; 今日获星趋势图 今日获星趋势图 884 cognee 566 dify 414 HumanSystemOptimization 414 omni-tools 321 note-gen …...

Map相关知识

数据结构 二叉树 二叉树&#xff0c;顾名思义&#xff0c;每个节点最多有两个“叉”&#xff0c;也就是两个子节点&#xff0c;分别是左子 节点和右子节点。不过&#xff0c;二叉树并不要求每个节点都有两个子节点&#xff0c;有的节点只 有左子节点&#xff0c;有的节点只有…...

图表类系列各种样式PPT模版分享

图标图表系列PPT模版&#xff0c;柱状图PPT模版&#xff0c;线状图PPT模版&#xff0c;折线图PPT模版&#xff0c;饼状图PPT模版&#xff0c;雷达图PPT模版&#xff0c;树状图PPT模版 图表类系列各种样式PPT模版分享&#xff1a;图表系列PPT模板https://pan.quark.cn/s/20d40aa…...

Swagger和OpenApi的前世今生

Swagger与OpenAPI的关系演进是API标准化进程中的重要篇章&#xff0c;二者共同塑造了现代RESTful API的开发范式。 本期就扒一扒其技术演进的关键节点与核心逻辑&#xff1a; &#x1f504; 一、起源与初创期&#xff1a;Swagger的诞生&#xff08;2010-2014&#xff09; 核心…...

基于Java+MySQL实现(GUI)客户管理系统

客户资料管理系统的设计与实现 第一章 需求分析 1.1 需求总体介绍 本项目为了方便维护客户信息为了方便维护客户信息&#xff0c;对客户进行统一管理&#xff0c;可以把所有客户信息录入系统&#xff0c;进行维护和统计功能。可通过文件的方式保存相关录入数据&#xff0c;对…...