新闻详情

新闻详情

首页 / 资讯中心 / 详情

达梦云原生大数据平台上的校园智能实训系统设计与实现

发布时间:2026/9/26 21:27:14来源:尧图网络
达梦云原生大数据平台上的校园智能实训系统设计与实现
简介基于达梦云原生大数据平台的校园智能实训系统设计与实现源码面向高校计算机相关专业师生提供集知识传授、技能训练与工具实践于一体的沉浸式实训环境。资源包共174个文件约5.94MB其中包含84个Java源文件、36个Vue组件、14个JavaScript文件以及XML配置、JSON配置和PNG/JPG/GIF图片素材覆盖后端逻辑、前端界面、系统配置与演示动画等多个层次。已有135人学习下载。借助这套源码开发者可快速理解达梦云原生平台与大数据实训场景的融合方式掌握JavaVue全栈项目的目录结构与实现思路教师可直接部署开展实训课程学生可在此基础上二次开发用于毕业设计、课设或竞赛准备有效提升工程实践能力。1. 校园智能实训系统为什么值得落在达梦云原生大数据平台上市面上的 java 课程设计案例源码大多停在单机版一个 Spring Boot 项目连本地 MySQL截图交作业老师看不了过程也验不了结果。如果把选题换成「基于达梦云原生大数据平台的校园智能实训系统设计与实现源码」性质就变了——数据库国产化、云原生交付、自动判分三个点全踩在当下课设与毕设的加分方向上。这个系统解决的是高校实训课最头疼的环境统一问题学生打开浏览器做 SQL 实验后端调度达梦数据库按学生隔离模式判分结果实时回写老师能看到全班进度。适合毕业设计、课程设计、实训基地建设三类人。下面从底座部署开始一路拆到关键代码和兼容性坑位。2. 把达梦数据库搬上云原生docker 安装达梦8 与 StatefulSet 部署参数要跑实训系统第一步不是写业务代码而是先把达梦数据库弄进云原生底座。我一般的推进节奏是本机用 docker 安装达梦8 跑通开发和判分再把同样的数据库镜像挪进 Kubernetes用 StatefulSet 固化存储和网络标识。达梦不像 MySQL 那样在公共镜像仓库里随手拉开发学习版镜像需要从达梦官方渠道获取镜像 tag 也要跟着官方更新走下面代码里的镜像名按你实际拉到的版本替换。2.1 docker 安装达梦8最小命令与初始化参数先看本机开发阶段的最小启动命令。达梦的容器化部署和 MySQL 很像但初始化密码、字符集、页大小三个参数必须在第一次启动时定好后期改起来非常麻烦。# 启动 DM8 容器密码、存储、端口一次到位 docker run -d \ --name dm8 \ -p 5236:5236 \ -e DM8_INIT_PASSWORDDameng123 \ -e DM8_INIT_CHARSETUTF8 \ -e DM8_INIT_PAGE_SIZE32 \ -v dm8_data:/opt/dm8/data \ --restart unless-stopped \ dm8:latest参数说明-p 5236:5236是达梦的服务端口客户端工具和 JDBC URL 都默认打这个口不要乱改改完后所有连接串都得跟着换。DM8_INIT_PASSWORD是 SYSDBA 的初始密码达梦默认有密码复杂度策略建议直接用「大写小写数字特殊字符」的组合后面连接时报-2501多半和这里有关。DM8_INIT_CHARSETUTF8决定数据库字符集实训数据里全是中文姓名和题目说明不设 UTF8 后面迁移和展示都会乱码。DM8_INIT_PAGE_SIZE32是页大小页大小影响单行最大长度32KB 页对含大字段的题目表更宽裕。数据目录挂到 named volumedm8_data容器重建不丢数据。启动后先进容器验证一次docker exec -it dm8 disql SYSDBA/Dameng123 SELECT OK FROM DUAL;能查到OK说明容器侧没问题。接着用任意客户端测试外网连接我通常先用 DBeaver 拉一个连接避免后端代码还没跑就先怀疑自己写的 SQL。连接不上的情况多数不是容器问题而是驱动和密码策略这些在第 5 章详细说。2.2 云原生部署StatefulSet 与持久卷的三个关键选择开发跑通后把达梦挪上 Kubernetes。数据库这种有状态服务不能扔给 Deployment 加 HPA 就完事副本从 1 扩到 2 不叫高可用叫脑裂。我用 StatefulSet 管理达梦核心原因是它提供稳定网络标识和持久卷模板。apiVersion: apps/v1 kind: StatefulSet metadata: name: dm8 namespace: teaching spec: serviceName: dm8 replicas: 1 selector: matchLabels: app: dm8 template: metadata: labels: app: dm8 spec: containers: - name: dm8 image: dm8:latest ports: - containerPort: 5236 readinessProbe: tcpSocket: port: 5236 initialDelaySeconds: 30 periodSeconds: 10 resources: requests: cpu: 1 memory: 2Gi limits: cpu: 2 memory: 4Gi volumeMounts: - name: dm8-data mountPath: /opt/dm8/data volumeClaimTemplates: - metadata: name: dm8-data spec: accessModes: [ ReadWriteOnce ] resources: requests: storage: 50Gi这里三个点值得较真。第一volumeClaimTemplates让每个 Pod 自带独立 PVPod 被驱逐或重建后数据卷跟着新 Pod 走不会出现两个达梦实例抢同一份数据文件。第二探针用tcpSocket不要试图在达梦上做 HTTP 健康检查它不提供管理 HTTP 端口initialDelaySeconds给 30 秒是因为达梦首次拉起要初始化共享内存探针太急会不断重启容器。第三资源 limits 给足达梦启动时按页大小预分配缓冲内存被 limit 卡死会直接启动失败我这边的经验是requests给运行基线limits留 1.5 到 2 倍余量别抠。提示StatefulSet 的副本数对达梦来说默认保持 1横向扩容是达梦主备集群的事不是 K8s 副本数的事。上生产前先用kubectl exec进容器跑disql把连接验证一遍再挂 Service。Service 层我直接给 NodePort校园网里学生端和教师端都在内网NodePort 简单够用云上部署再换 LoadBalancer 加内网域名。如果多个班级共用同一个 K8s 集群建议给每个班级一个 namespace再配 ResourceQuota 限制 CPU 和内存总量防止一个班级的实验任务把整个平台的资源吃光。apiVersion: v1 kind: Service metadata: name: dm8-svc namespace: teaching spec: type: NodePort selector: app: dm8 ports: - port: 5236 targetPort: 5236 nodePort: 302362.3 连接参数对照JDBC、DBeaver、Navicat、IDEA 一次配齐平台要给不同角色准备不同客户端教师喜欢用 Navicat 看数据学生只用网页端开发调试时我常用 IDEA 的 Database 面板。达梦的连接参数在不同客户端里长得差不多但有一个共性驱动 jar 必须匹配 JDK 版本这是最容易翻车的一步。客户端关键配置注意点JDBC后端jdbc:dm://dm8-svc:30236驱动类dm.jdbc.driver.DmDriverHikariCP 连接池用驱动 jar 选 JDK8 版本DBeaver连接类型选达梦/Generic JDBC上传 DmJdbcDriver18.jarDBeaver 新版自带达梦驱动旧版手动补Navicat连接类型选「达梦」主机、端口 5236Navicat 16 及以上版本才支持达梦连接IDEADatabase 面板新增 DM 数据源填用户和密码IDEA 自带 DM 驱动模板缺 jar 时手动指定JDBC URL 的写法是jdbc:dm://host:port没有像 MySQL 那样的?useSSLfalse尾巴。驱动类名必须是dm.jdbc.driver.DmDriver有人从 Oracle 迁移过来顺手写成oracle.jdbc.OracleDriver启动直接报驱动加载失败。连接建立后用SELECT 1 FROM DUAL验证达梦保留了对 Oracle 的 DUAL 语法兼容这句能过说明网络、驱动、密码三层都通了。3. 实训系统核心设计角色权限、实验沙箱与自动判分怎么拆达梦底座就绪后业务系统按三个域拆用户与权限、实验沙箱、自动判分。这三分法不是我拍脑袋它对应实训课的三类角色诉求——管理员要能管人和课学生要有一个不被别人干扰的实验空间老师要能从「收截图」变成「看数据」。3.1 用户与角色权限四类账号与达梦对象权限系统用户表先落成一个最小的模型后续扩展课程表、实验表都围绕它做外键。达梦建表语法和 MySQL 大体一致但自增列要用IDENTITYCREATE TABLE sys_user ( id BIGINT IDENTITY(1,1) PRIMARY KEY, username VARCHAR(64) NOT NULL UNIQUE, password_hash VARCHAR(128) NOT NULL, role VARCHAR(16) NOT NULL DEFAULT STUDENT, real_name VARCHAR(64), dm_user VARCHAR(64), -- 对应达梦侧独立用户 enabled TINYINT DEFAULT 1, created_at DATETIME DEFAULT SYSDATE );角色我分成四类ADMIN平台管理、TEACHER课程教师、STUDENT实训学生、ASSISTANT助教判分复核用。权限控制有两层应用层用 Spring Security 的接口注解拦请求数据层靠达梦的对象授权兜底。应用层权限决定「能不能点按钮」达梦侧授权决定「能不能执行这条 SQL」后者才是实训系统的安全底线。每个学生注册进系统时后端在达梦侧同步创建一个同名用户stu_学号达梦的用户和模式是一一绑定的创建用户的同时自动生成同名模式学生登录后默认就在自己的模式里SELECT * FROM t1解析为stu_学号.t1。公共实验数据放在teach模式下只授权只读给所有学生用户这样学生既能查公共表又不会把公共数据改坏。3.2 实验沙箱动态创建达梦用户与同名模式学生账号不能在应用里随便写死由教师导入名单后批量生成。这里的核心操作是后端连接一个高权限账号执行达梦 DDLpublic void createStudentDmUser(String stuNo, String initPwd) { // 达梦默认密码策略要求强密码这里由系统生成 try (Connection conn adminDs.getConnection(); Statement st conn.createStatement()) { st.execute(CREATE USER \stu_ stuNo \ IDENTIFIED BY \ initPwd \); st.execute(GRANT SELECT ON teach.t_student TO \stu_ stuNo \); st.execute(GRANT SELECT ON teach.t_course TO \stu_ stuNo \); } }这段代码有两个设计点。一是用户名直接拼学号而不是用 UUID达梦模式名和用户名绑定模式名太随机会导致教师排查问题时对不上人。二是只授予SELECT权限学生实验题里如果要求 INSERT 或 UPDATE就再单独给对应的表授权而不是一把梭GRANT ALL。这样即使某个学生写了个DROP TABLE权限范围也被限制在他自己的模式内公共教学库毫发无损。密码策略我放在应用层生成初始密码形如Stu学号末四位第一次登录强制改密。达梦侧的PASSWORD_LOCK_TIME、FAILED_LOGIN_ATTEMPTS参数保持默认连续输错会锁账号实训场景里正好可以教学生「什么是数据库账号安全策略」。3.3 自动判分结果集比对、超时与防护策略判分是系统最核心的模块它的正确性决定老师愿不愿意把人工批改换成自动判分。我的判分策略分三层前置校验、执行隔离、结果比对。前置校验在应用层做学生提交的 SQL 只允许单条语句且必须以SELECT开头DELETE、UPDATE、DROP、CREATE一律拒绝。为什么必须拒绝实训系统面向的是刚学 SQL 的学生总有人好奇DROP TABLE能不能用如果放进了判分通道一个学生的误操作可能清掉公共教学库的演示数据。执行隔离靠 JDBC 连接的两处设置setReadOnly(true)把会话置为只读数据库层面把写操作挡死setQueryTimeout(5)把单条 SQL 的执行时间限制在 5 秒防的是学生写出FROM teach.t_student a, teach.t_student b这种笛卡尔积把达梦 CPU 吃满。注意达梦的只读会话对临时表和序列有限制但判分只跑 SELECT不受影响。结果比对采用「列数、行数、逐值比较」三段式先比列数列数不对直接判错并提示「结果集列数不一致」再比行数行数对不上给部分分最后逐行逐列比较值。比较时不直接equals数值类型用BigDecimal.compareTo忽略尾零字符串先trim再比。这套规则能兼容「答案里多了个空格但语义正确」的情况判分误杀率会低很多。4. 关键代码实现从初始化脚本到判分接口的可运行段落设计看完还缺手感这一章给可直接落地的代码段落。项目技术栈按最常见的组合来Spring Boot 3 MyBatis Vue 3 DM8先跑通再优化。4.1 达梦初始化脚本建模式、建表、造实验数据实训系统需要一个公共教学库模式teach里面放学生表、课程表、成绩表等基础数据。注意达梦里建库的概念弱建模式强直接建用户就能得到模式。下面脚本可以直接丢进 disql 执行-- 教学库模式达梦中用户与模式同名 CREATE USER teach IDENTIFIED BY Teach2024; -- 学生基础表 CREATE TABLE teach.t_student ( id INT PRIMARY KEY, name VARCHAR(64) NOT NULL, score INT ); -- 课程表 CREATE TABLE teach.t_course ( course_id VARCHAR(16) PRIMARY KEY, course_name VARCHAR(128) NOT NULL, credit INT ); -- 演示数据 INSERT INTO teach.t_student VALUES (101, 张三, 87); INSERT INTO teach.t_student VALUES (102, 李四, 73); INSERT INTO teach.t_student VALUES (103, 王五, 95); INSERT INTO teach.t_course VALUES (DB01, 数据库原理, 4); INSERT INTO teach.t_course VALUES (DB02, SQL 实训, 2); COMMIT;脚本里值得注意的语法差异IDENTITY(1,1)是达梦的自增列写法不要写成 MySQL 的AUTO_INCREMENT字符串用单引号如果表名或模式名要区分大小写才用双引号COMMIT显式提交达梦默认不自动提交实训学生如果发现自己的 INSERT 查不到多半就是没提交。4.2 后端判分服务执行 SQL 并比对结果判分接口是后端最重的一个 Service我把它拆成三个方法judge负责编排runQuery负责带保护的 SQL 执行compare负责结果集比对。下面给出核心逻辑Service public class JudgeService { private final DataSource dmDataSource; private final LabRepository labRepo; public JudgeResult judge(Long labId, String studentSql) { // 前置校验只接受单条 SELECT String sql studentSql.trim().toLowerCase(); if (!sql.startsWith(select) || sql.split(;).length 1) { return JudgeResult.fail(仅支持单条 SELECT 语句); } String stdSql labRepo.findStandardSql(labId); ListMapString, Object stdRows runQuery(stdSql); ListMapString, Object stuRows runQuery(studentSql); return compare(stdRows, stuRows); } private ListMapString, Object runQuery(String sql) { try (Connection conn dmDataSource.getConnection(); PreparedStatement ps conn.prepareStatement(sql)) { conn.setReadOnly(true); // 只读会话挡住写操作 ps.setQueryTimeout(5); // 单条 SQL 超时 5 秒 try (ResultSet rs ps.executeQuery()) { return toMapList(rs); // 按列序读取 } } catch (SQLException e) { throw new JudgeException(SQL 执行失败 e.getMessage()); } } private JudgeResult compare(ListMapString, Object std, ListMapString, Object stu) { if (std.size() ! stu.size()) { return JudgeResult.fail(结果列数不一致); } // 行数、逐值比较省略按实训规则给分 return JudgeResult.ok(score(std, stu)); } }逻辑说明judge里的前置校验用split(;)拦多语句虽然拦截不完美注释里可以藏分号但对学生实训场景足够setReadOnly(true)让达梦 JDBC 会话进入只读模式setQueryTimeout(5)是必须设的参数不设的话一条SELECT * FROM t_student a JOIN t_student b ON 11能跑几十秒。数据源dmDataSource用 HikariCP连接串是第 2 章那个jdbc:dm://地址。判分接口异常时要返回达梦原始错误信息让学生看到具体报错行而不是「判分失败」四个字。4.3 前端实训工作台运行 SQL 与展示结果前端工作台是学生每天看着的页面左侧题目描述中间 SQL 编辑器右侧结果表格。Vue 3 的提交逻辑很直接const route useRoute() // Vue Router 当前路由 // 提交 SQL 并渲染判分结果 async function runSql() { loading.value true try { const { data } await axios.post(/api/lab/run, { labId: route.query.labId, sql: editor.value.getValue() }) tableCols.value data.columns.map(c ({ label: c, prop: c })) tableRows.value data.rows scorePanel.value 得分${data.score} } catch (err) { // 判分失败时展示数据库反馈方便学生自查 resultPanel.value err.response?.data?.message || 未知错误 } finally { loading.value false } }编辑器用 CodeMirror 做 SQL 高亮提交按钮触发runSql。后端接口/api/lab/run的返回结构固定为{ columns, rows, score, message }columns是列名数组rows是对象数组前端直接灌进 el-table。这里有个容易踩的坑后端返回的列名和结果集列序必须一致否则学生看到的表格列顺序和标准答案对不上会以为是自己 SQL 写错。5. 达梦兼容性与迁移避坑从 MySQL 到达梦的 5 个常见问题实训系统不会从零写 SQL很多表结构和教学样例是从 MySQL 课程设计源码里搬过来的。这套迁移在达梦上会遇到一系列「像 MySQL 又像 Oracle」的兼容性报错以下按现象、原因、解决三段式记录都是我实际踩过的。5.1 现象DBeaver/Navicat 连不上报 -2501 用户名或密码错误用 Navicat 连接达梦时弹[HY000] 用户名或密码错误 (-2501)连本机 docker 容器也这样。原因分两种一是初始化时DM8_INIT_PASSWORD没设置或设置后密码复杂度不满足达梦把弱密码直接拒绝二是 GUI 客户端在传输密码时对特殊字符处理不一致密码里带或#时转义出错。解决先用容器内 disql 重置 SYSDBA 密码再回来连docker exec -it dm8 disql ALTER USER SYSDBA IDENTIFIED BY Dameng123;重置后如果 Navicat 还报 -2501把密码里的特殊字符去掉再试。记住报 -2501 时先怀疑密码再怀疑客户端版本最后才怀疑网络。5.2 现象表建好了Select 却报「模式不存在」或「无效的表名」学生在网页端提交SELECT * FROM t_student判分服务报表不存在但建表时明明成功。原因在达梦的「模式」解析规则用户和模式绑定登录用户是stu_20210001未加模式名的表默认解析为stu_20210001.t_student而建表建在teach模式下自然找不到。解决所有公共表查询都带模式前缀判分前统一设置当前模式try (Statement st conn.createStatement()) { st.execute(SET SCHEMA \teach\); }SET SCHEMA之后SELECT * FROM t_student就能解析到teach.t_student。学生自己的私有表实验则切到各自的模式。这条坑在 MySQL 里完全不存在是达梦最需要提醒团队的一句话。5.3 现象MySQL 能跑的自增列和反引号在达梦全部报语法错误把 MySQL 建表 SQL 直接搬过来AUTO_INCREMENT报错、反引号报错、LIMIT 0,10也报错。原因达梦默认是 Oracle 兼容语法MySQL 方言特性只在兼容模式下可用。解决建表用IDENTITY(1,1)替代AUTO_INCREMENT反引号改成双引号或裸写分页查询分情况处理——达梦在 MySQL 兼容模式下支持LIMIT默认模式下用ROWNUM包一层或者用TOP n。我项目里统一封装了一个PageSupport工具类根据数据源类型决定拼哪种分页避免业务代码里到处是方言判断。初始建库时如果确定从 MySQL 迁移可以在达梦初始化时开启 MySQL 兼容模式但要提前测一遍兼容模式不是万能的。5.4 现象驱动版本与 JDK 不匹配运行期 NoSuchMethodErrorSpring Boot 3 项目用 JDK 17驱动 jar 用的是从网上随便下的 DmJdbcDriver17.jar启动时连接池初始化直接报NoSuchMethodError或UnsupportedClassVersionError。原因达梦 JDBC 驱动按 JDK 版本分文件低版本驱动跑在高版本 JDK 上不被识别或缺少新 JDK API。解决开发环境统一用 JDK 8 时配 DmJdbcDriver18.jarJDK 17 时确认驱动包版本支持 JDK17直接把驱动的META-INF/MANIFEST.MF打开看Build-Jdk字段。MyBatis 配置文件里driver-class-name必须写dm.jdbc.driver.DmDriver这点检查一次就能排除掉一半的启动失败。5.5 现象mysql 数据迁移达梦后中文乱码、decimal 精度漂移用达梦数据迁移工具 DTS 把 MySQL 库迁过来INSERT成功但SELECT出来中文全是问号decimal(18,4)变成 4 位小数丢了。原因达梦库字符集不是 UTF8或者迁移工具对非空约束和精度做了默认转换。解决初始化容器时把DM8_INIT_CHARSETUTF8加上迁移前在 MySQL 侧把VARCHAR长度按字节数乘 3 预留中文空间UTF8 下一个汉字占 3 字节迁移后用客户端查看数据库属性确认字符集确实是 UTF8。decimal 精度问题靠迁移工具的参数设置把「小数位数保留」改成按源库精度不要在迁移后手工ALTER TABLE补量大容易漏。6. 验证与进阶把实训系统做成可交付课设与可运维平台6.1 最小验收清单交付一套源码不能只交代码要按可运行系统的标准验收。我把验收点整理成一张表照着逐项打勾验收项操作预期结果达梦容器docker ps或kubectl get poddm8 状态 Running5236 端口可连通后端启动看 Spring Boot 日志连接池初始化成功无 -2501 报错学生开课教师端导入学生名单达梦DBA_USERS中出现每个学生的独立用户SQL 判分提交正确 SQL 与错误 SQL正确 100 分错误返回达梦原始错误码数据隔离学生 A 建表学生 B 查询B 看不到 A 的表回滚验证kubectl rollout undo后端版本回退后连接池自动重建每条验收都要留下截图或日志课设答辩和项目交付时这就是证据链。6.2 进阶接入 Nacos 配置中心连达梦实训系统如果部署成多班级集群连接参数不能写死在 application.yml 里。Nacos 2.5.4 支持把配置存储放到达梦上这样配置中心、数据库、实训平台全部国产化。核心改法是让 Nacos 的数据源指向达梦spring: datasource: platform: dameng url: jdbc:dm://dm8-svc:30236/nacos_config driver-class-name: dm.jdbc.driver.DmDriver username: nacos password: Nacos2024这里注意 Nacos 建库 SQL 要在达梦里先执行一遍它默认给 MySQL 准备的脚本不能直接跑需要把引擎定义去掉。配置中心接好后判分超时、连接池大小、密码策略都能动态调整不用再进容器改。实训课还有一个隐藏收益达梦的 DCP 认证考试是机考实操实训系统里的题目和考试环境同源学生练完可以直接备考。如果后续要接 AI 问答式实训Dify 连达梦也是现成路线数据源抽象层建议从第一天就留好。6.3 收尾我自己做这类国产化项目有个习惯每落一个环境就把 SQL 脚本、yaml、驱动版本、JDK 版本四样东西归档一份文件名带日期。这个习惯救过我很多次——所有坑集中在「达梦和 MySQL 像又不像」的灰色地带遇到报错按「模式、驱动、字符集」三个方向排查比翻文档快得多。希望帮到你。本文还有配套的精品资源点击获取
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

