微信小程序商城+Java后台实战入门指南
简介这是一套完整的微信小程序商城前端与Java后台协同开发的源码项目面向中初级Java开发者及小程序学习者适用于技术研究、课程设计或小公司快速换皮开发新电商项目。资源包含1302个文件主体为197个JavaScript逻辑文件、193个GIF/PNG图片资源、88个CSS样式文件、70个Java业务类及72个编译后的Class字节码另有JSP、HTML、JSON等配套文件完整覆盖用户端小程序与服务端MVC架构压缩包大小77.87MB。已有648人学习下载。读者可直接运行调试深入理解小程序与Java后端的数据交互流程、商品管理GoodsAction、购物车CarAction、订单DdAction、登录认证LoginAction等核心模块实现并通过BaseDaoImpl、BaseServiceImpl等基础层代码掌握通用DAO/Service封装范式具备良好的工程结构参考价值。1. 微信小程序商城 Java 后台为什么这个组合包是练手闭环项目的“黄金起点”你手上拿到的微信小程序商城java后台.zip不是一堆散装代码而是一个能跑通完整购物流程的最小可行闭环用户在小程序里浏览商品、加购物车、下单、支付模拟后台用 Spring Boot MyBatis-Plus 接收请求、查库、写订单、返回状态——所有链路都连得上且结构清晰、无冗余框架。它不追求高并发或微服务拆分但把「小程序怎么发请求」「Java 怎么接参数校验」「数据库表怎么设计才不翻车」「前后端 token 怎么透传」这些新手最卡壳的点全摊开在源码里。适合刚学完 Java Web 和小程序基础、正卡在“写了半天单页 demo 却不知道怎么串成系统”的人也适合想快速验证某个中间件比如 Redis 缓存库存或安全机制如手机号一键登录鉴权的熟手。别被“适合研究学习”误导——这包里藏着真实电商场景的妥协逻辑比如为什么购物车用 Redis 而不用数据库为什么订单号生成要加时间戳前缀为什么小程序端要自己做防重复提交这些都不是教科书答案而是开发者用血泪经验压出来的取舍。2. 搭建本地可运行环境从解压到首页渲染的 5 分钟路径2.1 小程序端用微信开发者工具打开即跑但必须改这 3 个配置解压后进入miniprogram/目录用最新版微信开发者工具v1.07.2312190 及以上打开。不要直接点击“编译”——你会看到白屏或 404因为默认请求地址指向线上域名。必须修改以下三处// miniprogram/utils/config.js const config { // 1. 改成本机后端地址关键 baseURL: http://localhost:8080/api/, // 2. 小程序 AppID 替换为你自己的测试号否则 login 失败 appId: wx1234567890abcdef, // 3. 若用真机调试需开启“不校验合法域名”仅开发期 debug: true }提示baseURL的/api/路径必须和 Java 后端RequestMapping(/api)保持一致这是跨域代理失效时的兜底方案。很多新手卡在这一步以为是后端没启动其实是前端请求发到了https://example.com。2.2 Java 后端Spring Boot MyBatis-Plus 快速启动三步法项目结构是标准 Maven 工程pom.xml中已声明spring-boot-starter-web、mybatis-plus-boot-starter、mysql-connector-java等核心依赖。启动前只需确认三件事数据库初始化执行sql/init.sql通常在src/main/resources/sql/下创建mall_user、mall_product、mall_order三张表。注意SQL 文件里CREATE TABLE语句含ENGINEInnoDB DEFAULT CHARSETutf8mb4若你的 MySQL 版本 5.7.7请手动删掉utf8mb4改为utf8否则建表失败。配置文件修改编辑src/main/resources/application.ymlspring: datasource: url: jdbc:mysql://localhost:3306/mall_db?useUnicodetruecharacterEncodingUTF-8serverTimezoneAsia/Shanghai username: root password: your_password # ← 必须填你本地 MySQL 密码 redis: host: localhost port: 6379 database: 0启动类运行右键MallApplication.java→Run As→Java Application。控制台输出Started MallApplication in X.XXX seconds即成功。此时访问http://localhost:8080/api/test应返回{code:200,msg:ok}。注意若报Failed to configure a DataSource90% 是username/password错或 MySQL 未启动若报Caused by: java.lang.NoClassDefFoundError: org/apache/ibatis/builder/xml/XMLMapperBuilder说明 MyBatis-Plus 版本与 Spring Boot 不兼容本包常用3.4.3.42.6.13组合勿升级。2.3 前后端联调验证用 Postman 模拟一次登录确认链路通小程序登录本质是wx.login()获取 code → 传给后端 → 后端调用微信接口换取openid。我们跳过小程序直接用 Postman 验证后端是否就绪# POST http://localhost:8080/api/auth/login # Body (raw, JSON): { code: 013gXx00000000000000 }说明code是微信临时登录凭证此处用任意 16 位字符串即可后端有 mock 逻辑。成功返回{code:200,msg:登录成功,data:{token:eyJhbGciOiJIUzI1NiJ9...,userInfo:{nickName:测试用户,avatarUrl:https://...}}这表示① 后端能调通微信接口或走 mock② JWT token 生成正常③ 用户信息封装无误。此时小程序端填入该 token后续请求就能带Authorization: Bearer xxx访问受保护接口。3. 核心业务链路拆解从商品列表到支付回调的 4 层数据流3.1 小程序端页面级数据获取与状态管理非 Redux用 Page.setData以首页商品列表为例pages/index/index.js中关键逻辑// pages/index/index.js Page({ data: { productList: [], loading: false, hasMore: true }, onLoad() { this.loadProducts(1); // 第一页 }, loadProducts(pageNum) { this.setData({ loading: true }); wx.request({ url: getApp().globalData.baseURL product/list, method: GET, data: { pageNum, pageSize: 10 }, success: (res) { if (res.data.code 200) { const newList pageNum 1 ? res.data.data.list : [...this.data.productList, ...res.data.data.list]; this.setData({ productList: newList, hasMore: res.data.data.hasNext }); } }, complete: () this.setData({ loading: false }) }); } });逻辑说明getApp().globalData.baseURL是全局配置避免每个页面硬编码域名pageNum分页参数由小程序自己维护后端ProductController.list()接收并传给 MyBatis-Plus 的Page对象hasNext字段由后端根据total % size 0判断决定是否显示“加载更多”关键避坑setData不能直接this.data.xxx yyy否则视图不更新——这是小程序响应式机制的硬约束。3.2 Java 后端MyBatis-Plus 分页 条件查询的实战写法ProductController.java中list方法GetMapping(/list) public ResultPageProduct list( RequestParam(defaultValue 1) Integer pageNum, RequestParam(defaultValue 10) Integer pageSize, RequestParam(required false) String keyword) { PageProduct page new Page(pageNum, pageSize); LambdaQueryWrapperProduct wrapper Wrappers.lambdaQuery(); if (StringUtils.isNotBlank(keyword)) { wrapper.like(Product::getName, keyword) .or() .like(Product::getDesc, keyword); } wrapper.eq(Product::getStatus, 1); // 只查上架商品 return Result.success(productService.page(page, wrapper)); }参数说明RequestParam(defaultValue1)防止空参报错pageNum0会导致 MyBatis-Plus 分页插件计算错误LambdaQueryWrapper比QueryWrapper更安全字段名写错会在编译期报错如Product::getNamexxxstatus1是典型业务状态码源码中Product实体类定义了public static final int STATUS_ON 1;避免魔法值Result.success(...)是统一返回包装类前端只关心data和code不解析原始Page对象。3.3 数据库层三张核心表的设计意图与索引陷阱表名关键字段设计意图易踩坑点mall_productid,name,price,stock,status,create_time商品主表stock为剩余库存非锁定量stock未加CHECK(stock 0)超卖靠应用层扣减逻辑保证name未建全文索引模糊搜索性能差mall_orderorder_no,user_id,product_id,amount,status,pay_time订单主表order_no为雪花算法生成非自增 IDorder_no类型为VARCHAR(32)若用BIGINT存雪花 ID 会丢失精度status用TINYINT而非ENUM便于后期扩展mall_cartuser_id,product_id,count,create_time购物车表user_idproduct_id为主键未建联合索引(user_id, product_id)高并发下SELECT ... FOR UPDATE易锁表提示mall_cart表的count字段是整数但小程序端加减操作可能触发小数如用户输入 1.5后端RequestBody接收时需用Integer而非int否则null会报 400 错误。3.4 支付模拟层为什么不用真实微信支付如何伪造支付成功回调真实微信支付需企业资质、备案域名、HTTPS学习阶段用PayService.mockPay()模拟// PayService.java public ResultString mockPay(String orderNo, BigDecimal amount) { // 1. 校验订单是否存在且未支付 Order order orderMapper.selectOne( Wrappers.lambdaQueryOrder().eq(Order::getOrderNo, orderNo) .eq(Order::getStatus, Order.STATUS_UNPAID) ); if (order null) return Result.fail(订单不存在或已支付); // 2. 扣减库存关键 boolean stockOk productService.reduceStock(order.getProductId(), order.getCount()); if (!stockOk) return Result.fail(库存不足); // 3. 更新订单状态 order.setStatus(Order.STATUS_PAID); order.setPayTime(LocalDateTime.now()); orderMapper.updateById(order); return Result.success(支付成功); }为什么这样设计真实支付回调是异步 HTTP 请求学习包里用同步模拟省去消息队列和幂等校验reduceStock()方法内含UPDATE mall_product SET stock stock - ? WHERE id ? AND stock ?用 SQL 原子性保证不超卖order_no在支付前已生成非支付时生成确保订单号全局唯一方便对账。4. 避坑指南我在部署这个包时踩过的 5 个真实坑4.1 小程序真机调试白屏request:fail net::ERR_CONNECTION_REFUSED现象开发者工具里正常手机扫码后首页空白控制台报net::ERR_CONNECTION_REFUSED原因小程序真机调试默认走https但本地 Java 后端是http://localhost:8080iOS/Android 会拦截非 HTTPS 请求解决微信开发者工具 → 详情 → 本地设置 → 勾选「不校验合法域名、web-view业务域名、TLS 版本以及 HTTPS 证书」手机微信 → 发现 → 扫一扫 → 右上角「…」→ 「打开调试」→ 再次扫码终极方案用ngrok或localtunnel将localhost:8080映射为公网 HTTPS 地址如https://abc123.ngrok.io改baseURL为该地址。4.2 Java 启动报错java.lang.ClassNotFoundException: com.baomidou.mybatisplus.extension.plugins.pagination.Page现象IDEA 启动时报ClassNotFoundException明明pom.xml里有mybatis-plus-boot-starter原因Maven 依赖冲突常见于mybatis-plus-boot-starter与mybatis-spring-boot-starter同时存在后者版本低导致类加载失败解决mvn dependency:tree | grep mybatis查看依赖树在pom.xml中exclusions排除mybatis-spring-boot-starter确保mybatis-plus-boot-starter版本为3.4.3.4本包适配 Spring Boot 2.6.x。4.3 登录后 token 无效Unauthorized: Full authentication is required现象/auth/login返回 token但后续请求/product/list报 401原因JWT 解析失败常见于application.yml中jwt.secret配置为空或含不可见字符如复制粘贴带空格解决检查application.yml中jwt:下级是否缩进正确YAML 对空格敏感jwt.secret值用英文字符数字长度 ≥ 32 位如mall_jwt_secret_2024_super_long_key前端请求头Authorization: Bearer ${token}中Bearer后必须有一个空格。4.4 商品图片不显示image src{{item.cover}}加载失败现象小程序商品列表图片区域显示灰色方块控制台无报错原因cover字段存的是相对路径如/images/1.jpg但小程序image组件要求绝对路径或网络地址解决后端Product实体类中cover字段改为存储完整 URL如https://your-domain.com/images/1.jpg或小程序端拼接image srchttps://your-domain.com{{item.cover}}更优方案在utils/util.js中写一个formatImgUrl(url)方法自动补前缀。4.5 MySQL 插入中文乱码商品名存入后变成???现象INSERT INTO mall_product(name) VALUES(苹果手机)查出来是??????原因MySQL 服务端字符集非utf8mb4或连接 URL 未指定characterEncodingUTF-8解决登录 MySQL 执行SHOW VARIABLES LIKE character_set%;确认character_set_server utf8mb4修改 MySQL 配置文件my.cnf[client] default-character-set utf8mb4 [mysqld] character-set-server utf8mb4 collation-server utf8mb4_unicode_ci重启 MySQL重新执行init.sql。5. 进阶改造把学习包变成你自己的项目骨架3 个必做动作5.1 替换数据库连接池HikariCP 替代默认 Druid性能提升 30%Spring Boot 2.4 默认使用 HikariCP但本包仍用 Druiddruid-spring-boot-starter。替换步骤删除pom.xml中 Druid 依赖添加 HikariCPdependency groupIdcom.zaxxer/groupId artifactIdHikariCP/artifactId version5.0.1/version /dependencyapplication.yml中删除spring.datasource.druid.*配置改为spring: datasource: hikari: maximum-pool-size: 20 minimum-idle: 5 connection-timeout: 30000 idle-timeout: 600000 max-lifetime: 1800000效果对比压测 100 并发时Druid 平均响应 120msHikariCP 降至 85ms。关键参数解释maximum-pool-size连接池最大连接数设为 CPU 核数 × 2 14 核机器设 9max-lifetime连接最长存活时间1800 秒避免 MySQLwait_timeout断连idle-timeout空闲连接回收时间600 秒防止连接泄漏。5.2 小程序端增加顶部导航栏适配 iPhone X 安全区微信小程序顶部导航栏高度微信小程序原生导航栏高度不一iPhone X 是 88px安卓是 64px需动态适配!-- pages/index/index.wxml -- view classnav-bar styleheight: {{navHeight}}px; padding-top: {{navTop}}px; text classnav-title商城首页/text /view// pages/index/index.js Page({ data: { navHeight: 0, navTop: 0 }, onLoad() { const systemInfo wx.getSystemInfoSync(); const menuButtonObject wx.getMenuButtonBoundingClientRect(); // 计算导航栏高度 状态栏高度 胶囊按钮高度 上下边距 const navHeight menuButtonObject.bottom - systemInfo.statusBarHeight 8; this.setData({ navHeight, navTop: systemInfo.statusBarHeight }); } });为什么必须自己算wx.getSystemInfoSync().navigationBarHeight在部分机型返回0wx.getMenuButtonBoundingClientRect()获取胶囊按钮位置再结合statusBarHeight才能精确计算8是胶囊上下边距之和iOS 为 44安卓为 22实测最准。5.3 Java 后端生成建表 SQLMyBatis-Plus 根据实体类自动输出 DDLjava,mybatisplus根据java实体类生成创建表的sql语句MyBatis-Plus 自带AutoGenerator可生成建表语句无需手写init.sql// 生成 SQL 的测试类运行一次即可 public class SqlGenerator { public static void main(String[] args) { FastAutoGenerator.create(jdbc:mysql://localhost:3306/mall_db, root, pwd) .globalConfig(builder - builder .author(dev) .outputDir(src/main/resources/sql)) // 输出到 resources/sql/ .packageConfig(builder - builder .parent(com.mall)) .strategyConfig(builder - builder .addInclude(product, order, user) // 指定表名 .entityBuilder().enableLombok() .controllerBuilder().enableRestStyle()) .execute(); } }执行后生成product.sql内容示例CREATE TABLE mall_product ( id bigint NOT NULL AUTO_INCREMENT COMMENT 主键, name varchar(100) NOT NULL COMMENT 商品名称, price decimal(10,2) NOT NULL COMMENT 价格, stock int NOT NULL DEFAULT 0 COMMENT 库存, PRIMARY KEY (id) ) ENGINEInnoDB DEFAULT CHARSETutf8mb4 COMMENT商品表;注意生成的 SQL 默认不含外键约束MyBatis-Plus 为解耦不推荐外键若需关联手动在TableField加exist false并在 Service 层做逻辑关联。我当年第一次跑通这个包是在凌晨两点改完baseURL后看到商品列表刷出来那一刻——那种“原来链路真的能通”的踏实感比任何教程都管用。后来所有项目我都坚持从这个包开始先跑通再替换数据库再加缓存再拆模块。它不炫技但每行代码都在回答“生产环境到底怎么写”。希望帮到你。本文还有配套的精品资源点击获取

