JavaWeb界面在線配置代碼生成器


關於直接main方法運行生成代碼可參考我的這篇文章:MP實戰系列(六)之代碼生成器講解

在線配置主要參考jeesite和jeecg,gun等開源項目,但是與它們相比又有很多不同?

與jeesite相比,jeesite采用的自己重新改裝的MyBatis和使用freemarker模板進行在線代碼配置生成;與jeecg相比,jeecg的持久層叫minidao,該dao按照其官方文檔所說,即具有Hibernate的全自動性,又兼有MyBatis的靈活性。與gun相比,gun的與我該在線配置代碼生成器,比較相似,但總的來說,並不一樣。

關於jeesite開源地址可以參考該網址:https://gitee.com/thinkgem/jeesite4

關於jeecg開源地址可以參考該網址:https://gitee.com/jeecg

我的關於EasyPoi導出Excel和EasyPoi以Excel格式批量錄入數據,均采用jeecg的開源項目EasyPoi。

gun的話,我之所以與其不一樣,是因為其代碼生成器以zip包形式生成相關表代碼。而我直接就是在頁面上輸入路徑,直接在本地生成,當然了,生成以后還不能直接用,需要導入本地,但是總的來說,改動幾乎為零,與之前我所提到過的MyBatis的逆向工程對比而言。

當然了,也不能完全否定MyBatis的逆向工程,畢竟只要項目結構和架構設計妥當還是很有效率的。

關於MyBatis的逆向工程可以參考我的這兩篇博文:

動態web項目的逆向工程地址為:mybatis逆向工程之動態web項目

Maven工程的逆向工程地址為:mybatis逆向工程之maven工程

在線配置代碼生成主要是為了提高研發人員的工作效率。之前我就強調過,DRY原則的重要性,並為此寫了這篇文章編程之代碼抽象三原則,大家可以借鑒和參考。

 

下面開始進入正題講解在線配置代碼生成器的思路:

首先准備環境:JDK8+MAVEN3+Eclipse或IDEA+Spring+MyBatis Plus+SpringMVC

一、導入MAVEN依賴

以下依賴,是我公司中幾個項目比較通用的依賴,大家可以直接導入進來即可。當然了,建議阿里雲私服,因為在maven公共倉庫下載如下依賴,對於網速具有一定的要求,記得之前研究某個開源技術是,光下載依賴就耽誤我不少時間,而且有的時候因為本地倉庫依賴沖突問題或者其他意外問題使對應的開源項目暫時無法運行起來。

關於線上私服搭建可以參考我的這篇文章:Maven搭建私服

