mybatis-generator相關

相信不少人都用過mybatis-generator-core生成pojo和xml文件,可是這工具最後一個版本是1.3.2版,2012年7月後就沒再更新了,同時由於這玩意是老外寫的,可能與我們國人的有些習慣不一致,因此在使用上總會感受不怎麼爽,大象也有這個體會,因此對源碼做過一些修改,現將這些總結分享出來給須要的朋友。
    首先大象得說一下,我對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>
    將源碼解壓放到工程裏面,而後就能夠開始修改了。記得把以前的依賴去掉哦!我主要說明改哪些源碼,以及做用。
    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類裏添加自定義註釋,這個是能夠作到的,下一篇大象會講這方面的內容。
相關文章
相關標籤/搜索