MyBatis同名表不同库
MyBatis 代码生成器生成实体类/Mapper 时,如果不同数据库里有同名表,它是如何区分的
1. MyBatis Generator 生成原理
MBG 会根据 配置的数据库连接 + 表名 来生成代码。
配置示例(generatorConfig.xml
):
| <context id="MyContext" targetRuntime="MyBatis3">
<jdbcConnection driverClass="com.mysql.cj.jdbc.Driver"
connectionURL="jdbc:mysql://localhost:3306/db1"
userId="root"
password="root"/>
<javaModelGenerator targetPackage="com.example.model" targetProject="src/main/java"/>
<sqlMapGenerator targetPackage="mapper" targetProject="src/main/resources"/>
<javaClientGenerator type="XMLMAPPER" targetPackage="com.example.mapper" targetProject="src/main/java"/>
<table tableName="user" domainObjectName="UserDB1"/>
</context>
<context id="MyContext2" targetRuntime="MyBatis3">
<jdbcConnection driverClass="com.mysql.cj.jdbc.Driver"
connectionURL="jdbc:mysql://localhost:3306/db2"
userId="root"
password="root"/>
<javaModelGenerator targetPackage="com.example.model" targetProject="src/main/java"/>
<sqlMapGenerator targetPackage="mapper" targetProject="src/main/resources"/>
<javaClientGenerator type="XMLMAPPER" targetPackage="com.example.mapper" targetProject="src/main/java"/>
<table tableName="user" domainObjectName="UserDB2"/>
</context>
|
2. 区分方式
-
不同数据库用不同 context
配置
- 每个
context
对应一个数据库连接。
- MyBatis Generator 会生成独立的实体类、Mapper 文件。
-
指定 domainObjectName
-
即使表名相同,你可以通过 domainObjectName
给生成的实体类取不同名字,比如 UserDB1
、UserDB2
。
- 这样就不会冲突。
-
包名区分
-
可以让不同数据库的实体类生成在不同包下,例如:
-
com.example.db1.model.User
com.example.db2.model.User
-
XML Mapper 文件独立
-
Mapper XML 也会按照 tableName
+ domainObjectName
分开生成,避免覆盖。
3. 总结