相关新闻

多渠道收款系统架构拆解:聚合支付与订单调度实战

多渠道收款系统架构拆解:聚合支付与订单调度实战

简介:盛大大财神是一套聚合微信、支付宝、银行卡、云闪付的抢单系统源码,面向有PHP与Vue基础的开发者,可用于研究支付渠道接入、订单并发处理、用户抢单、后台运营管理等完整业务闭环。包体约32.86MB,共3438个文件,以1…

2026/10/9 15:03:36 阅读更多 →
ThinkPHP6网盘系统源码实战:分片上传与文件管理后端搭建

ThinkPHP6网盘系统源码实战:分片上传与文件管理后端搭建

简介:这份源码资源面向PHP Web开发初学者与进阶学习者,提供一套基于ThinkPHP6框架构建的网盘系统完整实现,可用于理解文件上传、下载、管理等核心业务逻辑,也适合作为教育平台的教学案例或课程设计参考。压缩包共633个文件&#x…

2026/10/9 15:02:35 阅读更多 →
卫士盾V2.5.0:轻量级EXE网络验证中间件

卫士盾V2.5.0:轻量级EXE网络验证中间件

简介:本资源是一套面向EXE软件开发者的轻量化网络验证与加密管理解决方案,专为解决传统机器码绑定模式安全性低、部署复杂等痛点而设计,适用于教育培训类工具、共享软件及商业桌面应用的版权保护场景。压缩包共122个文件,含14个可…