<properties>
        <!-- 文件拷貝時的編碼 -->  
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>  
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>  
        <!-- 編譯時的編碼 -->  
        <maven.compiler.encoding>UTF-8</maven.compiler.encoding> 
        <spring.version>4.3.13.RELEASE</spring.version>
        <junit.version>4.12</junit.version>
        <druid.version>1.1.0</druid.version>
        <fastjson.version>1.2.8</fastjson.version>
        <mybaitsplus.version>2.1.8</mybaitsplus.version>
        <mysql.version>5.1.38</mysql.version>
        <log4j.version>1.2.17</log4j.version>
        <slf4j.version>1.7.19</slf4j.version>
        <aspectjweaver.version>1.8.8</aspectjweaver.version>
        <fileupload.version>1.3.1</fileupload.version>
        <jstl.version>1.2</jstl.version>
        <commons-io.version>2.5</commons-io.version>
        <commons-fileupload.version>1.3.1</commons-fileupload.version>
        <ruedigermoeller-fst.version>2.56</ruedigermoeller-fst.version>
        <json.version>20170516</json.version>
        <dozer.version>5.5.1</dozer.version>
        
        <!--  -->
        <runtime.version>7.0.0.Final</runtime.version>
    </properties>

    <dependencies>
    
        <!-- redis -->
         <dependency>  
            <groupId>redis.clients</groupId>  
            <artifactId>jedis</artifactId>  
            <version>2.1.0</version>  
        </dependency>
        <!-- spring-data-redis -->
         <dependency>
                <groupId>org.springframework.data</groupId>
              <artifactId>spring-data-redis</artifactId>
             <version>1.0.2.RELEASE</version>
        </dependency>
        <!-- mybatis-ehcache -->
        <dependency>
            <groupId>org.mybatis.caches</groupId>
            <artifactId>mybatis-ehcache</artifactId>
            <version>1.0.3</version>
        </dependency>
        
        <!-- drools規則引擎 -->
        <dependency>
          <groupId>org.kie</groupId>
          <artifactId>kie-api</artifactId>
          <version>${runtime.version}</version>
        </dependency>
        <dependency>
          <groupId>org.drools</groupId>
          <artifactId>drools-core</artifactId>
          <version>${runtime.version}</version>
        </dependency>
        <dependency>
          <groupId>org.drools</groupId>
          <artifactId>drools-decisiontables</artifactId>
          <version>${runtime.version}</version>
        </dependency>
        <dependency>
          <groupId>org.jbpm</groupId>
          <artifactId>jbpm-test</artifactId>
          <version>${runtime.version}</version>
        </dependency>
        
        <!-- JUnit -->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>${junit.version}</version>
            <scope>test</scope>
        </dependency>
            

        <!-- Spring -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
            <version>${spring.version}</version>
            <type>jar</type>
            <scope>compile</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>${spring.version}</version>
            <type>jar</type>
            <scope>compile</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context-support</artifactId>
            <version>${spring.version}</version>
            <type>jar</type>
            <scope>compile</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-tx</artifactId>
            <version>${spring.version}</version>
            <type>jar</type>
            <scope>compile</scope>
        </dependency>
        <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-test</artifactId>
          <version>${spring.version}</version>
          <scope>compile</scope>
           </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-aop</artifactId>
            <version>${spring.version}</version>
            <type>jar</type>
            <scope>compile</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-beans</artifactId>
            <version>${spring.version}</version>
            <type>jar</type>
            <scope>compile</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>${spring.version}</version>
            <type>jar</type>
            <scope>compile</scope>
        </dependency>

        <!-- Spring MVC -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-web</artifactId>
            <version>${spring.version}</version>
            <type>jar</type>
            <scope>compile</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>${spring.version}</version>
            <type>jar</type>
            <scope>compile</scope>
        </dependency>

        <!-- AOP -->
        <dependency>
            <groupId>org.aspectj</groupId>
            <artifactId>aspectjweaver</artifactId>
            <version>${aspectjweaver.version}</version>
        </dependency>

        <!-- FileUpload -->
        <dependency>
            <groupId>commons-fileupload</groupId>
            <artifactId>commons-fileupload</artifactId>
            <version>${fileupload.version}</version>
        </dependency>

        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>jstl</artifactId>
            <version>${jstl.version}</version>
        </dependency>

        <!-- Mybatis-Plus -->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus</artifactId>
            <version>${mybaitsplus.version}</version>
        </dependency>

        <!-- Mysql -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>${mysql.version}</version>
        </dependency>

        <!-- Druid -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>${druid.version}</version>
        </dependency>

        <!-- FastJson -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>${fastjson.version}</version>
        </dependency>

        <!-- Log -->
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>${log4j.version}</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>${slf4j.version}</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
            <version>${slf4j.version}</version>
        </dependency>
        
        
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-lang3</artifactId>
            <version>3.3.2</version>
        </dependency>
        
        <dependency>
            <groupId>commons-io</groupId>
            <artifactId>commons-io</artifactId>
            <version>${commons-io.version}</version>
        </dependency>
        
        <dependency>
            <groupId>de.ruedigermoeller</groupId>
            <artifactId>fst</artifactId>
            <version>${ruedigermoeller-fst.version}</version>
        </dependency>
       <dependency>
            <groupId>commons-codec</groupId>
            <artifactId>commons-codec</artifactId>
            <version>1.10</version>
        </dependency>
        
        <dependency>
            <groupId>commons-beanutils</groupId>
            <artifactId>commons-beanutils</artifactId>
            <version>1.9.3</version>
        </dependency>
        
                
        <!-- Json in java  -->
        <dependency>
            <groupId>org.json</groupId>
            <artifactId>json</artifactId>
            <version>20170516</version>
        </dependency>

        <!-- Email -->
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-email</artifactId>
            <version>1.4</version>
        </dependency>
        <dependency>
            <groupId>javax.activation</groupId>
            <artifactId>activation</artifactId>
            <version>1.1.1</version>
        </dependency>
        
        <!-- 條形碼、二維碼生成  -->
        <dependency>
            <groupId>com.google.zxing</groupId>
            <artifactId>core</artifactId>
            <version>3.3.0</version>
        </dependency>
        <dependency>
            <groupId>com.google.zxing</groupId>
            <artifactId>javase</artifactId>
            <version>3.3.0</version>
        </dependency>
        
        <!-- User Agent -->
        <dependency>
            <groupId>eu.bitwalker</groupId>
            <artifactId>UserAgentUtils</artifactId>
            <version>1.20</version>
        </dependency>
        
        <!-- Apache HTTP -->
        <dependency>
          <groupId>org.apache.httpcomponents</groupId>
          <artifactId>httpclient</artifactId>
          <version>4.5.3</version>
        </dependency>
        
        <!-- Jsoup HTTP -->
        <dependency>
            <groupId>org.jsoup</groupId>
            <artifactId>jsoup</artifactId>
            <version>1.9.1</version>
        </dependency>
        
        <!-- 圖片Meta獲取 -->
        <dependency>
            <groupId>com.drewnoakes</groupId>
            <artifactId>metadata-extractor</artifactId>
            <version>2.9.1</version>
        </dependency>
        <!-- 縮略圖工具  -->
        <dependency>
            <groupId>net.coobird</groupId>
            <artifactId>thumbnailator</artifactId>
            <version>0.4.8</version>
        </dependency>
        <!-- 圖片驗證碼生成  -->
        <dependency>
            <groupId>com.bladejava</groupId>
            <artifactId>blade-patchca</artifactId>
            <version>1.0.5</version>
        </dependency>
        
        <!-- jackson -->        
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-core</artifactId>
            <version>2.9.4</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>2.9.5</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.dataformat/jackson-dataformat-xml -->
        <dependency>
            <groupId>com.fasterxml.jackson.dataformat</groupId>
            <artifactId>jackson-dataformat-xml</artifactId>
            <version>2.9.5</version>
        </dependency>
        
        <!-- Java xml -->
        <dependency>
            <groupId>dom4j</groupId>
            <artifactId>dom4j</artifactId>
            <version>1.6.1</version>
        </dependency>
        
        <!-- XPath xml -->
        <dependency>
            <groupId>jaxen</groupId>
            <artifactId>jaxen</artifactId>
            <version>1.1.6</version>
        </dependency>
        
        <!-- Snake YAML -->
        <dependency>
            <groupId>org.yaml</groupId>
            <artifactId>snakeyaml</artifactId>
            <version>1.17</version>
        </dependency>
        
    
        <!-- Bean To Bean copy -->
        <dependency>
            <groupId>net.sf.dozer</groupId>
            <artifactId>dozer</artifactId>
            <version>${dozer.version}</version>
        </dependency>
        
        
        
        <!-- pinyin4j -->
        <dependency>
            <groupId>com.belerweb</groupId>
            <artifactId>pinyin4j</artifactId>
            <version>2.5.0</version>
        </dependency>
        
        <!-- Apache Tools Ant Tar Zip  -->
        <dependency>
            <groupId>org.apache.ant</groupId>
            <artifactId>ant</artifactId>
            <version>1.9.7</version>
        </dependency>
        
        <!-- File MimeType ContentType -->
        <dependency>
            <groupId>net.sf.jmimemagic</groupId>
            <artifactId>jmimemagic</artifactId>
            <version>0.1.3</version>
            <exclusions>
                <exclusion>
                    <groupId>xerces</groupId>
                    <artifactId>xercesImpl</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>org.codehaus.jackson</groupId>
                    <artifactId>jackson-xc</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>org.codehaus.jackson</groupId>
                    <artifactId>jackson-jaxrs</artifactId>
                </exclusion>
                <exclusion>
                    <artifactId>log4j</artifactId>
                    <groupId>log4j</groupId>
                </exclusion>
            </exclusions>
        </dependency>
    
    <!-- 騰訊雲 -->
    <dependency>
           <groupId>com.qcloud</groupId>
           <artifactId>cos_api</artifactId>
           <version>5.2.4</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/commons-codec/commons-codec -->
    <dependency>
        <groupId>commons-codec</groupId>
        <artifactId>commons-codec</artifactId>
        <version>1.11</version>
    </dependency>


    <!-- https://mvnrepository.com/artifact/com.squareup.okhttp3/okhttp -->
    <dependency>
        <groupId>com.squareup.okhttp3</groupId>
        <artifactId>okhttp</artifactId>
        <version>3.9.1</version>
    </dependency>
    
    <!-- https://mvnrepository.com/artifact/com.squareup.okio/okio -->
    <dependency>
        <groupId>com.squareup.okio</groupId>
        <artifactId>okio</artifactId>
        <version>1.13.0</version>
    </dependency>
    

    
    <!-- 注冊加密常用工具 -->
    <dependency>
        <groupId>org.mindrot</groupId>
        <artifactId>jbcrypt</artifactId>
        <version>0.4</version>
    </dependency>
    
    <!-- easypoi導入導出excel -->    
   <dependency>
          <groupId>cn.afterturn</groupId>
          <artifactId>easypoi-base</artifactId>
          <version>3.1.0</version>
      </dependency>
      <dependency>
          <groupId>cn.afterturn</groupId>
          <artifactId>easypoi-web</artifactId>
          <version>3.1.0</version>
      </dependency>
      <dependency>
          <groupId>cn.afterturn</groupId>
          <artifactId>easypoi-annotation</artifactId>
          <version>3.1.0</version>
      </dependency>
     
      <!-- hutool -->
      <dependency>
            <groupId>cn.hutool</groupId>
            <artifactId>hutool-all</artifactId>
            <version>4.1.0</version>
      </dependency>
      
      
          <!-- swagger api文檔管理 -->
        <dependency>
            <groupId>com.mangofactory</groupId>
            <artifactId>swagger-springmvc</artifactId>
            <version>1.0.2</version>
        </dependency>
        
        <dependency>
            <groupId>com.mangofactory</groupId>
            <artifactId>swagger-models</artifactId>
            <version>1.0.2</version>
        </dependency>
        
        <dependency>
            <groupId>com.wordnik</groupId>
            <artifactId>swagger-annotations</artifactId>
            <version>1.3.11</version>
        </dependency>
        
        <dependency>
            <groupId>com.google.guava</groupId>
            <artifactId>guava</artifactId>
            <version>15.0</version>
        </dependency>
        
        <!-- 集成springfox -->
        <dependency> 
          <groupId>io.springfox</groupId> 
          <artifactId>springfox-swagger2</artifactId> 
          <version>2.7.0</version> 
        </dependency> 
        
        <dependency> 
          <groupId>io.springfox</groupId> 
          <artifactId>springfox-swagger-ui</artifactId> 
          <version>2.7.0</version> 
        </dependency>
        
        <dependency>
            <groupId>net.sf.ehcache</groupId>
            <artifactId>ehcache-core</artifactId>
            <version>2.6.6</version>
        </dependency>
        
         <!-- jsp -->
        <dependency>
        <groupId>javax.servlet.jsp</groupId>
         <artifactId>jsp-api</artifactId>
         <version>2.1</version>
         <scope>compile</scope>
        </dependency>
        
        <!-- servlet -->
        <dependency>
          <groupId>javax.servlet</groupId>
          <artifactId>javax.servlet-api</artifactId>
          <version>3.1.0</version>
          <scope>compile</scope>
        </dependency>
    
        <!-- shiro -->
        <dependency>
            <groupId>org.apache.shiro</groupId>
            <artifactId>shiro-core</artifactId>
            <version>1.4.0</version>
        </dependency>
        <dependency>
            <groupId>org.apache.shiro</groupId>
            <artifactId>shiro-web</artifactId>
            <version>1.4.0</version>
        </dependency>
        <dependency>
            <groupId>org.apache.shiro</groupId>
            <artifactId>shiro-spring</artifactId>
            <version>1.4.0</version>
        </dependency>
        <dependency>
            <groupId>org.apache.shiro</groupId>
            <artifactId>shiro-ehcache</artifactId>
            <version>1.4.0</version>
        </dependency>
        <dependency>  
             <groupId>org.apache.shiro</groupId>  
             <artifactId>shiro-quartz</artifactId>  
             <version>1.4.0</version>  
        </dependency>
        

        <!-- 個推 推送 -->
        <dependency>
            <groupId>com.gexin.platform</groupId>
            <artifactId>gexin-rp-sdk-http</artifactId>
            <version>4.0.1.17</version>
        </dependency>  
        
        <!-- velocity -->
        <dependency>
            <groupId>org.apache.velocity</groupId>
            <artifactId>velocity</artifactId>
            <version>1.6.4</version>
        </dependency>
        

 

