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

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

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

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

        注意紅色框的內容,表示我將打包的源代碼只會是原來的,增加的com.bolo.StartUp是不會包含進去的,而且這也沒必要添加進去。
        

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

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

        這里定義的id默認是加到生成的文件名后面的,但我們在上圖中設置了<appendAssemblyId>false</appendAssemblyId>,所以,這個all-in-one就不會加到生成的文件名后面了,如果想要這個名字,將false改成true即可。<format>zip</format>表示將生成一個以zip為后綴的壓縮包。
        

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

    評論:
    # re: 修改mybatis-generator-1.3.2源碼實現自定義代碼生成詳解(三)[未登錄] 2015-06-05 11:36 | Eric
    你有沒有QQ啊,加來交流下,我現在也在修改代碼,但是不知道pom里面要怎么寫,才不會出錯  回復  更多評論
      
    # re: 修改mybatis-generator-1.3.2源碼實現自定義代碼生成詳解(三) 2015-07-22 16:59 | 隔壁小王
    大象,我自己寫了一個分頁插件,使用classpath把插件包加進去,可是還是會提示“org.mybatis.generator.plugins.MysqlPaginationPlugin”,這個腫么辦???跪謝了  回復  更多評論
      
    # re: 修改mybatis-generator-1.3.2源碼實現自定義代碼生成詳解(三) 2015-07-22 17:20 | 隔壁小王
    @隔壁小王
    剛剛說錯了,是generatorConfig.xml里的classPathEntry  回復  更多評論
      
    # re: 修改mybatis-generator-1.3.2源碼實現自定義代碼生成詳解(三) 2015-07-24 10:55 | 菠蘿大象
    @隔壁小王
    你自定義的插件只需要在配置文件里加上<plugin>標簽就可以了,另外分頁不都是擴展mybatis的Interceptor接口來實現的么?為什么要在mybatis-generator里寫呢?  回復  更多評論
      
    # re: 修改mybatis-generator-1.3.2源碼實現自定義代碼生成詳解(三) 2015-07-24 17:26 | 隔壁小王
    @菠蘿大象
    org.mybatis.generator.plugins.MysqlPaginationPlugin這個插件是我自己寫的,不在mgb包里,我用classPathEntry配置好以后還是會報錯“Unexpected error while running MyBatis Generator.
    Cannot instantiate object of type org.mybatis.generator.plugins.MysqlPaginationPlugin
    ”,大象可不可以加下我的qq(164286472)請教你一下啊  回復  更多評論
      
    # re: 修改mybatis-generator-1.3.2源碼實現自定義代碼生成詳解(三) 2015-09-29 16:26 | 隔壁王叔
    基本看完,收獲挺多,但是還沒有解決我的問題,我想問的是,自動生成實體類的時候,那個實體類的注釋亂碼問題怎么破?  回復  更多評論
      
    # re: 修改mybatis-generator-1.3.2源碼實現自定義代碼生成詳解(三) 2015-09-30 10:13 | 菠蘿大象
    @隔壁王叔
    這個地方我寫掉了,你要改下org.mybatis.generator.api.MyBatisGenerator這個類的314行,把gjf.getFileEncoding()換成"UTF-8"就好了。我估計是因為我們中文windows系統的原因,如果不改,就會取當前系統的文件格式,而windows默認的文件格式就是ANSI  回復  更多評論
      
    # re: 修改mybatis-generator-1.3.2源碼實現自定義代碼生成詳解(三) 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: 無效 SQL 語句 -> [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: 無效 SQL 語句

    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: 無效 SQL 語句

    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

    你好 我把改動的class覆蓋原來的class出現這個錯誤  回復  更多評論
      
    # re: 修改mybatis-generator-1.3.2源碼實現自定義代碼生成詳解(三) 2015-12-16 21:25 | masque
    我下載下來的源碼比你的小多了
    我再用對比工具看看  回復  更多評論
      
    # re: 修改mybatis-generator-1.3.2源碼實現自定義代碼生成詳解(三) 2015-12-16 22:57 | masque
    @masque
    不好意思 我想我找到原因了
    我鏈接的是oracle  回復  更多評論
      
    # re: 修改mybatis-generator-1.3.2源碼實現自定義代碼生成詳解(三) 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獲取表注釋  回復  更多評論
      
    # re: 修改mybatis-generator-1.3.2源碼實現自定義代碼生成詳解(三) 2015-12-17 12:37 | 菠蘿大象
    @masque
    我這個例子是基于MySQL數據庫寫的,第一篇就說了的,不過也恭喜你解決問題  回復  更多評論
      
    # re: 修改mybatis-generator-1.3.2源碼實現自定義代碼生成詳解(三) 2015-12-19 15:26 | masque
    oracle無法生成字段注釋

    org.mybatis.generator.internal.db.ConnectionFactory

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

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

    就可以生成注釋了

    希望能幫到更多人  回復  更多評論
      
    # re: 修改mybatis-generator-1.3.2源碼實現自定義代碼生成詳解(三) 2015-12-21 14:15 | 菠蘿大象
    @masque
    感謝分享,給你32個贊  回復  更多評論
      
    # re: 修改mybatis-generator-1.3.2源碼實現自定義代碼生成詳解(三) 2015-12-21 16:42 | coco
    @masque
    你好,能不能把改好的工具發我一份啊,360846574@qq.com  回復  更多評論
      
    # re: 修改mybatis-generator-1.3.2源碼實現自定義代碼生成詳解(三) 2015-12-21 17:54 | coco
    @菠蘿大象
    能不能把生成oracle修復一下,把生成表注釋加進來啊,看masque的方法,自己動手改class好麻煩,再好把addJavaFileComment的自定義注釋搞成配置項,這樣根據每個人需求配置就好了。謝謝啦  回復  更多評論
      
    # re: 修改mybatis-generator-1.3.2源碼實現自定義代碼生成詳解(三) 2015-12-23 12:39 | 菠蘿大象
    @coco
    這篇最下面有下載,直接打包就可以生成工具了,我寫這個主要是分享,起一個拋磚引玉的作用,你可以自己動手改一下,再加上現在確實沒時間。  回復  更多評論
      
    # re: 修改mybatis-generator-1.3.2源碼實現自定義代碼生成詳解(三) 2016-03-15 14:50 | 王小利
    classPathEntry 這個具體是在哪里配置的  回復  更多評論
      
    # re: 修改mybatis-generator-1.3.2源碼實現自定義代碼生成詳解(三) 2016-06-26 14:42 | 神馬技術
    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)



    我按照你的教程修改了,為什么運行的時候會報錯呢?這是什么原有  回復  更多評論
      
    # re: 修改mybatis-generator-1.3.2源碼實現自定義代碼生成詳解(三) 2016-08-05 18:00 | 王先森
    @神馬技術
    我和你遇到一樣的問題,希望大象幫忙!  回復  更多評論
      
    # re: 修改mybatis-generator-1.3.2源碼實現自定義代碼生成詳解(三) 2016-08-08 14:09 | 菠蘿大象
    @王先森
    @神馬技術
    你們遇到的問題是自己修改代碼后,寫個測試類無法運行是嗎?其實這很簡單吶,我把代碼貼下。
    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);
    }
    因為工程是基于maven構建,generatorConfig.xml是在resources目錄下,你們再試試看有沒有問題。  回復  更多評論
      
    主站蜘蛛池模板: 好大好深好猛好爽视频免费| 91成人免费观看网站| 国产免费av片在线无码免费看| 黄a大片av永久免费| 亚洲精品无码专区| 性色av免费观看| 亚洲欧美日韩自偷自拍| 性做久久久久免费观看| 日本免费电影一区| 亚洲av日韩专区在线观看| 国产一区二区三区在线观看免费| 久久亚洲中文无码咪咪爱| 国产免费av片在线无码免费看| 国产精品亚洲专区无码唯爱网 | 亚洲精品偷拍无码不卡av| 免费看h片的网站| 中文文字幕文字幕亚洲色| 国产精品四虎在线观看免费 | 久久国产亚洲精品麻豆| 88av免费观看| 亚洲日韩一页精品发布| 亚洲av无码一区二区三区四区| 在线免费观看一级毛片| 青青草国产免费国产是公开| 亚洲免费观看视频| 日本三级2019在线观看免费| 国产精品亚洲综合一区在线观看 | 亚洲av最新在线网址| 无人在线观看完整免费版视频| 国产成人亚洲午夜电影| 亚洲VA中文字幕无码毛片| 可以免费看黄的网站| 羞羞视频免费网站入口| 久久99国产亚洲精品观看| 91视频免费网站| 亚洲性无码av在线| 国产大片免费网站不卡美女| 亚洲精品无码专区在线播放| 亚洲情综合五月天| 国产福利在线观看免费第一福利| 一边摸一边桶一边脱免费视频|