MyBatis generator生成xml 自动生成数据库映射文件教程

1次阅读

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

MyBatis generator生成xml 自动生成数据库映射文件教程

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:generateNo 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 生成实体类名,但字段全变成 xxx0xxx1

这是数据库字段名含大小写、下划线或关键字时,MBG 默认驼峰规则失效导致的。它不是随机重命名,而是因为解析失败后 fallback 到编号命名。

  • 确认数据库连接 URL 加了 useUnicode=true&characterEncoding=UTF-8,否则某些字符集下字段名读取异常
  • <table> 中加 <code>enableCountByExample="false" 等开关前,先检查 delimitIdentifiers="true" —— 对 mysql 尤其重要,否则带下划线的字段如 user_name 可能被截断
  • 实体类字段名由 columnOverridetypeAlias 控制,但更简单的是在 <context></context> 里设 autoDelimitKeywords="true"beginningDelimiter="`"endingDelimiter="`"
  • postgresql 用户注意:表名/字段名默认小写,若建表时用了双引号大写,MBG 必须配 delimitIdentifiers="true",否则找不到列
  • 生成的 Example 类方法太多,实际只用 andXxxEqualTo(),怎么删减?

    MBG 默认开启所有 Example 方法,但多数项目只用等值查询。关掉冗余方法能减少编译体积、降低理解成本,也能避免误用 andXxxLike() 导致 SQL 注入风险(虽然 MyBatis 本身防注入,但逻辑上不该暴露)。

    • <context></context> 中加 enableSelectByExample="false"enableDeleteByExample="false" 等开关,对应禁用整类操作
    • 若只要等值条件,保留 enableCountByExample="true"enableSelectByExample="true",其余全关
    • 更彻底的方式是自定义 plugin继承 org.mybatis.generator.plugins.ToStringPlugin 改写 Example 类生成逻辑,但小项目没必要
    • 注意:关了 enableUpdateByExample 后,updateByExampleSelective 也会消失,别只关一半

    MyBatis Generator 的核心陷阱不在语法,而在“生成”和“运行”两个阶段的环境割裂——XML 路径、类路径、JDBC 元数据读取、IDE 编译行为,每个环节都可能静默失败。调不通时,先看控制台有没有打印“Parsing configuration…”和“Connecting to database…”,没这两句,大概率卡在配置或驱动层。

text=ZqhQzanResources