一、问题
基于最新版的mybatis-generator-core:1.3.6生成的代码中,model和example在一个目录下,如下图,其实他们并不是一类bean。
dto和example生成在一个目录的原因是它们的生成目录都使用了
<javaModelGenerator targetPackage="com.iwill.model" targetProject="src/main/java">
<!-- 实体类 -->
<property name="enableSubPackages" value="true" />
<property name="" value=""/>
</javaModelGenerator>
这里的targetPackage。可以依照源码来找到答案。
二、实现
我们要实现可以灵活指定example生成目录的目标,需要扩展mybatis-generator-core:1.3.6
1、扩展dtd文件
<!ELEMENT context (property*, plugin*, commentGenerator?, (connectionFactory | jdbcConnection), javaTypeResolver?,javaModelGenerator,javaExampleGenerator?, sqlMapGenerator?, javaClientGenerator?, table+)>
<!ATTLIST context id ID #REQUIRED
defaultModelType CDATA #IMPLIED
targetRuntime CDATA #IMPLIED
introspectedColumnImpl CDATA #IMPLIED>
增加在context节点下增加javaExampleGenerator子节点,并且javaExampleGenerator的定义如下:
<!ELEMENT javaExampleGenerator (property*)>
<!ATTLIST javaExampleGenerator
targetPackage CDATA #REQUIRED
targetProject CDATA #REQUIRED>
2、修改源代码
具体不详细描述,主要有以下修改点:
a、解析javaExampleGenerator
b、设置JavaExampleGeneratorConfiguration的值
c、设置example的生成目录
d、配置所有用到该example的地方对应的import package
3、上传修改好后的jar
修改pom,指定版本为1.3.6.1。
<artifactId>mybatis-generator-core</artifactId>
<name>MyBatis Generator</name>
<version>1.3.6.1</version>
生成并上传对应的jar到本地:mvn package install -Dmaven.test.skip=true
4、引入jar包
<dependency>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-core</artifactId>
<version>1.3.6.1</version>
<scope>system</scope>
<systemPath>/Users/iwill/.m2/repository/org/mybatis/generator/mybatis-generator-core/1.3.6.1/mybatis-generator-core-1.3.6.1.jar</systemPath>
</dependency>
5、修改generatorConfig.xml
在1的基础上,这样就可以在generatorConfig.xml中添加javaExampleGenerator节点。
<javaExampleGenerator targetPackage="com.iwill.example" targetProject="src/main/java">
<!-- example -->
<property name="enableSubPackages" value="true" />
</javaExampleGenerator>
注:
在提交给mybatis-generator官方的代码中,经过author的建议,实现方式采用properties。配置如下:
<javaModelGenerator targetPackage="com.iwill.model" targetProject="src/main/java">
<!-- 实体类 -->
<property name="enableSubPackages" value="true" />
<property name="exampleTargetPackage" value="com.iwill.example"/>
</javaModelGenerator>
6、运行命令生成代码
运行mvn mybatis-generator:generate -e生成代码
这样就可以了。
三、扩展
如果不配置javaExampleGenerator节点的话,那么model和example还是生成在一个目录。
希望mybatis-generator-core的官方可以早日支持上述功能,可以给开发者更多选项来支持更多配置。
附:对应的样例项目的地址:https://github.com/yangjianzhou/mybatis-generator.git
对应的generator项目的地址:https://github.com/yangjianzhou/generator
对应分支为:mybatis-generator-1.3.6.1