做网站专用素材避坑指南:图解步骤拆解3种报价与隐藏成本 2026/9/26 22:11:46

做网站专用素材避坑指南:图解步骤拆解3种报价与隐藏成本

做网站专用素材避坑指南:图解步骤拆解3种报价与隐藏成本 网站被黑挂马后,你翻遍服务器日志却只看到一堆乱码,这种绝望感只有做过站的才懂。很多甲方以为换个“做网站专用素材”包就能高枕无忧,结果三天后网站再次瘫痪,数据全丢。别慌,这不是你运气差,…

阅读更多 →
开源代码审查工具链从零搭建:Gitea、Gerrit与Reviewdog实战 2026/9/26 22:11:46

开源代码审查工具链从零搭建:Gitea、Gerrit与Reviewdog实战

代码审查这件事,很多团队不是不想做,是做着做着就变味了。有的团队把审查当形式,PR 挂着三天没人理,最后合并按钮是领导点的;有的团队干脆跳过审查,出了线上事故才想起来当初要是有人看一眼就好了。我自己在…

阅读更多 →
无编程开发APP费用全拆解:从搭建到上架要花多少钱 2026/9/26 22:11:26

无编程开发APP费用全拆解:从搭建到上架要花多少钱

1. 无编程开发APP到底是怎么回事先把概念说清楚。所谓“无编程开发APP”,指的是借助可视化搭建平台,通过拖拽组件、配置参数、拼接逻辑的方式,把一个能装到手机上运行的应用程序做出来。整个过程不需要你手写 Java、Kotlin、Swift 或者 Dart&…

