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

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

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

    隨筆-67  評(píng)論-522  文章-0  trackbacks-0
        相信很多人都用過(guò)mybatis-generator-core生成pojoxml文件,但是這工具最后一個(gè)版本是1.3.2版,20127月后就沒(méi)再更新了,同時(shí)因?yàn)檫@玩意是老外寫(xiě)的,可能與咱們國(guó)人的有些習(xí)慣不一致,所以在使用上總會(huì)感覺(jué)不怎么爽,大象也有這個(gè)體會(huì),所以對(duì)源碼作過(guò)一些修改,現(xiàn)將這些總結(jié)分享出來(lái)給需要的朋友。
        首先大象得說(shuō)一下,我對(duì)mybatis-generator-core也沒(méi)有太深入的了解,僅僅是把它當(dāng)成一個(gè)工具,只是感覺(jué)用的不順手,就稍微了解了一下,順便改了改。所以本篇沒(méi)涉及到的地方,如果你知道,還請(qǐng)多多分享,大象感激不盡。另外,我對(duì)源碼的修改主要是針對(duì)MySQL數(shù)據(jù)庫(kù),在第二篇中會(huì)講到。
        這個(gè)項(xiàng)目本身是放在googlecode上面的,但是有一道“墻”,你懂的。所以得換個(gè)方式來(lái)獲得源碼。
        首先新建一個(gè)maven工程,添加下面的依賴,使用mavenDownload Sources,獲得mybatis-generator-core的源碼。
    <dependency>
        <groupId>org.mybatis.generator</groupId>
            <artifactId>mybatis-generator-core</artifactId>
            <version>1.3.2</version>
    </dependency>
        將源碼解壓放到工程里面,然后就可以開(kāi)始修改了。記得把之前的依賴去掉哦!我主要說(shuō)明改哪些源碼,以及作用。
        org.mybatis.generator.api.dom.OutputUtilities
        mybatis-generator里面我覺(jué)得首先最應(yīng)該改的就是OutputUtilities這個(gè)類,它里面有個(gè)xmlIndent方法是用來(lái)控制生成的xml文件中空格的縮進(jìn),默認(rèn)是兩個(gè)空格,但四個(gè)空格對(duì)于我們來(lái)說(shuō)已經(jīng)深入骨髓了,所以必須改。sb.append("  ")里面增加兩個(gè)空格就可以了。
        

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

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

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

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

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

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

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

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