逆向工程报错The alias 'xxxx' is already mapped to the value xxxxxx

开发中使用generatorSqlmapCustom逆向工程生成实体类和映射器时,出现别名重复映射报错。起初修改类名易出错且麻烦,后发现是从mybatis - spring 2.0.1开始,存在匿名类时无法注册类型别名,导致别名映射出错,将其换成2.0.0或2.0.2版本可解决问题。

最近开发的时候用到了generatorSqlmapCustom逆向工程来生成实体类pojo和映射器mapper,但是运行时会报错The alias ‘xxxx’ is already mapped to the value xxxxxx,大概的意思就是说这个别名已经映射到某个值,也就是重复映射了。

一开始我只是把这个重复的类名修改,但是后面实体类越来越多,改的太麻烦,而且很容易改错导致mapper映射出问题,所以百度了半天,解决问题的也很少,最后在https://stackoverflow.com/questions/55902991/org-apache-ibatis-type-typeexception-the-alias-criterion-is-already-mapped-to这里找到了原因。
由于我的工程依赖的基本都是最新的jar版本,但是 从mybatis-spring 2.0.1开始存在匿名类时,无法注册类型别名。具体什么意思不是很清楚,mybatis-spring 2.0.1中的错误会导致存在多个sql时,别名映射出错。所以把mybatis-spring 换成2.0.0或者2.0.2版本就解决了问题。

你遇到的错误信息: ``` The alias 'TestUser' is already mapped to the value 'com.zy.system.domain.TestUser'. ``` 通常出现在使用 MyBatis 或 MyBatis-Plus 进行实体类与数据库表映射时,重复注册了别名(alias)。MyBatis 允许我们通过别名简化 XML 映射文件中的类型引用。例如,可以将 `com.zy.system.domain.TestUser` 映射为 `TestUser`,但在尝试重复注册该别名时就会抛出此异常。 --- ### 常见原因与解决办法: #### ✅ 原因 1:重复注册了别名 你可能在 `mybatis-config.xml` 或 Spring Boot 配置中重复注册了 `TestUser` 别名。 例如: ```xml <typeAliases> <typeAlias alias="TestUser" type="com.zy.system.domain.TestUser"/> <!-- 重复注册 --> <typeAlias alias="TestUser" type="com.zy.system.domain.AnotherUser"/> </typeAliases> ``` **解决方法:** 删除重复的别名注册。 --- #### ✅ 原因 2:使用了全局扫描 + 手动注册冲突 如果你配置了包扫描: ```xml <typeAliases> <package name="com.zy.system.domain"/> </typeAliases> ``` 并且又手动注册了别名: ```xml <typeAlias alias="TestUser" type="com.zy.system.domain.TestUser"/> ``` 那么 MyBatis 会尝试两次注册同一个别名,导致冲突。 **解决方法:** 要么只使用包扫描,要么只手动注册别名,不要同时使用。 --- #### ✅ 原因 3:多个 MyBatis 配置文件加载了相同的别名定义 例如多个模块都配置了别名,或者多个配置类加载了相同的映射。 **解决方法:** 检查 `mybatis-config.xml`、`application.yml` 和 Java 配置类(如 `MyBatisConfig.java`)中是否重复配置了别名。 --- ### ✅ 示例修复代码 **修复前:** ```xml <typeAliases> <package name="com.zy.system.domain"/> <typeAlias alias="TestUser" type="com.zy.system.domain.TestUser"/> </typeAliases> ``` **修复后:** ```xml <typeAliases> <package name="com.zy.system.domain"/> </typeAliases> ``` 或者仅保留手动注册: ```xml <typeAliases> <typeAlias alias="TestUser" type="com.zy.system.domain.TestUser"/> </typeAliases> ``` --- ### ✅ 如果你使用的是 Spring Boot + MyBatis-Plus: 在 `application.yml` 中配置别名包即可,无需手动注册: ```yaml mybatis-plus: type-aliases-package: com.zy.system.domain ``` --- ### ✅ 检查 Java 配置类 如果你有如下配置类: ```java @Configuration @MapperScan("com.zy.system.mapper") public class MyBatisConfig { @Bean public TypeAliasRegistry typeAliasRegistry() { TypeAliasRegistry registry = new TypeAliasRegistry(); registry.registerAlias("TestUser", TestUser.class); registry.registerAlias("TestUser", TestUser.class); // 重复注册 return registry; } } ``` **修复方法:** 删除重复的 `registerAlias` 调用。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值