通过数据库自动生成 mapper model 文件的过程,通常会考虑使用 IDEA 中的 Mybatis plugin 插件,但是不是特别灵活,遂考虑自行生成。
- 编辑 generatorConfig.xml
- 编写 GeneratorMain.java 文件
public class GeneratorMain {
public static void main(String[] args) throws Exception {
// MBG 执行过程中的警告信息
List<String> warnings = new ArrayList<String>();
// 当生成的代码重复时,覆盖原代码
boolean overwrite = true;
// 读取我们的 MBG 配置文件
InputStream is = GeneratorMain.class.getResourceAsStream("/generatorConfig.xml");
ConfigurationParser cp = new ConfigurationParser(warnings);
Configuration config = cp.parseConfiguration(is);
is.close();
DefaultShellCallback callback = new DefaultShellCallback(overwrite);
// 创建 MBG
MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config, callback, warnings);
// 执行生成代码
myBatisGenerator.generate(null);
// 输出警告信息
for (String warning : warnings) {
System.out.println(warning);
}
}
}
- 想要对自动生成的文件添加自定义的注释,可以在 generatorConfig.xml 中进行配置
<commentGenerator type="com.xxx.CommentGenerator">
<!-- 是否去除自动生成的注释 true:是 : false:否 -->
<property name="suppressAllComments" value="true" />
<property name="suppressDate" value="true" />
<property name="addRemarkComments" value="true"/>
</commentGenerator>
在 CommentGenerator.java 中可以一定程度上定制注释并添加注解,但是没有找到在 XxxMapper.java 中添加注解的办法,查看 MyBatisGenerator.java 源码,发现该文件相对比较独立,于是拷贝源码复制到新建立的 MyBatisGeneratorPlus.java 中,并修改 GeneratorMain.java 中的 MyBatisGenerator 为 MyBatisGeneratorPlus,重新运行 GeneratorMain.java 即可。
- MyBatisGeneratorPlus.java 中只需要修改 writeFile 方法:
private void writeFile(File file, String content, String fileEncoding) throws IOException {
FileOutputStream fos = new FileOutputStream(file, false);
OutputStreamWriter osw;
if (fileEncoding == null) {
osw = new OutputStreamWriter(fos);
} else {
osw = new OutputStreamWriter(fos, fileEncoding);
}
BufferedWriter bw = new BufferedWriter(osw);
bw.write(content);
bw.close();
}
修改为
private void writeFile(File file, String content, String fileEncoding) throws IOException {
// 添加 @Abc注解,注意同时加上 import 语句
if (file.getName().endsWith("Mapper.java")) {
content = content.replaceFirst("public interface", "import com.xxx.Abc;\n\n@Abc\npublic interface");
}
FileOutputStream fos = new FileOutputStream(file, false);
OutputStreamWriter osw;
if (fileEncoding == null) {
osw = new OutputStreamWriter(fos);
} else {
osw = new OutputStreamWriter(fos, fileEncoding);
}
BufferedWriter bw = new BufferedWriter(osw);
bw.write(content);
bw.close();
}
网友评论