MyBatis/MyBatis-Plus Invalid bound statement 报错全解析与排查指南
1. 问题概述为什么“找不到语句”会让人抓狂“Invalid bound statement (not found)” 这行报错信息对于任何一个使用 MyBatis 或 MyBatis-Plus 的 Java 开发者来说都堪称是“老熟人”了。表面上看它只是告诉你框架在执行时找不到对应的 SQL 语句映射。但背后隐藏的原因却五花八门从简单的配置疏漏到复杂的构建工具行为都可能成为罪魁祸首。我处理过无数次这类问题从新手到资深工程师几乎没人能完全避开这个坑。它不像空指针那样直接也不像语法错误那样有明确的提示更像是一个“寻宝游戏”的失败提示——你知道宝藏SQL就在项目的某个角落但 MyBatis 就是找不到它。这个问题的核心在于 MyBatis 的 SQL 映射机制。简单来说你写在 XML 文件里的select id”findUser”.../select或者通过注解Select(“SELECT * FROM user”)定义的 SQL需要在应用启动时被 MyBatis 正确地“绑定”到对应的 Mapper 接口方法上。这个绑定过程一旦出错就会抛出Invalid bound statement (not found)。对于 MyBatis-Plus由于其增强了便利性部分场景下掩盖了配置细节但当问题出现时排查思路本质上是相通的只是多了一些它特有的“快捷方式”可能带来的新坑。接下来我将结合我踩过的无数个坑为你系统性地梳理从最常见到最隐蔽的各种原因及其解决方案。无论你是正在被这个问题困扰还是想提前避坑这份汇总都能给你提供清晰的排查路径。2. 核心原因与系统性排查思路遇到这个报错最忌讳的就是毫无头绪地乱试。一个系统性的排查思路能帮你快速定位问题。我们可以把问题发生的环节拆解为资源是否存在 - 资源是否被正确加载 - 绑定关系是否建立。2.1 第一步确认“语句”本身是否存在且正确这是最基础的一步但也是最容易因粗心犯错的一步。1. 检查 XML 文件位置与命名规范MyBatis 默认约定大于配置。通常Mapper XML 文件需要和对应的 Mapper 接口放在同一目录下并且同名。例如接口com.example.mapper.UserMapper.java对应的 XML 文件应该是com/example/mapper/UserMapper.xml。如果你用的是 Maven 或 Gradle 的标准目录结构XML 文件需要放在src/main/resources下对应的相同包路径中而不是放在src/main/java里。因为构建工具通常不会把src/main/java下的.xml文件复制到最终的类路径classpath中。注意许多 IDE如 IntelliJ IDEA在src/main/java目录下创建.xml文件时可能会“智能地”将其标记为资源但在某些构建配置下这依然会失效。最稳妥的做法永远是遵循标准放在resources目录下。2. 检查 XML 文件内容与接口方法签名namespace属性XML 文件顶部的mapper namespace”...”必须填写 Mapper 接口的全限定名即包含包名的完整类路径一个字符都不能错。语句 IDselect id”selectById”中的id值必须与 Mapper 接口中的方法名完全一致。大小写敏感。参数与返回类型检查parameterType或resultType如果使用是否与接口方法定义匹配。对于 MyBatis-Plus使用实体类时通常可以省略但自定义复杂查询仍需注意。3. 检查注解使用如果使用注解方式如果你完全使用注解如Select而不用 XML请检查注解是否正确地标注在接口方法上并且 SQL 语句没有语法错误。2.2 第二步检查项目构建与资源过滤配置这是导致问题最常见、也最令人困惑的领域尤其是在使用 Maven 或 Gradle 时。1. Maven 资源过滤问题Maven 默认只处理src/main/resources目录下的资源文件。如果你将 XML 文件放在了src/main/java目录下虽然不推荐但有时项目结构如此你必须在pom.xml中显式配置资源过滤告诉 Maven 把这些.xml文件也复制到输出目录。build resources resource directorysrc/main/java/directory includes include**/*.xml/include /includes filteringfalse/filtering /resource resource directorysrc/main/resources/directory includes include**/*.xml/include include**/*.properties/include /includes filteringtrue/filtering !-- 如果需要替换占位符则设为true -- /resource /resources /build2. 检查构建输出目录清理项目并重新构建mvn clean compile或gradle clean build然后去target/classesMaven或build/classesGradle目录下查看对应的包路径里是否存在编译好的.class文件和你的.xml文件。如果.xml文件缺失那就是资源过滤或路径配置问题。3. 多模块项目中的路径问题在父子模块项目中配置可能更复杂。确保你的mybatis.mapper-locations配置路径能正确指向子模块中的 XML 文件。路径通常需要以classpath*:开头以支持跨模块扫描例如classpath*:com/example/**/mapper/*.xml。2.3 第三步核实 MyBatis 配置与扫描路径即使文件被正确打包也需要让 MyBatis 知道去哪里找它们。1. 配置文件中的mapper-locations配置在application.yml或application.propertiesSpring Boot或mybatis-config.xml中检查mapper-locations配置。这个配置告诉 MyBatis XML 映射文件的位置。一个常见的错误是路径模式pattern没有覆盖到你 XML 文件的实际位置。# application.yml 示例 mybatis: mapper-locations: classpath:mapper/**/*.xml # 或者更精确地classpath*:com/yourcompany/**/mapper/*.xml# application.properties 示例 mybatis.mapper-locationsclasspath*:mapper/**/*.xml2. 检查MapperScan注解在 Spring Boot 启动类或配置类上MapperScan(“com.example.mapper”)注解用于指定 MyBatis Mapper 接口的扫描包。这里的包路径必须包含你所有的 Mapper 接口。如果漏掉了某个包该包下的 Mapper 将不会被注册其对应的 XML 绑定自然也会失败。3. MyBatis-Plus 的特殊配置MyBatis-Plus 简化了配置但有其自己的规则。确保你正确配置了MapperScan通常扫描的是com.baomidou.mybatisplus.core.mapper.BaseMapper的子类所在包。另外MP 的全局配置mapper-locations同样重要如果自定义了 XML 位置必须在此指明。3. 高频疑难场景与深度解决方案排除了基础配置问题后还有一些场景更容易让人栽跟头。3.1 场景一IDEA 等 IDE 的“缓存”与“索引”欺骗这是一个经典的“开发环境正常打包后爆炸”问题的元凶之一。问题现象在 IntelliJ IDEA 中运行应用完全正常但通过mvn spring-boot:run命令行启动或用java -jar运行打包好的 JAR 文件时就报Invalid bound statement。根本原因IDEA 在运行或测试时其类加载机制可能与 Maven/Gradle 最终打包的机制有细微差别。IDEA 可能会直接从src/main/java目录加载.xml文件因为它“看到”了而 Maven 在没有正确配置资源过滤时不会将其打包。此外IDEA 强大的缓存和索引有时会掩盖一些配置错误让你误以为代码是正确的。解决方案始终使用 Maven/Gradle 命令进行验证在最终测试或部署前养成使用mvn clean compile spring-boot:run或gradle clean bootRun来启动应用的习惯这能模拟最接近生产环境的构建和运行状态。清理并重建项目在 IDEA 中执行File - Invalidate Caches and Restart...彻底清理缓存和索引然后重新构建。检查“Build Resources”配置在 IDEA 的模块设置File - Project Structure - Modules中确保你的src/main/java目录如果放 XML被标记为Sources的同时其下的.xml文件也被正确识别为资源文件通常 IDEA 会自动处理但有时会出错。3.2 场景二多数据源与动态数据源配置冲突当项目引入多数据源时MyBatis 的 SqlSessionFactory 和 Mapper 扫描可能会被重复定义或覆盖导致绑定混乱。问题现象配置了多数据源后部分 Mapper 工作正常部分报Invalid bound statement。解决方案明确指定每个 SqlSessionFactory 的mapper-locations在为每个数据源创建SqlSessionFactoryBean时必须单独为其设置setMapperLocations确保每个工厂只加载其对应的 Mapper XML 文件避免交叉或遗漏。Bean(name “dataSourceOneSqlSessionFactory”) public SqlSessionFactory dataSourceOneSqlSessionFactory(Qualifier(“dataSourceOne”) DataSource dataSource) throws Exception { SqlSessionFactoryBean bean new SqlSessionFactoryBean(); bean.setDataSource(dataSource); // 关键指定此数据源专属的 mapper xml 路径 bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources(“classpath:mapper/db1/**/*.xml”)); return bean.getObject(); }使用MapperScan时指定sqlSessionFactoryRef在配置类上使用MapperScan注解时通过sqlSessionFactoryRef属性明确关联到上面定义的特定SqlSessionFactoryBean。Configuration MapperScan(basePackages “com.example.mapper.db1”, sqlSessionFactoryRef “dataSourceOneSqlSessionFactory”) public class Db1MyBatisConfig { // ... }检查 MyBatis-Plus 多数据源配置如果使用 MyBatis-Plus 的多数据源插件dynamic-datasource-spring-boot-starter请严格按照其文档配置。通常只需要在 Mapper 接口或 Service 方法上使用DS(“数据源名称”)注解即可框架会自动路由。但要确保主数据源的配置正确因为默认的 Mapper 扫描和 XML 加载是基于主数据源的。3.3 场景三MyBatis-Plus 的“默认方法”与自定义 XML 的冲突MyBatis-Plus 为BaseMapper提供了大量内置方法如selectById,insert。当你试图在 XML 中定义一个同名的自定义 SQL 时可能会发生冲突或覆盖。问题现象为某个实体类继承了BaseMapper同时又在 XML 里写了一个同名的selectById方法期望自定义逻辑但执行时可能调用的仍然是 MP 的内置逻辑或者直接报错找不到语句如果 MP 的某些配置禁用了内置方法。解决方案避免同名自定义方法尽量使用不同的名称例如selectUserDetailById从根本上避免冲突。理解加载优先级在 MyBatis 中接口注解 XML 配置。但对于 MP 内置方法它们是通过 MP 的注入机制提前注册的。一个更清晰的做法是不要试图覆盖内置方法而是创建新的方法。检查global-config中的mapper-locations确保你的自定义 XML 路径被正确包含在 MP 的全局配置中否则 MP 可能只加载了内置方法而没加载你的自定义 XML。3.4 场景四JDK 版本、Spring Boot 版本与依赖冲突依赖的版本不兼容是一个深水区问题。问题现象项目升级了 JDK、Spring Boot 或 MyBatis/MyBatis-Plus 版本后突然出现大量绑定语句找不到的错误。解决方案核对官方兼容性矩阵访问 MyBatis-Spring-Boot-Starter 或 MyBatis-Plus 的官方 GitHub 页面或文档查看其与 Spring Boot 版本、JDK 版本的对应关系。检查依赖树使用mvn dependency:tree -Dincludesmybatis,mybatis-spring命令查看相关依赖的传递性版本确保没有引入不兼容的旧版本。常见的冲突点在于mybatis-spring这个桥接包。排除冲突依赖在pom.xml中对可能引入冲突的依赖进行排除。dependency groupIdcom.some.group/groupId artifactIdproblematic-artifact/artifactId exclusions exclusion groupIdorg.mybatis/groupId artifactIdmybatis/artifactId /exclusion /exclusions /dependency4. 终极排查工具与调试技巧当以上步骤都无法解决问题时你需要深入框架内部去看看到底发生了什么。4.1 开启 MyBatis 完整日志将 MyBatis 的日志级别调到DEBUG可以让你看到 SQL 语句绑定和执行的详细过程。# application.yml logging: level: org.mybatis: DEBUG com.example.mapper: TRACE # 将你的 mapper 包级别设为 TRACE 可以看到更细的绑定信息在启动日志中你会看到类似这样的行DEBUG o.m.s.SqlSessionUtils - Creating a new SqlSession DEBUG o.m.s.SqlSessionUtils - SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession...] was not registered for synchronization because synchronization is not active DEBUG o.m.s.TransactionFactory - Using transaction factory [org.springframework.jdbc.datasource.DataSourceTransactionManager] DEBUG o.m.c.d.p.PooledDataSource - PooledDataSource forcefully closed/removed all connections. DEBUG o.m.c.d.p.PooledDataSource - PooledDataSource forcefully closed/removed all connections. DEBUG o.m.c.d.p.PooledDataSource - PooledDataSource forcefully closed/removed all connections. DEBUG o.m.c.d.p.PooledDataSource - PooledDataSource forcefully closed/removed all connections. TRACE c.e.m.UserMapper.selectById - Preparing: SELECT id,name,age FROM user WHERE id? TRACE c.e.m.UserMapper.selectById - Parameters: 1(Long) TRACE c.e.m.UserMapper.selectById - Total: 1如果根本看不到Preparing这一行或者看到了但方法名不对就说明绑定环节出了问题。4.2 检查已加载的 Mapper 和 Statement在应用启动后可以通过编写一个简单的测试或使用 Spring 的ApplicationContext来检查。检查 Mapper 是否被 Spring 管理在代码中注入ApplicationContext然后获取你的 Mapper Bean如果不为 null说明接口已被扫描注册。Autowired private ApplicationContext context; // ... UserMapper userMapper context.getBean(UserMapper.class); System.out.println(userMapper); // 不应为null深入 SqlSessionFactory 查看已加载的语句高级调试获取SqlSessionFactoryBean从中可以拿到Configuration对象它内部维护了所有已注册的MappedStatement。Autowired private SqlSessionFactory sqlSessionFactory; // ... Configuration configuration sqlSessionFactory.getConfiguration(); // 获取所有已注册的 Statement ID SetString statementNames configuration.getMappedStatementNames(); statementNames.forEach(System.out::println);查看打印出来的全限定方法名如com.example.mapper.UserMapper.selectById是否包含你报错的那个方法。如果不包含那就是根本没加载成功。4.3 一个被忽略的角落接口方法默认修饰符这是一个非常隐蔽的坑。在 Java 8 及以上接口方法可以定义default实现。如果你在 Mapper 接口中定义了一个default方法MyBatis 会尝试为它寻找对应的 SQL 映射如果找不到就会报Invalid bound statement。解决方案Mapper 接口中不要使用default方法。所有需要 SQL 映射的方法都应该是抽象方法。如果需要有默认逻辑可以考虑使用PostConstruct在实现类中初始化或者使用 MyBatis 的Lang注解配合脚本驱动但这属于高级用法绝大多数业务场景应避免在 Mapper 接口中写default方法。5. 问题排查速查表与预防建议为了方便快速定位我将常见原因和对应检查点整理成下表排查方向具体检查点可能的现象或错误配置示例文件与路径XML 文件是否在target/classes对应包下文件未生成检查 Mavenpom.xml的resources配置。XML 的namespace是否与接口全限定名一致namespace”com.example.UserMapper”但接口是com.example.mapper.UserMapper。语句id是否与方法名一致id”selectUser”但方法名为selectUserById。构建配置Mavenpom.xml是否配置了resources包含.xmlXML 文件放在src/main/java但未配置资源过滤。是否执行了clean compile残留的旧编译文件导致问题。框架配置application.yml中mybatis.mapper-locations路径是否正确配置为classpath:mapper/*.xml但 XML 在子目录mapper/user/下。MapperScan注解的包路径是否包含所有 MapperMapperScan(“com.a.mapper”)漏掉了com.b.mapper包。环境与依赖是否在 IDE 中运行正常但打包后失败IDEA 缓存问题或构建配置问题。MyBatis、MyBatis-Spring、MyBatis-Plus 版本是否兼容引入旧版本mybatis-spring导致冲突。代码层面Mapper 接口中是否有default方法为default方法寻找不存在的 SQL 映射。多数据源配置中Mapper 扫描是否指定了正确的SqlSessionFactory多个SqlSessionFactory未正确隔离 Mapper。预防性建议标准化项目结构严格遵守“接口在src/main/java/包下XML 在src/main/resources/相同包下”的约定。使用 Maven/Gradle 命令验证开发阶段就经常使用构建工具的命令行进行编译和运行测试提前暴露环境差异问题。代码审查关注点在代码审查时将 Mapper 接口的namespace、id以及MapperScan的包路径作为审查项。编写集成测试为关键的 Mapper 方法编写 Spring Boot 集成测试SpringBootTest这些测试会在接近真实的环境下运行能有效发现绑定问题。谨慎升级升级 Spring Boot、MyBatis 等核心依赖时先在小模块或分支上测试并仔细阅读官方升级指南中的破坏性变更说明。解决 “Invalid bound statement (not found)” 的过程本质上是对 MyBatis 资源加载、绑定机制和项目构建流程的一次深度理解。每一次排查都是对项目配置健康度的一次体检。希望这份汇总能成为你工具箱里的一把利器下次再遇到这个“老朋友”时可以淡定地快速解决它。

