首先大象得說一下,我對mybatis-generator-core也沒有太深入的了解,僅僅是把它當成一個工具,只是感覺用的不順手,就稍微了解了一下,順便改了改。所以本篇沒涉及到的地方,如果你知道,還請多多分享,大象感激不盡。另外,我對源碼的修改主要是針對MySQL數據庫,在第二篇中會講到。
這個項目本身是放在googlecode上面的,但是有一道“墻”,你懂的。所以得換個方式來獲得源碼。
首先新建一個maven工程,添加下面的依賴,使用maven的Download Sources,獲得mybatis-generator-core的源碼。
<dependency>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-core</artifactId>
<version>1.3.2</version>
</dependency>
將源碼解壓放到工程里面,然后就可以開始修改了。記得把之前的依賴去掉哦!我主要說明改哪些源碼,以及作用。<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-core</artifactId>
<version>1.3.2</version>
</dependency>
org.mybatis.generator.api.dom.OutputUtilities
mybatis-generator里面我覺得首先最應該改的就是OutputUtilities這個類,它里面有個xmlIndent方法是用來控制生成的xml文件中空格的縮進,默認是兩個空格,但四個空格對于我們來說已經深入骨髓了,所以必須改。在sb.append(" ")里面增加兩個空格就可以了。

org.mybatis.generator.api.dom.java.InnerClass
這個類就是用來控制生成pojo類以及格式化,我主要是修改屬性之間以及方法之間的換行。
源文件:

第178-180行就是在每個屬性后面增加一個換行,大象喜歡緊湊風格的代碼,于是就把紅框內的代碼去掉了。再看下圖,注意紅線的172行,在這里增加換行是讓生成的第一個屬性與類的聲明之間有一個空行。

如果你覺得getter和setter方法也不想有空行,可以把源文件的206-208行這段代碼去掉,大家可以根據自己的習慣來,大象在這里把它去掉。
org.mybatis.generator.codegen.mybatis3.IntrospectedTableMyBatis3Impl
這個類的第210行有個getGeneratedXmlFiles()方法,注意下圖中紅線的true這個屬性,它是用來控制是否合并生成xml文件,這里顯然默認就是合并,對于我們來說,修改數據庫表結構是經常發生的事情,不能每次重新生成之后,都手動去刪除吧?所以這里要堅決的把它改成false

現在我們將true改成了false,問題解決了,但是它究竟是在哪里起作用的呢?請看org.mybatis.generator.api.MyBatisGenerator這個類的252行,它包含在generate方法里。

第一個if就會判斷是否合并,上圖中已經顯示了isMergeable為true,所以當然是合并了,但我們將它改成false后,一定要在執行的命令行里加上overwrite參數,這樣才能夠讓shellCallback.isOverwriteEnabled()生效,從而實現我們的xml文件覆蓋生成。
mybatis-generator除了默認會合并xml文件外,還會默認生成一個帶Example后綴的pojo,它有點類似Hibernate的Criteria對象。另外它還會在xml里面默認會生成一堆id="xxxByExample"的東西,這些都要用到那個Example類,不光如此,為了配合起來用,還有一堆與之相關的<sql>標記,所有這些在大象看來都不需要,我們使用MyBatis不就是為了它的簡潔與方便嗎?所以我不想看到它,需要怎么改呢?可以在配置文件里面修改。

加上這些屬性設置,就會過濾掉我之前說的東西,而且Example類也不會再出現,呵呵,世界終于清凈一些了。
這些屬性是設置到org.mybatis.generator.config.TableConfiguration類里面起作用的,它里面有這些屬性與之對應的set方法,那么配置文件中的boolean值是在哪里設置的呢?它們是在初始化解析配置文件的時候做的,完成它的類是:
org.mybatis.generator.config.xml.MyBatisGeneratorConfigurationParser

這段代碼在parseTable里面,tc就是TableConfiguration,現在大家明白了吧?
mybatis-generator還有一個讓人不爽的地方就是會在pojo和xml中生成一堆英文注釋,這東西完全沒什么用,我想把它去掉,像下面這樣在配置文件中加上這一段。

看到這里有童鞋就有意見了,泥妹的,這不是一刀切了么。我只是不想在xml里生成注釋,另外想在pojo類里添加自定義注釋,這個是可以做到的,下一篇大象會講這方面的內容。
本文為菠蘿大象原創,如要轉載請注明出處。http://www.aygfsteel.com/bolo