隨筆-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.aygfsteel.com/bolo
          posted on 2015-03-20 17:15 菠蘿大象 閱讀(24864) 評論(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這個類是測試類,我用這個可以實現?,F在就是打包后,想用命令行來調用,發現出的異常。
          我現在的操作是這樣子的:
          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類名的地方?。勘热鏤ser統一換成UserVo,但其它類名比如UserExample,UserDao,UserMapper不會跟著發生改變。如果在配置中加了Vo,可能對應其它類名也變成了UserVoExample,UserVoDao,UserVoMapper了  回復  更多評論
            
          主站蜘蛛池模板: 隆德县| 肥乡县| 海城市| 老河口市| 隆安县| 北海市| 南阳市| 大港区| 南召县| 尉犁县| 卢湾区| 遵义市| 永仁县| 任丘市| 泰兴市| 南丰县| 建宁县| 衡阳市| 班戈县| 万宁市| 儋州市| 获嘉县| 明光市| 中超| 从江县| 玛曲县| 南城县| 巴林左旗| 建平县| 广河县| 闽侯县| 金湖县| 龙游县| 肃南| 旌德县| 合山市| 嘉峪关市| 六安市| 壤塘县| 唐海县| 漠河县|