二、導入正確的依賴后,即可編寫對應的Controller方法

關於@ApiOperation注解主要是為了接口文檔自動化,傳統的編寫word文檔作為接口管理,耗時效率低,使用swagger或者swagger2在線可以直接測試,又方便安卓或者web研發人員管理和測試

關於swagger接口自動化搭建可以參考我的這幾篇文章:

MP實戰系列(八)之SpringBoot+Swagger2

MP實戰系列(十)之SpringMVC集成SpringFox+Swagger2

SpringMVC+Swagger詳細整合

這幾篇文章我相信應該可以減少走彎路的可能性。

 

關於JSONObject,這里使用的是Hutool開源項目,該開源項目之前我也介紹過,集成Java研發常用工具類。

參考文檔地址為:http://hutool.mydoc.io/

/**
     * 代碼生成器接口
     * @param author
     * @param dir
     * @param tableName
     * @return
     */
    @PostMapping(value="/productCode",produces="application/json;charset=utf-8")
    @ApiOperation(value="代碼生成器接口",httpMethod="POST",notes="代碼生成器接口")
    public JSONObject productCode(String author,String dir,String tableName) {
        JSONObject json = new JSONObject();

        try {
            if(!StrUtil.hasEmpty(author,dir,tableName)) {
                
                  // 自定義需要填充的字段
                List<TableFill> tableFillList = new ArrayList<>();
                tableFillList.add(new TableFill("ASDD_SS", FieldFill.INSERT_UPDATE));

                
                // 代碼生成器
                AutoGenerator mpg = new AutoGenerator().setGlobalConfig(
                        // 全局配置
                        
                        new GlobalConfig()
                                .setOutputDir(dir)//輸出目錄
                                .setFileOverride(true)// 是否覆蓋文件
                                .setActiveRecord(true)// 開啟 activeRecord 模式
                                .setEnableCache(false)// XML 二級緩存
                                .setBaseResultMap(true)// XML ResultMap
                                .setBaseColumnList(true)// XML columList
                                .setAuthor(author)
                                
                        // 自定義文件命名,注意 %s 會自動填充表實體屬性!
            
                         .setMapperName("%sDao")
                         .setXmlName("%sDao")
                         .setServiceName("%sService")
                         .setServiceImplName("%sServiceImpl")
                         .setControllerName("%sController")
                ).setDataSource(
                        
                    
                        // 數據源配置
                        new DataSourceConfig()
                                .setDbType(DbType.MYSQL)// 數據庫類型
                                .setTypeConvert(new MySqlTypeConvert() {
                                    // 自定義數據庫表字段類型轉換【可選】
                                    @Override
                                    public DbColumnType processTypeConvert(String fieldType) {
                                        System.out.println("轉換類型:" + fieldType);
                                 
                                        return super.processTypeConvert(fieldType);
                                    }
                                })
                                .setDriverName("com.mysql.jdbc.Driver")
                                .setUsername("root")
                                .setPassword("1234")
                                .setUrl("jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf8&useSSL=false")
                                
                ).setStrategy(
                        // 策略配置
                        new StrategyConfig()
                                
                                .setTablePrefix(new String[]{"rms","js"})/// 此處可以修改為您的表前綴
                                .setNaming(NamingStrategy.underline_to_camel)// 表名生成策略
                                .setInclude(new String[] {tableName}) // 需要生成的表
                                .setTableFillList(tableFillList)
                       
                ).setPackageInfo(
                        // 包配置
                        new PackageConfig()    
                                .setParent("com.blog")// 自定義包路徑
                                .setController("controller")// 這里是控制器包名,默認 web
                ).setCfg(
                        // 注入自定義配置,可以在 VM 中使用 cfg.abc 設置的值
                        new InjectionConfig() {
                            @Override
                            public void initMap() {
                                Map<String, Object> map = new HashMap<>();
                                map.put("abc", this.getConfig().getGlobalConfig().getAuthor() + "");
                                this.setMap(map);
                            }
                        }.setFileOutConfigList(Collections.<FileOutConfig>singletonList(new FileOutConfig("/templates/mapper.xml.vm") {
                            // 自定義輸出文件目錄
                            @Override
                            public String outputFile(TableInfo tableInfo) {
                                return dir+"//"+ tableInfo.getEntityName()+"Dao" + ".xml";
                                
                            }
                        }))
                ).setTemplate(
                        // 關閉默認 xml 生成,調整生成 至 根目錄
                        new TemplateConfig().setXml(null)
                       
                       
                );

                // 執行生成
                mpg.execute();

                // 打印注入設置,這里演示模板里面怎么獲取注入內容【可無】
                System.err.println(mpg.getCfg().getMap().get("abc"));
                
                json.put("returnMsg", "代碼生成成功");
                json.put("returnCode", "000000");    
            }else {
                json.put("returnMsg", "參數異常");
                json.put("returnCode", "111111");    
            }
            
        } catch (Exception e) {
            e.printStackTrace();
            json.put("returnMsg", "代碼生成失敗");
            json.put("returnCode", "222222");
        }

        return json;
        
    }

 

 

