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,生成資料庫註釋
今天折騰了大半天,就搞這東西了,不太熟悉這個東西,需要匯出找資料和文件。 也感謝網上的一些小夥伴提供的一些資料,提供了很多幫助,也讓我有了一些想法: 可以參考這位小夥伴的操作步驟,我也是在這基礎上再做的一些改進。 在這位小夥伴的基礎上,我發現有很多東西沒有生成,
在idea中使用mybatis generator執行後沒生成相關程式碼也沒任何控制檯檔案輸出
解決處理 建立一個warningL
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.mybatis、mybatis-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