相关新闻

Grok 4.5 vs 4.3六维实测:推理、代码、长文本对比评测

Grok 4.5 vs 4.3六维实测:推理、代码、长文本对比评测

前言:Grok 4.5到底比4.3强了多少? Grok每次更新都说"全面提升",但开发者真正关心的是:之前踩过的坑修了没有?写代码能直接用了吗?复杂Bug能定位了吗?这些问题光看官方更新日志答不了…

2026/10/10 14:25:51 阅读更多 →
vDisk在线考试系统网络异常分析与优化策略

vDisk在线考试系统网络异常分析与优化策略

1. vDisk考试环境网络异常问题解析在基于vDisk技术的在线考试环境中,网络连接质量直接影响着考试系统的稳定性和考生体验。当网络出现异常波动时,可能会引发一系列连锁反应,从简单的操作延迟到严重的考试中断。作为参与过多个在线考试系统部署…

2026/10/10 17:20:02 阅读更多 →
STM32 GPIO实战入门:从LED闪烁到蜂鸣器驱动的嵌入式开发基础

STM32 GPIO实战入门:从LED闪烁到蜂鸣器驱动的嵌入式开发基础

1. 从点灯到发声:STM32 GPIO的实战入门如果你刚拿到一块STM32开发板,看着密密麻麻的引脚和复杂的开发环境,可能会有点无从下手。别担心,几乎所有嵌入式工程师的“Hello World”都是从点亮一颗LED开始的,这几乎是行业内…