三、界面

讓大家看看效果:

 

 

 

 

 

有一點需要明確的是,該代碼在線配置生成,只能針對本地window系統,如果已經部署到線上是無法生成的,也不會報錯,因為window的文件系統和linux的文件系統存在差異。

當然了,這里的差異也不影響我們研發人員的正常使用。

該在線代碼生成器的意義在於,每當用戶提出一個新的需求時,我們總能快速生成相關的代碼,然后專注於復雜的業務。簡單的增刪改查,誰都會。但是復雜的業務邏輯,就不僅僅誰都會了,雖然在網上看不少朋友說,重復的業務代碼寫久了也沒意思。其實怎么說呢?我看過不少業務代碼,發現一點,我和我的同學們都發現了這點,那就是許多業務代碼基本就是復制粘貼的作品,甚至將代碼上開發者名字都復制下來的,我想說,老兄你也太懶了吧。

當然了,復制粘貼是可以提高效率,但是好歹也得代碼格式化下,讓代碼看起來工整,還有就是有些注釋該加還是要加,當然注釋越少越好,真正優秀的代碼,是讓人一看就明白是什么意思,所以說那些自以為是的人,自以為自己代碼寫的讓人看不懂就自我感覺非常牛逼,其實那樣只會讓你越來越退步,直到失業。所以說,代碼就好比講通俗易懂的故事,至少要讓人家在最短的時間看懂,而不是光看你這個代碼我就花了一天,到最好我只有重構了這樣的不是辦法中的辦法。

 

