<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://m.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无码精品无码麻豆| 成人免费网站视频www| 国产精品无码素人福利免费| 亚洲AV无码一区二区三区牲色| 成人免费视频软件网站| 精品无码专区亚洲| 亚洲中文字幕丝袜制服一区| 一级中文字幕乱码免费| 亚洲熟妇丰满多毛XXXX| 日本视频在线观看永久免费| 亚洲性天天干天天摸| 色影音免费色资源| 亚洲综合一区国产精品| 国产高清在线精品免费软件| 人体大胆做受免费视频| 亚洲AV无码日韩AV无码导航| 久视频精品免费观看99| 456亚洲人成影院在线观| 又黄又爽的视频免费看| a级特黄毛片免费观看| 亚洲电影在线免费观看| 成人永久免费福利视频网站| 羞羞视频免费网站日本| 亚洲国产高清人在线| 我要看WWW免费看插插视频| 免费的黄色的网站| 亚洲精品在线观看视频| 日韩在线天堂免费观看| 国产精品免费在线播放| 亚洲国产人成在线观看| 男人的天堂亚洲一区二区三区| 美女免费视频一区二区| 亚洲av无码片在线播放| 国内自产少妇自拍区免费| 久久最新免费视频| 亚洲成年网站在线观看| 国产v亚洲v天堂无码网站| 国内大片在线免费看| 免费污视频在线观看|