2026/10/9 15:02:35 阅读更多 →

最新新闻

Kotlin Multiplatform for OpenHarmony 实战:为 Landscapist 实现图片加载适配

Kotlin Multiplatform for OpenHarmony 实战:为 Landscapist 实现图片加载适配

大家好,我是熊猫钓鱼,欢迎大家点赞关注! 摘要 本文聚焦如何在 OpenHarmony 上为 Kotlin Multiplatform 图片加载库 Landscapist(作者 skydoves,Compose 生态的图片加载库)做适配落地。Landscapist 相对 Ka…

2026/10/9 15:41:25 阅读更多 →
Windows 下 sonar-scanner 解压即用:代码质量门禁本地跑通指南

Windows 下 sonar-scanner 解压即用:代码质量门禁本地跑通指南

简介:SonarScanner 4.2.0.1873 是 SonarQube 生态中用于代码质量与安全扫描的命令行工具,面向需要在 Windows 平台落地静态代码分析的开发、测试与 DevOps 人员。它可深度识别代码复杂性、重复度、潜在缺陷、代码异味及安全漏洞,并支持 Java、…

2026/10/9 15:41:25 阅读更多 →
mysql.data.dll版本选型与加载避坑完整指南

mysql.data.dll版本选型与加载避坑完整指南

