lijian66688888 发表于 2019-7-22 10:50

mybatisgenerator源码修改

开发过程中遇到如下问题:mybatisgenerator生成entity和mapper后,自己添加方法后再生成会覆盖。
解决思路:修改源码,先判断文件是否存在,存在则跳过。
通过导入mybaitsgenerator源码,调试跟踪发现,org.mybatis.generator.api.MyBatisGenerator下的writeGeneratedJavaFile、writeGeneratedXmlFile方法中有判断文件是否存在,如下
private void writeGeneratedJavaFile(GeneratedJavaFile gjf, ProgressCallback callback)
            throws InterruptedException, IOException {
      File targetFile;
      String source;
      try {
            File directory = shellCallback.getDirectory(gjf
                  .getTargetProject(), gjf.getTargetPackage());
            targetFile = new File(directory, gjf.getFileName());
            if (targetFile.exists()) {
                if (shellCallback.isMergeSupported()) {
                  source = shellCallback.mergeJavaFile(gjf
                            .getFormattedContent(), targetFile,
                            MergeConstants.getOldElementTags(),
                            gjf.getFileEncoding());
                } else if (shellCallback.isOverwriteEnabled()) {
                  source = gjf.getFormattedContent();
                  warnings.add(getString("Warning.11", //$NON-NLS-1$
                            targetFile.getAbsolutePath()));
                } else {
                  source = gjf.getFormattedContent();
                  targetFile = getUniqueFileName(directory, gjf
                            .getFileName());
                  warnings.add(getString(
                            "Warning.2", targetFile.getAbsolutePath())); //$NON-NLS-1$
                }
            } else {
                source = gjf.getFormattedContent();
            }

            callback.checkCancel();
            callback.startTask(getString(
                  "Progress.15", targetFile.getName())); //$NON-NLS-1$
            writeFile(targetFile, source, gjf.getFileEncoding());
      } catch (ShellException e) {
            warnings.add(e.getMessage());
      }
    }
private void writeGeneratedXmlFile(GeneratedXmlFile gxf, ProgressCallback callback)
            throws InterruptedException, IOException {
      File targetFile;
      String source;
      try {
            File directory = shellCallback.getDirectory(gxf
                  .getTargetProject(), gxf.getTargetPackage());
            targetFile = new File(directory, gxf.getFileName());
            if (targetFile.exists()) {
                if (gxf.isMergeable()) {
                  source = XmlFileMergerJaxp.getMergedSource(gxf,
                            targetFile);
                } else if (shellCallback.isOverwriteEnabled()) {
                  source = gxf.getFormattedContent();
                  warnings.add(getString("Warning.11", //$NON-NLS-1$
                            targetFile.getAbsolutePath()));
                } else {
                  source = gxf.getFormattedContent();
                  targetFile = getUniqueFileName(directory, gxf
                            .getFileName());
                  warnings.add(getString(
                            "Warning.2", targetFile.getAbsolutePath())); //$NON-NLS-1$
                }
            } else {
                source = gxf.getFormattedContent();
            }

            callback.checkCancel();
            callback.startTask(getString(
                  "Progress.15", targetFile.getName())); //$NON-NLS-1$
            writeFile(targetFile, source, "UTF-8"); //$NON-NLS-1$
      } catch (ShellException e) {
            warnings.add(e.getMessage());
      }
    }

只需要在判断文件是否存在里面加一句:return;


附:第一次发帖子,有不对的地方多多指教。
页: [1]
查看完整版本: mybatisgenerator源码修改