一种对 MyBatisGenerator 生成的 Mapper

2019-09-25  本文已影响0人  雁过留声_泪落无痕

通过数据库自动生成 mapper model 文件的过程,通常会考虑使用 IDEA 中的 Mybatis plugin 插件,但是不是特别灵活,遂考虑自行生成。

  1. 编辑 generatorConfig.xml
  2. 编写 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);
        }
    }
}
  1. 想要对自动生成的文件添加自定义的注释,可以在 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 即可。

  1. 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();
}
上一篇 下一篇

猜你喜欢

热点阅读