2026/10/5 12:47:13 阅读更多 →

最新新闻

Python商品推荐系统实践:协同过滤算法与踩坑指南

Python商品推荐系统实践:协同过滤算法与踩坑指南

简介:这是一份以Python实现的商品推荐系统完整项目包,面向希望掌握推荐算法落地流程的学生、数据分析与机器学习初学者。项目基于约15万用户、12万商品及对应特征的脱敏数据集,完整覆盖数据加载、特征工程、基于内容推荐、协同过滤与矩阵分解…

2026/10/12 13:24:36 阅读更多 →
农业物联网数据传输模块参数配置实战指南

农业物联网数据传输模块参数配置实战指南

1. 项目概述:一个被低估的农业物联网“神经末梢”“小马智农数据传输模块参数”——这串词乍看平平无奇,像设备说明书里随手翻过的一页。但我在某农业物联网实验室连续三年参与田间部署后发现,它其实是整套智慧农业系统里最常出问题、也最容易…

2026/10/12 13:24:36 阅读更多 →
MATLAB评价与预测模型实战:从AHP、熵权法到TOPSIS与时间序列

MATLAB评价与预测模型实战:从AHP、熵权法到TOPSIS与时间序列

做评价和预测模型这块有些年头了,从最开始只会套模板跑TOPSIS,到后来被导师逼着搞懂AHP权重到底是怎么算出来的,再到现在能闭着眼在MATLAB里搭一套完整的组合模型流程——这条路踩过的坑不少,但积累下的经验也确实值钱。这篇文章就…