阅读更多 →
SpringBoot+Vue3图书管理系统:从数据库设计到部署全流程解析 2026/9/26 22:11:26

SpringBoot+Vue3图书管理系统:从数据库设计到部署全流程解析

做图书管理系统是我这几年看到频率最高的 Java 后端练手项目之一,但同时把 SpringBoot、Vue3、MyBatis、MySQL 串成一套完整前后端分离源码的,其实并没有那么多。很多同学拿到手的是一个只写了 CRUD 的半成品,借阅流程绕不开事务,…

阅读更多 →
3步搞定WordPress转内链,解决网站没人访问的SEO最佳实践 2026/9/26 22:11:19

3步搞定WordPress转内链,解决网站没人访问的SEO最佳实践

3步搞定WordPress转内链,解决网站没人访问的SEO最佳实践 网站做好了没人访问,这是很多站长最头疼的噩梦。你花了半个月时间,找外包或者自己动手,终于把页面调得漂漂亮亮,配色也符合品牌调性,结果上线一周,后台流量曲线平得像心电图停止了…

阅读更多 →
Ubuntu 22.04 VMware共享文件夹失效根因与FUSE修复方案 2026/9/26 22:11:19

Ubuntu 22.04 VMware共享文件夹失效根因与FUSE修复方案

1. 为什么Ubuntu 22.04的共享文件夹总“看不见”?——不是配置错了,是机制变了你刚装好Ubuntu 22.04,打开VMware Workstation或Fusion,照着老教程在虚拟机设置里勾选“启用共享文件夹”,点确定,回到系统里执…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