mybatis generator在idea中不起作用的根本原因是其本质为命令行工具,idea插件仅作启动器,需手动配置generatorconfig.xml路径、显式添加jdbc驱动jar(如mysql-connector-java-8.0.33.jar)、修正url参数(如allowpublickeyretrieval=true),并注意类型映射、targetruntime设置及classpathentry路径准确性。

MyBatis Generator插件在IDEA里根本不起作用?
不是插件没装对,是它压根不支持 IDEA 原生集成——MyBatis Generator 本身是个命令行工具,所谓“IDEA 插件”只是个启动器,底层仍依赖你本地的 mybatis-generator-core JAR 和配置文件。常见现象是点击生成后无反应、报 ClassNotFoundException: org.mybatis.generator.api.ShellCallback 或直接卡死。
- 别信“一键安装插件就完事”的说法,必须手动配好
generatorConfig.xml路径和 JDBC 驱动 JAR - 插件默认用 IDE 自带的 classpath,但你的数据库驱动(比如
mysql-connector-java-8.0.33.jar)往往不在里面,得显式添加到插件的 “Additional dependencies” 里 - 如果项目用 Maven 管理,更推荐绕过插件,直接用
mvn mybatis-generator:generate,避免 classloader 冲突
generatorConfig.xml 中 jdbcConnection 配置连不上 MySQL 8+?
MySQL 8 默认启用 caching_sha2_password 认证,而老版本 mybatis-generator-core(如 1.3.7)用的 mysql-connector-java 5.x 驱动不兼容,会抛 Public Key Retrieval is not allowed 或直接拒绝连接。
- 升级驱动:用
mysql-connector-java-8.0.33.jar替换掉旧版,并在jdbcUrl后追加参数:&allowPublicKeyRetrieval=true&useSSL=false&serverTimezone=GMT%2B8 - 检查
classPathEntry是否指向了正确的 JAR 文件路径,IDEA 插件里这个字段容易填成相对路径或漏斜杠,建议用绝对路径(如/Users/xxx/.m2/repository/mysql/mysql-connector-java/8.0.33/mysql-connector-java-8.0.33.jar) - 用户名密码别写在 XML 里,改用
properties引入,避免提交到 Git;<property name="driverClass" value="${driver}"></property>这种写法要配合外部generator.properties
生成的 Mapper 接口里为什么没有 @Select 注解?
这是 context 的 targetRuntime 设置导致的。默认值是 MyBatis3,它生成 XML 映射文件;设成 MyBatis3Simple 才会把 SQL 写进注解里,但代价是失去动态 SQL 支持。
- 想用注解又保留动态 SQL?不行。
MyBatis3和MyBatis3DynamicSql(需 MyBatis 3.4+)才支持,后者生成的是类型安全的 DSL 类,不是注解 - 如果你用 Spring Boot + MyBatis-Plus,其实没必要用 MBG——
MyBatis-Plus的代码生成器(AutoGenerator)更灵活,且原生支持 Lombok、Swagger 注解注入 - 注意
javaClientGenerator的type属性:设为XMLMAPPER才生成 XML;设为MIXEDMAPPER会同时生成 XML 和接口方法,但 XML 仍是主入口
生成的实体类字段全是 String,数字类型没映射对?
MBG 默认用 JDBC 的 getColumnName() 和 getColumnTypeName() 推断 Java 类型,但不同数据库驱动返回的 typeName 差异很大。PostgreSQL 返回 int4,MySQL 返回 BIGINT,而 MBG 内置类型映射表只认标准 SQL 类型名(如 INTEGER),一不匹配就退化成 String。
立即学习“Java免费学习笔记(深入)”;
- 在
generatorConfig.xml的context下加<javatyperesolver type="org.mybatis.generator.internal.types.JavaTypeResolverDefaultImpl"></javatyperesolver>,再嵌套<property name="forceBigDecimals" value="false"></property> - 更稳妥的做法是自定义
columnOverride:对关键字段强制指定 Java 类型,比如<columnoverride column="user_id" javatype="java.lang.Long"></columnoverride> - Oracle 用户特别注意:
NUMBER(1)默认映射成BigDecimal,得加<columnoverride column="flag" javatype="java.lang.Boolean" jdbctype="NUMERIC"></columnoverride>并配套写 typeHandler










