<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月后就沒再更新了,同時因為這玩意是老外寫的,可能與咱們國人的有些習慣不一致,所以在使用上總會感覺不怎么爽,大象也有這個體會,所以對源碼作過一些修改,現(xiàn)將這些總結分享出來給需要的朋友。
        首先大象得說一下,我對mybatis-generator-core也沒有太深入的了解,僅僅是把它當成一個工具,只是感覺用的不順手,就稍微了解了一下,順便改了改。所以本篇沒涉及到的地方,如果你知道,還請多多分享,大象感激不盡。另外,我對源碼的修改主要是針對MySQL數(shù)據(jù)庫,在第二篇中會講到。
        這個項目本身是放在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文件中空格的縮進,默認是兩個空格,但四個空格對于我們來說已經(jīng)深入骨髓了,所以必須改。sb.append("  ")里面增加兩個空格就可以了。
        

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

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

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

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

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

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

        這段代碼在parseTable里面,tc就是TableConfiguration,現(xiàn)在大家明白了吧?
        mybatis-generator還有一個讓人不爽的地方就是會在pojoxml中生成一堆英文注釋,這東西完全沒什么用,我想把它去掉,像下面這樣在配置文件中加上這一段。
        
        看到這里有童鞋就有意見了,泥妹的,這不是一刀切了么。我只是不想在xml里生成注釋,另外想在pojo類里添加自定義注釋,這個是可以做到的,下一篇大象會講這方面的內(nèi)容。
        本文為菠蘿大象原創(chuàng),如要轉(zhuǎn)載請注明出處。http://m.tkk7.com/bolo
    posted on 2015-03-20 17:15 菠蘿大象 閱讀(24869) 評論(14)  編輯  收藏 所屬分類: mybatis-generator

    評論:
    # re: 修改mybatis-generator-1.3.2源碼實現(xiàn)自定義代碼生成詳解(一) 2015-07-28 11:34 | Fiery
    你好 我用的是intellij,請問一下我怎么才能讓項目調(diào)用我的源碼文件而不是調(diào)用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源碼實現(xiàn)自定義代碼生成詳解(一) 2015-08-04 14:35 | 菠蘿大象
    你修改完之后,打包成jar,發(fā)布到你的本地倉庫去覆蓋掉從中央倉庫下載下來的就可以了。我例子最后不是會生成一個ZIP么,就用那個很方便吶  回復  更多評論
      
    # re: 修改mybatis-generator-1.3.2源碼實現(xiàn)自定義代碼生成詳解(一)[未登錄] 2015-08-15 15:37 | Alan
    樓主這文章對我很有用。commentGenerator這個節(jié)點還必須放在jdbcConnection節(jié)點前面,context下的節(jié)點必須按照順序放,雷死。
    (property*,plugin*,commentGenerator?,jdbcConnection,javaTypeResolver?,javaModelGenerator,sqlMapGenerator?,javaClientGenerator?,table+)  回復  更多評論
      
    # re: 修改mybatis-generator-1.3.2源碼實現(xiàn)自定義代碼生成詳解(一) 2016-03-26 17:26 | 湯奮斗
    我修改了源碼,并且發(fā)布到本地倉庫了(手動進入本地倉庫,查看jar都是ok的),可是我生成代碼時,發(fā)現(xiàn)修改的沒有生效,這是什么原因?  回復  更多評論
      
    # re: 修改mybatis-generator-1.3.2源碼實現(xiàn)自定義代碼生成詳解(一) 2016-03-29 11:31 | 菠蘿大象
    @湯奮斗
    你沒必要發(fā)布到maven倉庫,我這個工程打包后直接運行run.bat就可以生成代碼了  回復  更多評論
      
    # re: 修改mybatis-generator-1.3.2源碼實現(xiàn)自定義代碼生成詳解(一) 2016-07-16 20:10 | 陌陌
    @菠蘿大象
    大象,你好!有個問題請教下,我把你的源碼拷貝到一個新的maven項目,然后引入所需的log4j和ant包,用maven的jar插件運行打包,但是打成的jar一直用不了,運行就報錯,但是用你的jar卻是可以的,請你你是怎么打包的或者能不能幫忙看看~   回復  更多評論
      
    # re: 修改mybatis-generator-1.3.2源碼實現(xiàn)自定義代碼生成詳解(一) 2016-07-18 10:07 | 菠蘿大象
    @陌陌
    是什么錯誤?  回復  更多評論
      
    # re: 修改mybatis-generator-1.3.2源碼實現(xiàn)自定義代碼生成詳解(一) 2016-08-17 08:52 | donghc
    大象可否把pom.xml共享出來,我可以用main方法實現(xiàn),但是用pom.xml打成的jar,用命令行啟動(指定了config.xml),報錯找不到配置文件。想看看是不是pom.xml打包出問題了  回復  更多評論
      
    # re: 修改mybatis-generator-1.3.2源碼實現(xiàn)自定義代碼生成詳解(一) 2016-08-17 13:05 | 菠蘿大象
    @donghc
    你去這個地址下下來看看http://pan.baidu.com/s/1gf8u1rH  回復  更多評論
      
    # re: 修改mybatis-generator-1.3.2源碼實現(xiàn)自定義代碼生成詳解(一) 2016-08-17 13:29 | donghc
    @菠蘿大象
    不行,還是一樣的~~有些尷尬了。我用你分享的這個直接mvn package,然后解壓.zip文件。 運行run就會出現(xiàn)問題。
    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源碼實現(xiàn)自定義代碼生成詳解(一) 2016-08-17 14:00 | 菠蘿大象
    @donghc
    maven不是這樣玩的呀,我的run是打包后用的,你仔細看了第三篇的內(nèi)容么?在IDE里直接啟動StartUp就行了,這個類是用來測試的  回復  更多評論
      
    # re: 修改mybatis-generator-1.3.2源碼實現(xiàn)自定義代碼生成詳解(一) 2016-08-17 14:09 | donghc
    @菠蘿大象
    我明白StartUp這個類是測試類,我用這個可以實現(xiàn)?,F(xiàn)在就是打包后,想用命令行來調(diào)用,發(fā)現(xiàn)出的異常。
    我現(xiàn)在的操作是這樣子的:
    1:下載你分享在云盤里面的工程,導入到idea里面
    2:運行mvn package打包代碼
    3:到target目錄下面,里面有mybatis-generator-1.3.2.zip,解壓進入文件夾
    4:更改數(shù)據(jù)庫鏈接,運行run.bat。然后就報錯了。
      回復  更多評論
      
    # re: 修改mybatis-generator-1.3.2源碼實現(xiàn)自定義代碼生成詳解(一) 2016-08-18 08:52 | 菠蘿大象
    @donghc
    你要看看generatorConfig.xml里面的mysql驅(qū)動地址對不對,你連接的數(shù)據(jù)庫用戶名密碼正不正確,run.bat里面指定的generatorConfig.xml名字與解壓后的是不是一樣的,targetProject有沒有指定一個目錄。  回復  更多評論
      
    # re: 修改mybatis-generator-1.3.2源碼實現(xiàn)自定義代碼生成詳解(一) 2016-09-07 08:31 | 半湖思絮
    為了回復你的貼子,人工注冊,真心不容易。想問一下,有沒有修改pojo類名的地方?。勘热鏤ser統(tǒng)一換成UserVo,但其它類名比如UserExample,UserDao,UserMapper不會跟著發(fā)生改變。如果在配置中加了Vo,可能對應其它類名也變成了UserVoExample,UserVoDao,UserVoMapper了  回復  更多評論
      
    主站蜘蛛池模板: 精品免费久久久久国产一区| 亚洲免费观看网站| 亚洲色图国产精品| 免费无码黄网站在线观看| 免费的黄色的网站| 婷婷亚洲久悠悠色悠在线播放| 99无码人妻一区二区三区免费| 美女露隐私全部免费直播| 亚洲精品免费视频| 午夜国产大片免费观看| 99久久99热精品免费观看国产| 亚洲av无码专区国产不乱码| 亚洲AV无一区二区三区久久| 国产又大又黑又粗免费视频| 中文字幕免费高清视频| eeuss在线兵区免费观看| 自拍日韩亚洲一区在线| 亚洲中文字幕无码久久2017| 国产啪精品视频网免费| a毛片免费全部在线播放** | 男男gvh肉在线观看免费| 亚洲精品免费观看| 亚洲欧洲日产国码高潮αv| 福利免费观看午夜体检区| a毛片免费全部在线播放**| 菠萝菠萝蜜在线免费视频| 亚洲一级大黄大色毛片| 亚洲精品V欧洲精品V日韩精品| 最新69国产成人精品免费视频动漫| 成人电影在线免费观看| 日本黄页网址在线看免费不卡| 亚洲一区二区三区在线网站| 亚洲AV无码国产丝袜在线观看 | 亚洲片国产一区一级在线观看| 欧洲精品成人免费视频在线观看| 国产亚洲免费的视频看| www免费插插视频| 看免费毛片天天看| 日本系列1页亚洲系列| 国产成人亚洲综合网站不卡| 亚洲第一页中文字幕|