<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
        前兩篇對(duì)mybatis-generator-core源碼進(jìn)行了修改,在一定程度上做到了方便使用。這一篇先將寫個(gè)測(cè)試程序看看生成的結(jié)果,然后用maven assembly將它打包生成一個(gè)zip文件。
        新建一個(gè)類StartUp,找到org.mybatis.generator.api.ShellRunner這個(gè)類,它就是生成文件的入口類,拷貝106-117行代碼,再稍微作下修改。
        
        
        
    generatorConfig.xmlresources目錄下面,它里面要定義輸出文件的目錄,如果不指定具體的路徑,默認(rèn)是在當(dāng)前文件夾下面生成。
        

        但是呢,這里有個(gè)比較蛋疼的地方,mybatis-generator-core默認(rèn)是不給你生成文件夾的,不信?請(qǐng)看org.mybatis.generator.internal.DefaultShellCallback的第50行,當(dāng)指定的目錄不存在時(shí),就拋出ShellException異常,所以輸出文件也就不可能有了。這里我們注釋掉51行代碼,添加如下代碼:
        
        
        現(xiàn)在再來(lái)執(zhí)行StartUp看看,發(fā)現(xiàn)在與src、target同級(jí)目錄下生成了mybatis3目錄,里面有相應(yīng)的pojoxml,打開之后看看效果,與我們改動(dòng)代碼后預(yù)想的結(jié)果一致。那么接下來(lái)就看看,如何將它打包輸出成下面這樣的效果。
        

        首先我們新建一個(gè)src/main/scripts/run.bat文件,內(nèi)容如下:
        java -jar mybatis-generator-1.3.2.jar -configfile generatorConfig.xml –overwrite
        pause

        其實(shí)就是一個(gè)java命令行,里面加的參數(shù)都是ShellRunner需要的,加上pause是方便查看輸出信息。
        然后修改pom文件,既然最終輸出有源文件JAR和編譯后的class JAR,所以我們需要增加maven-source-pluginmaven-jar-plugin這兩個(gè)插件,另外還用到了maven-assembly-plugin插件。這些plugin具體的用法,我就不講了,我只說(shuō)下要注意的地方。
        

        注意紅色框的內(nèi)容,表示我將打包的源代碼只會(huì)是原來(lái)的,增加的com.bolo.StartUp是不會(huì)包含進(jìn)去的,而且這也沒(méi)必要添加進(jìn)去。
        

        編譯之后的打包同樣只包含原來(lái)的代碼,并且一定要在這里指定入口類。classpathPrefix是類目錄,為空就是生成在當(dāng)前目錄下。如果寫成<classpathPrefix>lib/</classpathPrefix>這樣,則表示生成的mybatis-generator-1.3.2.jar會(huì)在lib目錄下面。
        

        上圖descriptor里面的內(nèi)容表明了assembly.xml的位置,它可以做很多自定義設(shè)置。
        

        這里定義的id默認(rèn)是加到生成的文件名后面的,但我們?cè)谏蠄D中設(shè)置了<appendAssemblyId>false</appendAssemblyId>,所以,這個(gè)all-in-one就不會(huì)加到生成的文件名后面了,如果想要這個(gè)名字,將false改成true即可。<format>zip</format>表示將生成一個(gè)以zip為后綴的壓縮包。
        

        我們最終是想把幾個(gè)文件都放在一個(gè)目錄下面,所以outputDirectory就不需要再定義其它的名字。通過(guò)前面的輸出知道,最后只會(huì)包含generatorConfig.xmlrun.bat這兩個(gè)文件,其它的配置文件并不是我們需要的,因此這里需要排除它們。
        另外還有兩個(gè)fileSet是指定源代碼的JAR和編譯classJAR,這兩個(gè)設(shè)置和前面類似。
        
        有點(diǎn)補(bǔ)充說(shuō)明:此例都是以MySQL數(shù)據(jù)庫(kù)為例,所以運(yùn)行是需要mysql的數(shù)據(jù)庫(kù)驅(qū)動(dòng)的,但我又不想在輸出里面包含這個(gè)jar,因此就在generatorConfig.xml文件里面進(jìn)行了配置,不清楚的可以看看。
        最后的最后,這些我們都做完了,那么就可以打包輸出了,使用mvn package或是在Run As -> Maven Build -> Goals里面填寫package,點(diǎn)擊 Run
        源碼下載: mybatis-generator-1.3.2.zip
        本文為菠蘿大象原創(chuàng),如要轉(zhuǎn)載請(qǐng)注明出處。http://www.tkk7.com/bolo
    posted on 2015-04-10 14:24 菠蘿大象 閱讀(16451) 評(píng)論(21)  編輯  收藏 所屬分類: mybatis-generator

    評(píng)論:
    # re: 修改mybatis-generator-1.3.2源碼實(shí)現(xiàn)自定義代碼生成詳解(三)[未登錄](méi) 2015-06-05 11:36 | Eric
    你有沒(méi)有QQ啊,加來(lái)交流下,我現(xiàn)在也在修改代碼,但是不知道pom里面要怎么寫,才不會(huì)出錯(cuò)  回復(fù)  更多評(píng)論
      
    # re: 修改mybatis-generator-1.3.2源碼實(shí)現(xiàn)自定義代碼生成詳解(三) 2015-07-22 16:59 | 隔壁小王
    大象,我自己寫了一個(gè)分頁(yè)插件,使用classpath把插件包加進(jìn)去,可是還是會(huì)提示“org.mybatis.generator.plugins.MysqlPaginationPlugin”,這個(gè)腫么辦???跪謝了  回復(fù)  更多評(píng)論
      
    # re: 修改mybatis-generator-1.3.2源碼實(shí)現(xiàn)自定義代碼生成詳解(三) 2015-07-22 17:20 | 隔壁小王
    @隔壁小王
    剛剛說(shuō)錯(cuò)了,是generatorConfig.xml里的classPathEntry  回復(fù)  更多評(píng)論
      
    # re: 修改mybatis-generator-1.3.2源碼實(shí)現(xiàn)自定義代碼生成詳解(三) 2015-07-24 10:55 | 菠蘿大象
    @隔壁小王
    你自定義的插件只需要在配置文件里加上<plugin>標(biāo)簽就可以了,另外分頁(yè)不都是擴(kuò)展mybatis的Interceptor接口來(lái)實(shí)現(xiàn)的么?為什么要在mybatis-generator里寫呢?  回復(fù)  更多評(píng)論
      
    # re: 修改mybatis-generator-1.3.2源碼實(shí)現(xiàn)自定義代碼生成詳解(三) 2015-07-24 17:26 | 隔壁小王
    @菠蘿大象
    org.mybatis.generator.plugins.MysqlPaginationPlugin這個(gè)插件是我自己寫的,不在mgb包里,我用classPathEntry配置好以后還是會(huì)報(bào)錯(cuò)“Unexpected error while running MyBatis Generator.
    Cannot instantiate object of type org.mybatis.generator.plugins.MysqlPaginationPlugin
    ”,大象可不可以加下我的qq(164286472)請(qǐng)教你一下啊  回復(fù)  更多評(píng)論
      
    # re: 修改mybatis-generator-1.3.2源碼實(shí)現(xiàn)自定義代碼生成詳解(三) 2015-09-29 16:26 | 隔壁王叔
    基本看完,收獲挺多,但是還沒(méi)有解決我的問(wèn)題,我想問(wèn)的是,自動(dòng)生成實(shí)體類的時(shí)候,那個(gè)實(shí)體類的注釋亂碼問(wèn)題怎么破?  回復(fù)  更多評(píng)論
      
    # re: 修改mybatis-generator-1.3.2源碼實(shí)現(xiàn)自定義代碼生成詳解(三) 2015-09-30 10:13 | 菠蘿大象
    @隔壁王叔
    這個(gè)地方我寫掉了,你要改下org.mybatis.generator.api.MyBatisGenerator這個(gè)類的314行,把gjf.getFileEncoding()換成"UTF-8"就好了。我估計(jì)是因?yàn)槲覀冎形膚indows系統(tǒng)的原因,如果不改,就會(huì)取當(dāng)前系統(tǒng)的文件格式,而windows默認(rèn)的文件格式就是ANSI  回復(fù)  更多評(píng)論
      
    # re: 修改mybatis-generator-1.3.2源碼實(shí)現(xiàn)自定義代碼生成詳解(三) 2015-12-16 21:14 | masque
    INFO] ------------------------------------------------------------------------
    [INFO] BUILD FAILURE
    [INFO] ------------------------------------------------------------------------
    [INFO] Total time: 5.766s
    [INFO] Finished at: Wed Dec 16 21:06:13 CST 2015
    [INFO] Final Memory: 7M/110M
    [INFO] ------------------------------------------------------------------------
    [ERROR] Failed to execute goal org.mybatis.generator:mybatis-generator-maven-plugin:1.3.2:generate (default-cli) on project imonline: ORA-00900: 無(wú)效 SQL 語(yǔ)句 -> [Help 1]
    org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal org.mybatis.generator:mybatis-generator-maven-plugin:1.3.2:generate (default-cli) on project imonline: ORA-00900: 無(wú)效 SQL 語(yǔ)句

    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:217)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:145)
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:84)
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:59)
    at org.apache.maven.lifecycle.internal.LifecycleStarter.singleThreadedBuild(LifecycleStarter.java:183)
    at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:161)
    at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:320)
    at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:156)
    at org.apache.maven.cli.MavenCli.execute(MavenCli.java:537)
    at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:196)
    at org.apache.maven.cli.MavenCli.main(MavenCli.java:141)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:290)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:230)
    at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:409)
    at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:352)
    at org.codehaus.classworlds.Launcher.main(Launcher.java:47)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:144)
    Caused by: org.apache.maven.plugin.MojoExecutionException: ORA-00900: 無(wú)效 SQL 語(yǔ)句

    at org.mybatis.generator.maven.MyBatisGeneratorMojo.execute(MyBatisGeneratorMojo.java:213)
    at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:101)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:209)
    ... 25 more

    你好 我把改動(dòng)的class覆蓋原來(lái)的class出現(xiàn)這個(gè)錯(cuò)誤  回復(fù)  更多評(píng)論
      
    # re: 修改mybatis-generator-1.3.2源碼實(shí)現(xiàn)自定義代碼生成詳解(三) 2015-12-16 21:25 | masque
    我下載下來(lái)的源碼比你的小多了
    我再用對(duì)比工具看看  回復(fù)  更多評(píng)論
      
    # re: 修改mybatis-generator-1.3.2源碼實(shí)現(xiàn)自定義代碼生成詳解(三) 2015-12-16 22:57 | masque
    @masque
    不好意思 我想我找到原因了
    我鏈接的是oracle  回復(fù)  更多評(píng)論
      
    # re: 修改mybatis-generator-1.3.2源碼實(shí)現(xiàn)自定義代碼生成詳解(三) 2015-12-17 00:06 | masque
    try {
    java.sql.Statement statement = databaseMetaData.getConnection().createStatement();
    java.sql.ResultSet rs = statement.executeQuery("SELECT * FROM all_tab_comments WHERE TABLE_name = '"+atn.getTableName()+"'");
    String remark = "";
    while (rs.next()) {
    remark = rs.getString("COMMENTS");
    }
    table.setRemarks(remark);
    closeResultSet(rs);
    statement.close();
    } catch (SQLException e) {
    e.printStackTrace();
    }

    OK獲取表注釋  回復(fù)  更多評(píng)論
      
    # re: 修改mybatis-generator-1.3.2源碼實(shí)現(xiàn)自定義代碼生成詳解(三) 2015-12-17 12:37 | 菠蘿大象
    @masque
    我這個(gè)例子是基于MySQL數(shù)據(jù)庫(kù)寫的,第一篇就說(shuō)了的,不過(guò)也恭喜你解決問(wèn)題  回復(fù)  更多評(píng)論
      
    # re: 修改mybatis-generator-1.3.2源碼實(shí)現(xiàn)自定義代碼生成詳解(三) 2015-12-19 15:26 | masque
    oracle無(wú)法生成字段注釋

    org.mybatis.generator.internal.db.ConnectionFactory

    Connection org.mybatis.generator.internal.db.ConnectionFactory.getConnection(JDBCConnectionConfiguration config) throws SQLException

    加上props.put("remarksReporting","true");

    就可以生成注釋了

    希望能幫到更多人  回復(fù)  更多評(píng)論
      
    # re: 修改mybatis-generator-1.3.2源碼實(shí)現(xiàn)自定義代碼生成詳解(三) 2015-12-21 14:15 | 菠蘿大象
    @masque
    感謝分享,給你32個(gè)贊  回復(fù)  更多評(píng)論
      
    # re: 修改mybatis-generator-1.3.2源碼實(shí)現(xiàn)自定義代碼生成詳解(三) 2015-12-21 16:42 | coco
    @masque
    你好,能不能把改好的工具發(fā)我一份啊,360846574@qq.com  回復(fù)  更多評(píng)論
      
    # re: 修改mybatis-generator-1.3.2源碼實(shí)現(xiàn)自定義代碼生成詳解(三) 2015-12-21 17:54 | coco
    @菠蘿大象
    能不能把生成oracle修復(fù)一下,把生成表注釋加進(jìn)來(lái)啊,看masque的方法,自己動(dòng)手改class好麻煩,再好把a(bǔ)ddJavaFileComment的自定義注釋搞成配置項(xiàng),這樣根據(jù)每個(gè)人需求配置就好了。謝謝啦  回復(fù)  更多評(píng)論
      
    # re: 修改mybatis-generator-1.3.2源碼實(shí)現(xiàn)自定義代碼生成詳解(三) 2015-12-23 12:39 | 菠蘿大象
    @coco
    這篇最下面有下載,直接打包就可以生成工具了,我寫這個(gè)主要是分享,起一個(gè)拋磚引玉的作用,你可以自己動(dòng)手改一下,再加上現(xiàn)在確實(shí)沒(méi)時(shí)間。  回復(fù)  更多評(píng)論
      
    # re: 修改mybatis-generator-1.3.2源碼實(shí)現(xiàn)自定義代碼生成詳解(三) 2016-03-15 14:50 | 王小利
    classPathEntry 這個(gè)具體是在哪里配置的  回復(fù)  更多評(píng)論
      
    # re: 修改mybatis-generator-1.3.2源碼實(shí)現(xiàn)自定義代碼生成詳解(三) 2016-06-26 14:42 | 神馬技術(shù)
    Exception in thread "main" java.net.MalformedURLException
    at java.net.URL.<init>(URL.java:617)
    at java.net.URL.<init>(URL.java:480)
    at java.net.URL.<init>(URL.java:429)
    at com.sun.org.apache.xerces.internal.impl.XMLEntityManager.setupCurrentEntity(XMLEntityManager.java:626)
    at com.sun.org.apache.xerces.internal.impl.XMLEntityManager.startEntity(XMLEntityManager.java:1291)
    at com.sun.org.apache.xerces.internal.impl.XMLEntityManager.startDTDEntity(XMLEntityManager.java:1258)
    at com.sun.org.apache.xerces.internal.impl.XMLDTDScannerImpl.setInputSource(XMLDTDScannerImpl.java:260)
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$DTDDriver.dispatch(XMLDocumentScannerImpl.java:1151)
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$DTDDriver.next(XMLDocumentScannerImpl.java:1047)
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$PrologDriver.next(XMLDocumentScannerImpl.java:960)
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:607)
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:488)
    at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:835)
    at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:764)
    at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:123)
    at com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(DOMParser.java:240)
    at com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(DocumentBuilderImpl.java:300)
    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 test.test.main(test.java:21)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:601)
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:144)



    我按照你的教程修改了,為什么運(yùn)行的時(shí)候會(huì)報(bào)錯(cuò)呢?這是什么原有  回復(fù)  更多評(píng)論
      
    # re: 修改mybatis-generator-1.3.2源碼實(shí)現(xiàn)自定義代碼生成詳解(三) 2016-08-05 18:00 | 王先森
    @神馬技術(shù)
    我和你遇到一樣的問(wèn)題,希望大象幫忙!  回復(fù)  更多評(píng)論
      
    # re: 修改mybatis-generator-1.3.2源碼實(shí)現(xiàn)自定義代碼生成詳解(三) 2016-08-08 14:09 | 菠蘿大象
    @王先森
    @神馬技術(shù)
    你們遇到的問(wèn)題是自己修改代碼后,寫個(gè)測(cè)試類無(wú)法運(yùn)行是嗎?其實(shí)這很簡(jiǎn)單吶,我把代碼貼下。
    public static void main(String[] args) throws Exception {
    List<String> warnings = new ArrayList<String>();
    File configFile = new File(StartUp.class.getResource("/generatorConfig.xml").toURI());
    ConfigurationParser cp = new ConfigurationParser(warnings);
    Configuration config = cp.parseConfiguration(configFile);
    DefaultShellCallback shellCallback = new DefaultShellCallback(true);
    MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config, shellCallback, warnings);
    myBatisGenerator.generate(null);
    System.out.println(warnings);
    }
    因?yàn)楣こ淌腔趍aven構(gòu)建,generatorConfig.xml是在resources目錄下,你們?cè)僭囋嚳从袥](méi)有問(wèn)題。  回復(fù)  更多評(píng)論
      
    主站蜘蛛池模板: 在线观看日本亚洲一区| 国产高潮久久免费观看| 亚洲精品动漫人成3d在线| 三年片在线观看免费西瓜视频| 亚洲精品一区二区三区四区乱码| 成人免费无码大片A毛片抽搐色欲| 免费无码婬片aaa直播表情| 亚洲成AV人片在线观看| 成年女人色毛片免费看| 三根一起会坏掉的好痛免费三级全黄的视频在线观看 | 丰满亚洲大尺度无码无码专线| 亚洲色无码一区二区三区| 无码国产精品一区二区免费I6| xxxxx做受大片在线观看免费| 亚洲妓女综合网99| 国产专区一va亚洲v天堂| 男女免费观看在线爽爽爽视频| 草久免费在线观看网站| 亚洲制服丝袜精品久久| 亚洲精品夜夜夜妓女网| 国产午夜免费福利红片| 1000部国产成人免费视频| 亚洲第一视频在线观看免费| 亚洲依依成人亚洲社区| 亚洲高清视频在线观看| 亚洲毛片网址在线观看中文字幕| 成年在线观看网站免费| 无码av免费网站| 精品久久久久久国产免费了| 欧洲亚洲综合一区二区三区| 亚洲人成免费网站| 亚洲欧洲在线观看| 亚洲精品亚洲人成在线观看| 国产一级高清免费观看| 一个人免费观看在线视频www| 亚洲午夜免费视频| 美女在线视频观看影院免费天天看 | 亚洲AV无码精品色午夜在线观看 | 最新亚洲春色Av无码专区| 亚洲AV无码专区国产乱码4SE| 亚洲一区无码精品色|