2026/10/12 13:24:36 阅读更多 →
Java后端社招面试指南:并发JVM数据库与系统设计全解析

Java后端社招面试指南:并发JVM数据库与系统设计全解析

最近整理了一份某老牌互联网公司Java后端社招的面试实录,发现不少题目其实没有想象中那么玄。整个过程大概是:简历筛过后两轮技术电话面,接着现场三面,最后HR面收尾。这份面试名单里的题目和答案,非常适合准备社招的同…

2026/10/12 13:24:36 阅读更多 →
基于Vue+Node.js的无人机与机器人健康预警系统实战

基于Vue+Node.js的无人机与机器人健康预警系统实战

做无人机和机器人健康预警这个需求,我是被一次“毫无预兆”的返航逼出来的。当时一台六旋翼在物流巡检途中直接触发低电量保护迫降,落地后发现其中一组电池已经轻微鼓包。问题不在电池本身,而在于监控后台只看了剩余电量,完全没有…

2026/10/12 13:24:36 阅读更多 →
C语言经典题61-70精讲:数组、递归、指针、结构体与链表实战

C语言经典题61-70精讲:数组、递归、指针、结构体与链表实战

手上一套一百道的C语言经典题库,不少朋友刷到61到70这个区间就卡住了。前面六十题基本属于“语法热身”,分支、循环、数组的读写占了一大半,到了61到70这批题,局面忽然变了:递归、指针、结构体、链表开始轮番上阵。这个…