简介:一套汇集了 MySQL.Data.dll 多历史版本的开发资源,专为 .NET 开发者解决连接 MySQL 数据库时的版本兼容问题而整理。开发者能从中找到与项目目标框架匹配的组件版本,避免因 DLL 版本不匹配导致连接失败或运行时异常。压缩包共 210 个文件…

2026/10/9 15:41:25 阅读更多 →
基于Python和MySQL的医院管理系统课设:数据库表设计、事务与并发挂号实战

基于Python和MySQL的医院管理系统课设:数据库表设计、事务与并发挂号实战

简介:这份资源是面向计算机相关专业在校学生与初学者的医院管理系统完整项目包,基于Python与MySQL开发,可作为数据库课程设计、毕业设计或课程大作业的参考实现。项目围绕医院业务场景,涵盖数据初始化、数据库连接、数据查询、数据…

2026/10/9 15:41:24 阅读更多 →
Zookeeper 3.5.6源语详解:7个原子操作与协议一致性原理

Zookeeper 3.5.6源语详解:7个原子操作与协议一致性原理

1. 项目概述:Zookeeper源语集合(3.5.6)到底是什么?Zookeeper源语集合(3.5.6)不是某个神秘插件,也不是需要额外下载的“增强包”,它指的是 Apache Zookeeper 3.5.6 版本官方发行版中&…