關於web界面上展示MySQL所有數據庫信息,單個數據庫所有表信息,數據表所有字段信息,大家可以參考我編寫的如下DAO:

public interface DataBaseDao {
    

    @Select("SHOW DATABASES")
    public List<Map<String, String>> selectDataBases();
    
    @Select("show columns from ${tableName}")
    public List<Map<String, String>> showColumns(@Param("tableName")String tableName);
    
    @Select("SHOW tables from ${databaseName}")
    public List<Map<String, String>> showTables(@Param("databaseName")String databaseName);
    

}

 

xml文件:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.mapper.DataBaseDao">
</mapper>

 

 

這里我采用的是MyBatis的注解,當然這種注解的最不好缺點就是使Java代碼和sql混合一起顯得雜亂,當然少的時候看起來沒什么,多的話,建議使用xml方式,這也是MyBatis官方比較推崇的方式。

補充說明:使用MyBatis的注解還是得存在對應的xml文件,盡管你的xml文件沒有對應的sql。

DataBaseService代碼和實現類如下:

Service代碼:

public interface DataBaseService {

    
    public List<Map<String, String>> selectDataBases();
    
    public List<Map<String, String>> showTables(@Param("databaseName")String databaseName);
    
    public List<Map<String, String>> showColumns(@Param("tableName")String tableName);


}

 