2026/10/12 13:23:36 阅读更多 →

日新闻

复古胶片颗粒感噪点合成器:Canvas ImageData 像素高斯杂色注入算法

复古胶片颗粒感噪点合成器:Canvas ImageData 像素高斯杂色注入算法

在数码相机、高清显示屏与现代矢量图形技术高度发达的今天,画面可以做到绝对的锐利、平滑与无瑕。然而,当一张秋日手账插画或拍立得照片过于“平整无瑕”时,往往会散发出一种冰冷生硬的“数码塑料感(Digital Plasticity&#xff0…

2026/10/12 0:00:59 阅读更多 →
活字印刷古籍线装排版:Canvas 竖排文字与栏线自适应算法

活字印刷古籍线装排版:Canvas 竖排文字与栏线自适应算法

在现代网页与移动端设计中,横排(Horizontal Layout)早已经成为了绝对的主流。然而,当我们翻开泛黄的线装古籍、宋版木刻诗集,或是欣赏一张茶道雅集的手写便签时,那种**自上而下纵向书写、自右向左逐列铺展&…

2026/10/12 0:00:59 阅读更多 →
周日晚间的“精神松绑减震器”:无压力情绪倾倒箱与温和轻声陪伴

周日晚间的“精神松绑减震器”:无压力情绪倾倒箱与温和轻声陪伴

每到周日的晚上八点到十点,很多人心里都会悄悄亮起一盏警示灯。 在心理学上,这种现象有一个专门的称谓——“周日夜晚焦虑症(Sunday Scaries)”。明天又是周一,闹钟又要重新在七点响彻卧房;脑海里仿佛有一个…

2026/10/12 0:00:59 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/12 0:16:30 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/12 0:16:38 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/12 0:16:43 阅读更多 →

月新闻

我发现了一个新思路:用 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/11 10:45:37 阅读更多 →
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/11 14:36:53 阅读更多 →
黑夜航拍船只数据集训练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/11 14:36:54 阅读更多 →