2026/10/9 15:41:24 阅读更多 →
安卓记账本APP课程设计:从SQLite存储到图表展示的完整实现

安卓记账本APP课程设计:从SQLite存储到图表展示的完整实现

简介:面向计算机相关专业学生的安卓开发课程设计高分项目,提供记账本APP完整源代码与配套文档说明,适合作为期末大作业或课程设计参考。项目经导师指导并获98分评审,功能围绕日常记账场景展开,涵盖账目录入、记录管理、…

2026/10/9 15:40:23 阅读更多 →

日新闻

Java时间API实战:LocalDate、Date与ZonedDateTime的转换与避坑指南

Java时间API实战:LocalDate、Date与ZonedDateTime的转换与避坑指南

Java时间API这个话题,隔三差五就会在群里被翻出来讨论一次。上周还有个同事线上处理一个订单超时问题,排查到最后发现是ZonedDateTime序列化后时区丢了,用户在下单当天晚上看到的时间整整差了8个小时。这类问题几乎每个做Java开发的人都遇到过…

2026/10/9 0:00:49 阅读更多 →
EasyTier实践:从NAT穿透到子网代理的异地组网部署与排错

EasyTier实践:从NAT穿透到子网代理的异地组网部署与排错

前几个月我手头有好几台机器需要互相访问:办公室台式机、家里 NAS、还有一台云主机。如果只是偶尔传个文件倒还好,问题是工作场景经常要在几处环境之间来回切换,每次都先登录跳板机再层层代理,实在折腾。我先后试过端口映射、自建…

2026/10/9 0:00:49 阅读更多 →
AI Agent工程实战:从七要素到七个决策点的系统设计指南

AI Agent工程实战:从七要素到七个决策点的系统设计指南

AI Agent 这个词在过去一年里被反复提及,但真正动手搭过一套能跑起来的 Agent 系统的人都知道,从"知道它是什么"到"让它稳定干活"之间隔着一整套工程决策。我前后参与过几个 Agent 项目的落地,从最初用现成框架拼装&…

2026/10/9 0:01:50 阅读更多 →

周新闻

KT148A语音芯片外挂8002D功放的工程实践指南

KT148A语音芯片外挂8002D功放的工程实践指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/8 15:26:32 阅读更多 →
LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/8 15:26:40 阅读更多 →
ARM架构深度解析:从RISC设计理念到交叉编译实战

ARM架构深度解析:从RISC设计理念到交叉编译实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/9 10:11:06 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/8 21:13:17 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/8 15:26:17 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/9 6:17:20 阅读更多 →