Service實現類:

@Service
public class DataBaseServiceImpl implements DataBaseService {

    @Autowired
    private DataBaseDao dataBaseDao;
    
    @Override
    public List<Map<String, String>> selectDataBases() {
        // TODO Auto-generated method stub
        return dataBaseDao.selectDataBases();
    }

    @Override
    public List<Map<String, String>> showTables(String databaseName) {
        // TODO Auto-generated method stub
        return dataBaseDao.showTables(databaseName);
    }

    @Override
    public List<Map<String, String>> showColumns(String tableName) {
        // TODO Auto-generated method stub
        return dataBaseDao.showColumns(tableName);
    }



}

 

 

對應的Controller如下:

/**
     * 獲取所有數據庫
     * @return
     */
    @GetMapping(value="/getAllDataBaseInfo",produces="application/json;charset=utf-8")
    @ApiOperation(value="獲取所有數據庫",httpMethod="GET",notes="獲取所有數據庫")
    public JSONObject getAllDataBaseInfo() {
    
        JSONObject json = new JSONObject();
        try {
            List<Map<String, String>> list = dataBaseService.selectDataBases();
            
            if(list.size()!=0) {
                
                json.put("lines", list.size());
                json.put("list", list);
                json.put("returnMsg", "存在數據");
                json.put("returnCode", "00000");
                
            }else {
                json.put("returnMsg", "沒有數據");
                json.put("returnCode", "111111");
            }

            
        } catch (Exception e) {        
            e.printStackTrace();
            json.put("returnMsg", "特殊異常");
            json.put("returnCode", "222222");// TODO: handle exception
        }
        
    
        return json;
    
    }
    
    /**
     * 獲取單個數據庫所有表信息
     * @param databaseName
     * @return
     */
    @GetMapping(value="/querySingleDataBaseInfo",produces="application/json;charset=utf-8")
    @ApiOperation(value="獲取單個數據庫所有表信息",httpMethod="GET",notes="獲取單個數據庫所有表信息")
    public JSONObject querySingleDataBaseInfo(String databaseName) {
        
        JSONObject json = new JSONObject();
        
        try {
            
            if(!StrUtil.isEmpty(databaseName)) {
                List<Map<String, String>> list = dataBaseService.showTables(databaseName);
                
                
                if(list.size()!=0) {
                    
                    json.put("lines", list.size());
                    json.put("list", list);
                    json.put("returnMsg", "獲取數據");
                    json.put("returnCode", "00000");
                    
                }else {
                    json.put("returnMsg", "獲取數據失敗");
                    json.put("returnCode", "111111");
                }

            }else {
                
                json.put("returnMsg", "參數異常");
                json.put("returnCode", "222222");
            }
            
            
            
        } catch (Exception e) {        
            e.printStackTrace();
            json.put("returnMsg", "特殊異常");
            json.put("returnCode", "333333");// TODO: handle exception
        }
        
    
        return json;
    }
    
    /**
     * 獲取單個表所有字段信息
     * @param tableName
     * @return
     */
    @GetMapping(value="/querySingleTableInfo",produces="application/json;charset=utf-8")
    @ApiOperation(value="獲取單個表所有字段信息",httpMethod="GET",notes="獲取單個數據庫所有表信息")
    public JSONObject querySingleTableInfo(String tableName) {
        
        JSONObject json = new JSONObject();
        
        try {
            
            if(!StrUtil.isEmpty(tableName)) {
                List<Map<String, String>> list = dataBaseService.showColumns(tableName);
                
                
                if(list.size()!=0) {
                    
                    json.put("lines", list.size());
                    json.put("list", list);
                    json.put("returnMsg", "獲取數據");
                    json.put("returnCode", "00000");
                    
                }else {
                    json.put("returnMsg", "獲取數據失敗");
                    json.put("returnCode", "111111");
                }

            }else {
                
                json.put("returnMsg", "參數異常");
                json.put("returnCode", "222222");
            }
            
            
            
        } catch (Exception e) {        
            e.printStackTrace();
            json.put("returnMsg", "特殊異常");
            json.put("returnCode", "333333");// TODO: handle exception
        }
        
    
        return json;
    }
    

 

 

 希望本篇文章能夠給大家的開發效率帶來提升


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM