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

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

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

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

現(xiàn)在我們將true改成了false,問(wèn)題解決了,但是它究竟是在哪里起作用的呢?請(qǐng)看org.mybatis.generator.api.MyBatisGenerator這個(gè)類(lèi)的252行,它包含在generate方法里。

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

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

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

看到這里有童鞋就有意見(jiàn)了,泥妹的,這不是一刀切了么。我只是不想在xml里生成注釋?zhuān)硗庀朐?/span>pojo類(lèi)里添加自定義注釋?zhuān)@個(gè)是可以做到的,下一篇大象會(huì)講這方面的內(nèi)容。
本文為菠蘿大象原創(chuàng),如要轉(zhuǎn)載請(qǐng)注明出處。http://www.aygfsteel.com/bolo