<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆-67  評論-522  文章-0  trackbacks-0
        相信很多人都用過mybatis-generator-core生成pojoxml文件,但是這工具最后一個版本是1.3.2版,20127月后就沒再更新了,同時因為這玩意是老外寫的,可能與咱們國人的有些習慣不一致,所以在使用上總會感覺不怎么爽,大象也有這個體會,所以對源碼作過一些修改,現將這些總結分享出來給需要的朋友。
        首先大象得說一下,我對mybatis-generator-core也沒有太深入的了解,僅僅是把它當成一個工具,只是感覺用的不順手,就稍微了解了一下,順便改了改。所以本篇沒涉及到的地方,如果你知道,還請多多分享,大象感激不盡。另外,我對源碼的修改主要是針對MySQL數據庫,在第二篇中會講到。
        這個項目本身是放在googlecode上面的,但是有一道“墻”,你懂的。所以得換個方式來獲得源碼。
        首先新建一個maven工程,添加下面的依賴,使用mavenDownload 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行,在這里增加換行是讓生成的第一個屬性與類的聲明之間有一個空行。
        

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

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

        第一個if就會判斷是否合并,上圖中已經顯示了isMergeabletrue,所以當然是合并了,但我們將它改成false后,一定要在執行的命令行里加上overwrite參數,這樣才能夠讓shellCallback.isOverwriteEnabled()生效,從而實現我們的xml文件覆蓋生成。
        mybatis-generator除了默認會合并xml文件外,還會默認生成一個帶Example后綴的pojo,它有點類似HibernateCriteria對象。另外它還會在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還有一個讓人不爽的地方就是會在pojoxml中生成一堆英文注釋,這東西完全沒什么用,我想把它去掉,像下面這樣在配置文件中加上這一段。
        
        看到這里有童鞋就有意見了,泥妹的,這不是一刀切了么。我只是不想在xml里生成注釋,另外想在pojo類里添加自定義注釋,這個是可以做到的,下一篇大象會講這方面的內容。
        本文為菠蘿大象原創,如要轉載請注明出處。http://www.tkk7.com/bolo
    posted on 2015-03-20 17:15 菠蘿大象 閱讀(24869) 評論(14)  編輯  收藏 所屬分類: mybatis-generator

    評論:
    # re: 修改mybatis-generator-1.3.2源碼實現自定義代碼生成詳解(一) 2015-07-28 11:34 | Fiery
    你好 我用的是intellij,請問一下我怎么才能讓項目調用我的源碼文件而不是調用maven庫的jar包呢。下面是我pom.xml的配置
    <plugin>
    <groupId>org.mybatis.generator</groupId>
    <artifactId>mybatis-generator-maven-plugin</artifactId>
    <version>${plugin.mybatis.generator}</version>
    <configuration>
    <configurationFile>${mybatis.generator.generatorConfig.xml}</configurationFile>
    <overwrite>true</overwrite>
    <verbose>true</verbose>
    </configuration>
    </plugin>  回復  更多評論
      
    # re: 修改mybatis-generator-1.3.2源碼實現自定義代碼生成詳解(一) 2015-08-04 14:35 | 菠蘿大象
    你修改完之后,打包成jar,發布到你的本地倉庫去覆蓋掉從中央倉庫下載下來的就可以了。我例子最后不是會生成一個ZIP么,就用那個很方便吶  回復  更多評論
      
    # re: 修改mybatis-generator-1.3.2源碼實現自定義代碼生成詳解(一)[未登錄] 2015-08-15 15:37 | Alan
    樓主這文章對我很有用。commentGenerator這個節點還必須放在jdbcConnection節點前面,context下的節點必須按照順序放,雷死。
    (property*,plugin*,commentGenerator?,jdbcConnection,javaTypeResolver?,javaModelGenerator,sqlMapGenerator?,javaClientGenerator?,table+)  回復  更多評論
      
    # re: 修改mybatis-generator-1.3.2源碼實現自定義代碼生成詳解(一) 2016-03-26 17:26 | 湯奮斗
    我修改了源碼,并且發布到本地倉庫了(手動進入本地倉庫,查看jar都是ok的),可是我生成代碼時,發現修改的沒有生效,這是什么原因?  回復  更多評論
      
    # re: 修改mybatis-generator-1.3.2源碼實現自定義代碼生成詳解(一) 2016-03-29 11:31 | 菠蘿大象
    @湯奮斗
    你沒必要發布到maven倉庫,我這個工程打包后直接運行run.bat就可以生成代碼了  回復  更多評論
      
    # re: 修改mybatis-generator-1.3.2源碼實現自定義代碼生成詳解(一) 2016-07-16 20:10 | 陌陌
    @菠蘿大象
    大象,你好!有個問題請教下,我把你的源碼拷貝到一個新的maven項目,然后引入所需的log4j和ant包,用maven的jar插件運行打包,但是打成的jar一直用不了,運行就報錯,但是用你的jar卻是可以的,請你你是怎么打包的或者能不能幫忙看看~   回復  更多評論
      
    # re: 修改mybatis-generator-1.3.2源碼實現自定義代碼生成詳解(一) 2016-07-18 10:07 | 菠蘿大象
    @陌陌
    是什么錯誤?  回復  更多評論
      
    # re: 修改mybatis-generator-1.3.2源碼實現自定義代碼生成詳解(一) 2016-08-17 08:52 | donghc
    大象可否把pom.xml共享出來,我可以用main方法實現,但是用pom.xml打成的jar,用命令行啟動(指定了config.xml),報錯找不到配置文件。想看看是不是pom.xml打包出問題了  回復  更多評論
      
    # re: 修改mybatis-generator-1.3.2源碼實現自定義代碼生成詳解(一) 2016-08-17 13:05 | 菠蘿大象
    @donghc
    你去這個地址下下來看看http://pan.baidu.com/s/1gf8u1rH  回復  更多評論
      
    # re: 修改mybatis-generator-1.3.2源碼實現自定義代碼生成詳解(一) 2016-08-17 13:29 | donghc
    @菠蘿大象
    不行,還是一樣的~~有些尷尬了。我用你分享的這個直接mvn package,然后解壓.zip文件。 運行run就會出現問題。
    D:\mybatis-generator\target\mybatis-generator-1.3.2>java -jar mybatis-generator-1.3.2.jar -configfile generatorConfig.xml -overwrite
    java.net.MalformedURLException
    at java.net.URL.<init>(Unknown Source)
    at java.net.URL.<init>(Unknown Source)
    at java.net.URL.<init>(Unknown Source)
    at com.sun.org.apache.xerces.internal.impl.XMLEntityManager.setupCurrentEntity(Unknown Source)
    at com.sun.org.apache.xerces.internal.impl.XMLEntityManager.startEntity(Unknown Source)
    at com.sun.org.apache.xerces.internal.impl.XMLEntityManager.startDTDEntity(Unknown Source)
    at com.sun.org.apache.xerces.internal.impl.XMLDTDScannerImpl.setInputSource(Unknown Source)
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$DTDDriver.dispatch(Unknown Source)
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$DTDDriver.next(Unknown Source)
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$PrologDriver.next(Unknown Source)
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(Unknown Source)
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source)
    at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source)
    at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source)
    at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(Unknown Source)
    at com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(Unknown Source)
    at com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(Unknown Source)
    at org.mybatis.generator.config.xml.ConfigurationParser.parseConfiguration(ConfigurationParser.java:109)
    at org.mybatis.generator.config.xml.ConfigurationParser.parseConfiguration(ConfigurationParser.java:82)
    at org.mybatis.generator.config.xml.ConfigurationParser.parseConfiguration(ConfigurationParser.java:74)
    at org.mybatis.generator.api.ShellRunner.main(ShellRunner.java:107)
    Caused by: java.lang.NullPointerException
    ... 21 more  回復  更多評論
      
    # re: 修改mybatis-generator-1.3.2源碼實現自定義代碼生成詳解(一) 2016-08-17 14:00 | 菠蘿大象
    @donghc
    maven不是這樣玩的呀,我的run是打包后用的,你仔細看了第三篇的內容么?在IDE里直接啟動StartUp就行了,這個類是用來測試的  回復  更多評論
      
    # re: 修改mybatis-generator-1.3.2源碼實現自定義代碼生成詳解(一) 2016-08-17 14:09 | donghc
    @菠蘿大象
    我明白StartUp這個類是測試類,我用這個可以實現。現在就是打包后,想用命令行來調用,發現出的異常。
    我現在的操作是這樣子的:
    1:下載你分享在云盤里面的工程,導入到idea里面
    2:運行mvn package打包代碼
    3:到target目錄下面,里面有mybatis-generator-1.3.2.zip,解壓進入文件夾
    4:更改數據庫鏈接,運行run.bat。然后就報錯了。
      回復  更多評論
      
    # re: 修改mybatis-generator-1.3.2源碼實現自定義代碼生成詳解(一) 2016-08-18 08:52 | 菠蘿大象
    @donghc
    你要看看generatorConfig.xml里面的mysql驅動地址對不對,你連接的數據庫用戶名密碼正不正確,run.bat里面指定的generatorConfig.xml名字與解壓后的是不是一樣的,targetProject有沒有指定一個目錄。  回復  更多評論
      
    # re: 修改mybatis-generator-1.3.2源碼實現自定義代碼生成詳解(一) 2016-09-07 08:31 | 半湖思絮
    為了回復你的貼子,人工注冊,真心不容易。想問一下,有沒有修改pojo類名的地方啊?比如User統一換成UserVo,但其它類名比如UserExample,UserDao,UserMapper不會跟著發生改變。如果在配置中加了Vo,可能對應其它類名也變成了UserVoExample,UserVoDao,UserVoMapper了  回復  更多評論
      
    主站蜘蛛池模板: 亚洲av日韩av不卡在线观看| 国产综合精品久久亚洲| 亚洲欧洲日本精品| 99久久综合精品免费| 久久精品九九亚洲精品| 曰批全过程免费视频网址| 色婷婷亚洲十月十月色天| 亚欧人成精品免费观看| 亚洲一级大黄大色毛片| 国内自产拍自a免费毛片| 亚洲国产AV一区二区三区四区| 好吊妞在线成人免费| 疯狂做受xxxx高潮视频免费| 亚洲国产V高清在线观看| 黄 色一级 成 人网站免费| 久久亚洲免费视频| 国产免费久久精品99re丫y| 亚洲欧美日韩中文无线码| 毛片免费观看的视频| 最新亚洲人成网站在线观看| 亚洲麻豆精品国偷自产在线91| 成人无码区免费A∨直播| 亚洲成人在线电影| 最近高清国语中文在线观看免费| 亚洲精品国产suv一区88| 亚洲午夜精品一级在线播放放| a级午夜毛片免费一区二区| 亚洲免费视频观看| 免费人成视频x8x8入口| 亚洲?V乱码久久精品蜜桃 | 曰韩无码AV片免费播放不卡 | 一级黄色免费网站| 亚洲国产成人久久综合碰碰动漫3d| 在线免费中文字幕| 美女啪啪网站又黄又免费| 亚洲国产成人久久精品动漫| 波多野结衣久久高清免费 | 国产成A人亚洲精V品无码性色| 国产精品久久免费| caoporm超免费公开视频| 亚洲欧洲自拍拍偷午夜色|