1. 程式人生 > >Mybatis generator mapper檔案重新生成不會覆蓋原檔案

Mybatis generator mapper檔案重新生成不會覆蓋原檔案

問題:

使用標題所述的generator,在生成xxxMapper.xml檔案後,再生成一次,新的內容會以追加的方式加入到原來的xxxMapper.xml檔案中。(通常我是希望覆蓋的)

尋找到的原因:

    在IntrospectedTableMyBatis3Impl.getGeneratedXmlFiles方法中,isMergeable值被寫死為true了。

GeneratedXmlFile gxf = new GeneratedXmlFile(document,
    getMyBatis3XmlMapperFileName(), getMyBatis3XmlMapperPackage(),
    context.getSqlMapGeneratorConfiguration
().getTargetProject(), true, context.getXmlFormatter());

而MyBatisGenerator.writeGeneratedXmlFile方法中使用到該屬性了。程式碼如下:

if (targetFile.exists()) {
    if (gxf.isMergeable()) {
        source = XmlFileMergerJaxp.getMergedSource(gxf, targetFile);
    } else if (shellCallback.isOverwriteEnabled()) {
        source = gxf.getFormattedContent
(); warnings.add(getString("Warning.11", 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
(); }

關鍵點就在第2行,結果導致每次重新生成後都是追加。

解決方法:

我認為這是一個小bug,為了不用修改原始碼,重新打包,造成包不一致,我還是希望在執行時處理它。經過一番折騰,終於找到方法了。使用反射在執行時把isMergeable強制改成false。

具體做法是:

1.編寫一個外掛

public class OverIsMergeablePlugin extends PluginAdapter {
    @Override
    public boolean validate(List<String> warnings) {
        return true;
    }

    @Override
    public boolean sqlMapGenerated(GeneratedXmlFile sqlMap, IntrospectedTable introspectedTable) {
        try {
            Field field = sqlMap.getClass().getDeclaredField("isMergeable");
            field.setAccessible(true);
            field.setBoolean(sqlMap, false);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return true;
    }
}

2.配置generatorConfig.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE generatorConfiguration
  PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
  "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">

<!-- 詳細文件 http://www.mybatis.org/generator/configreference/xmlconfig.html -->
<generatorConfiguration>

    <properties resource="config.properties" />

    <context id="generatorContext" targetRuntime="${targetRuntime}">

        <plugin type="com.wql.customer.OverIsMergeablePlugin" />

        <commentGenerator type="com.wql.customer.CustomerCommentGenerator">
            <property name="suppressDate" value="false" />
            <property name="suppressAllComments" value="false" />
            <property name="addRemarkComments" value="true" />
            <property name="dateFormat" value="yyyy-MM-dd HH:mm:ss" />
        </commentGenerator>

        <jdbcConnection driverClass="${jdbc.driver}" connectionURL="${jdbc.url}" userId="${jdbc.username}" password="${jdbc.password}"></jdbcConnection>

        <javaTypeResolver>
            <property name="forceBigDecimals" value="false" />
        </javaTypeResolver>

        <javaModelGenerator targetPackage="${model.package}" targetProject="${target.project}">
            <property name="enableSubPackages" value="true" />
            <property name="trimStrings" value="true" />
        </javaModelGenerator>

        <sqlMapGenerator targetPackage="${xml.package}" targetProject="${target.project.resources}">
            <property name="enableSubPackages" value="true" />
        </sqlMapGenerator>

        <javaClientGenerator targetPackage="${mapper.package}" targetProject="${target.project}" type="XMLMAPPER">
            <property name="enableSubPackages" value="true" />
        </javaClientGenerator>

        <table tableName="${tableName}" domainObjectName="${domainObjectName}" enableCountByExample="${enableCountByExample}" enableUpdateByExample="${enableUpdateByExample}" enableDeleteByExample="${enableDeleteByExample}" enableSelectByExample="${enableSelectByExample}" selectByExampleQueryId="${selectByExampleQueryId}" />

    </context>
</generatorConfiguration>

3.執行生成程式

public static void main(String[] args) throws Exception {
        List<String> warnings = new ArrayList<String>();
        boolean overwrite = true;
        ConfigurationParser cp = new ConfigurationParser(warnings);
        Configuration config = cp.parseConfiguration(Main.class.getClassLoader().getResourceAsStream("generatorConfig.xml"));
        DefaultShellCallback callback = new DefaultShellCallback(overwrite);
        MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config, callback, warnings);
        myBatisGenerator.generate(null);
        System.out.println("----ok----");
    }

大功告成!嘻嘻!(對了,最後那個overwrite一定要設定為true哦,不然的話,每次生成的檔案都會在檔名最後加個“點數字”—原因從前面貼的第二段程式碼中可以找到)

相關推薦

Mybatis generator mapper檔案重新生成覆蓋檔案

問題: 使用標題所述的generator,在生成xxxMapper.xml檔案後,再生成一次,新的內容會以追加的方式加入到原來的xxxMapper.xml檔案中。(通常我是希望覆蓋的) 尋找到的原因: 在IntrospectedTableMy

MyBatis Generator】程式碼自動生成工具 generatorConfig.xml配置檔案詳解

MyBatis Generator官網地址:http://www.mybatis.org/generator/index.html MyBaris Generator中文地址:http://mbg.cndocs.ml/ 在MBG中,最主要也最重要的,就是generatorConfig.xml

火狐瀏覽器中設定開啟新地址時,覆蓋頁面的方法

近期使用火狐瀏覽器發現開啟新標籤頁時總是會覆蓋原頁面,百度了好多方法都是在選項中-設定標籤頁, 然而,在我用的瀏覽器版本里均無此項可設定,一直百度總算找到一種辦法,親試絕對有效! 1、本人用的是火狐瀏覽器62.0.3版本,如圖,同我版本相同或以上的版本都可用此方法; 2、此火狐瀏覽器新建標籤頁,輸入

火狐瀏覽器中設置打開新地址時,覆蓋頁面的方法

希望 技術 col 有效 book 覆蓋 圖片 bsp 頁面 近期使用火狐瀏覽器發現打開新標簽頁時總是會覆蓋原頁面,百度了好多方法都是在選項中-設置標簽頁, 然而,在我用的瀏覽器版本裏均無此項可設置,一直百度總算找到一種辦法,親試絕對有效! 1、本人用的是火狐瀏覽器62.0

MyBatis Generator工具使用(自動生成實體類、SQL定義檔案Mapper介面)

建立一個ovls-generator工程 核心是MyBatis Generator(它可以生成POJO(實體類)和sql.xml及sql方法和mapper(DAO介面)) 一.導包 mysql-connector-java mybatis mybatis-generator-co

mybatis generator為實體類生成自定義註釋(讀取數據庫字段的註釋添加到實體類,修改源碼)

super() .cn setter www. nts art pca target private 我們都知道mybatis generator自動生成的註釋沒什麽實際作用,而且還增加了代碼量。如果能將註釋從數據庫中撈取到,不僅能很大程度上增加代碼的可讀性,而且減少了後期

mybatis generator為實體類生成自定義註釋(讀取資料庫欄位的註釋新增到實體類,修改原始碼)

我們都知道mybatis generator自動生成的註釋沒什麼實際作用,而且還增加了程式碼量。如果能將註釋從資料庫中撈取到,不僅能很大程度上增加程式碼的可讀性,而且減少了後期手動加註釋的工作量。 1、首先定義註釋生成外掛 package com.cmbc.datapla

Mybatis Generator 結合Lombok使用,生成get,set,生成資料庫註釋

今天折騰了大半天,就搞這東西了,不太熟悉這個東西,需要匯出找資料和文件。 也感謝網上的一些小夥伴提供的一些資料,提供了很多幫助,也讓我有了一些想法: 可以參考這位小夥伴的操作步驟,我也是在這基礎上再做的一些改進。 在這位小夥伴的基礎上,我發現有很多東西沒有生成,

mybatis generator修改默認生成的sql模板

odi tor 項目 version 地址 size ref com xml文件 相關連接:    mybatis-generator擴展教程系列 -- 自定義sql xml文件   git項目地址mybatis generator修改默認生成的sql模板

mybatis-generator 代碼自動生成工具包

數據 pan mic 代碼自動生成 提示 mys .cn dao core 怎麽用mybatis-gennerator插件自動生成mybatis所需要的dao、bean、mapper xml文件。請看↓ 1、在D盤新建一個文件夾,命名:generator(或者其他盤其他名字

Mybatis Generator(簡稱MBG)的最完整配置檔案

<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE generatorConfiguration PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN

使用Intellij IDEA在maven專案中整合mybatis-generator外掛,自動生成程式碼

1.在dependencies下新增: <dependency> <groupId>org.mybatis.generator</groupId> <artifactId>mybatis-generator-core</artif

exclipse使用maven mybatis-generator-maven-plugin 外掛生成程式碼的坑

  按照網上的步驟使用maven配置生成mybatis程式碼就是行,沒有報錯也沒有執行. 步驟是這樣的: 1.在pom.xml配置 <build> <finalName>byh</finalName> <

mybatis-generator自定義註釋生成

    最近做的專案發現沒有中文註釋,故查詢資料,特此記錄。 本文所用的是基於mybatis-generator 1.3.2版本來完成的。 mybatis-generator 自動生成的程式碼註釋是很反人類的,通常我們在使用的時候都是按照如下設定關閉註釋: &

liquibase管理資料庫與tk.mybatismybatis-generator結合使用快速生成程式碼

專案架構介紹 專案使用的是springboot框架,MySql資料庫,liquibase資料庫版本管理工具,tk.mybatis統一管理增刪改查,mybatis-generator生成dao層/po層/mapper.xml檔案,jhipster生成controller及service

檔案搜尋都用,也自己反省一下?

   有些事情很可笑,可笑得很荒唐。在此記錄一下。當然,這裡並不是貶低、嘲笑,而是說,自己工作出錯了,要知道自己的不足。想提高自己呢就悄悄學習,不想費那個力氣呢就不要覺得自己多牛。     一次安排員工甲,找個軟體查一下目錄中的檔案包含字串。員工甲當然是應付一下,試了一下

mybatis-generator程式碼快速自動生成(已經寫好程式碼給你了)

mybatis-generator程式碼快速自動生成: 沒有實習之前寫的MyBatis的Mapping.XML都是手寫的,實習老大教了如何快速利用mybatis-generator程式碼自動生成工具來快速書寫xml,現在分享給大家。 1.首先,我先建立一個stu

最完整的Mybatis Generator(簡稱MBG)的最完整配置檔案,帶詳解,

<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE generatorConfiguration PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0

使用flush-logs命令重新生成MySQL的相關日誌檔案

上次沒事把慢查詢日誌檔案給刪除了,以為會自己重新建個,結果這幾天看,都沒有~~~結果百度了下才知道,想要重新記錄那些日誌必須重啟資料庫或者執行flush-logs命令。。。 具體步驟: /usr/local/mysql/bin/mysqladmin -uroot -p