mybatis generator 不生效的主因是 mapper.xml 未被正确加载或 generatorconfig.xml 配置错误;需检查 mybatis.mapper-locations 路径配置、xml 是否在类路径下、generatorconfig.xml 位置及格式是否正确,并确认 jdbc 连接与字段解析相关设置。

MyBatis Generator 生成的 mapper.xml 文件不生效?先查 mapperLocation 配置
生成的 XML 文件放对位置,不代表 Spring Boot 或 MyBatis 能自动加载它。最常见问题是 mybatis.mapper-locations 指向路径没覆盖到生成目录,或者用了 classpath: 却把文件放在了 src/main/java 下(默认只扫描 resources)。
- 生成的
*Mapper.xml必须放在类路径下,推荐统一放在src/main/resources/mapper/ -
application.yml中要显式声明:mybatis.mapper-locations=classpath:mapper/*.xml - 如果用的是 Maven,默认不会把
src/main/java下的 XML 打进 jar,哪怕你把 XML 和 Java 放一起也不行 - IDE 可能缓存资源路径,改完配置后清空 target 并重启应用
运行 mvn mybatis-generator:generate 报 No generator configuration found
这个错误不是缺插件,是缺配置文件。MyBatis Generator 不读 pom.xml 里的配置,必须提供独立的 generatorConfig.xml,且路径要对。
-
generatorConfig.xml默认需放在项目根目录或src/main/resources/,Maven 插件默认只认这两个位置 - 若放别处,得在
pom.xml的插件配置里加<configurationfile></configurationfile>指定绝对或相对路径 - 文件开头必须是
<?xml version="1.0" encoding="UTF-8"?>,且根节点为<generatorconfiguration></generatorconfiguration>,少一个字母都报错 - 注意 XML 中的
<classpathentry> 标签——它指向 JDBC 驱动 jar,路径写错或驱动没下载会导致后续连接失败,但此时错误信息可能被吞掉</classpathentry>
table 标签里用 domainObjectName 生成实体类名,但字段全变成 xxx0 或 xxx1
这是数据库字段名含大小写、下划线或关键字时,MBG 默认驼峰规则失效导致的。它不是随机重命名,而是因为解析失败后 fallback 到编号命名。
- 确认数据库连接 URL 加了
useUnicode=true&characterEncoding=UTF-8,否则某些字符集下字段名读取异常 - 在
<table> 中加 <code>enableCountByExample="false"等开关前,先检查delimitIdentifiers="true"—— 对 MySQL 尤其重要,否则带下划线的字段如user_name可能被截断 - 实体类字段名由
columnOverride或typeAlias控制,但更简单的是在<context></context>里设autoDelimitKeywords="true"和beginningDelimiter="`"、endingDelimiter="`" - PostgreSQL 用户注意:表名/字段名默认小写,若建表时用了双引号大写,MBG 必须配
delimitIdentifiers="true",否则找不到列 - 在
<context></context>中加enableSelectByExample="false"、enableDeleteByExample="false"等开关,对应禁用整类操作 - 若只要等值条件,保留
enableCountByExample="true"和enableSelectByExample="true",其余全关 - 更彻底的方式是自定义
plugin,继承org.mybatis.generator.plugins.ToStringPlugin改写 Example 类生成逻辑,但小项目没必要 - 注意:关了
enableUpdateByExample后,updateByExampleSelective也会消失,别只关一半
生成的 Example 类方法太多,实际只用 andXxxEqualTo(),怎么删减?
MBG 默认开启所有 Example 方法,但多数项目只用等值查询。关掉冗余方法能减少编译体积、降低理解成本,也能避免误用 andXxxLike() 导致 SQL 注入风险(虽然 MyBatis 本身防注入,但逻辑上不该暴露)。










