<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                因為代碼生成器涉及到了太多次的提交 如下圖所示git的提交記錄 ![](https://img.kancloud.cn/02/3c/023c55fb69137574195742ad2b5808b2_1230x672.png) 所以今天我們做一個總的記錄 ### 首先我們有單獨的代碼生成器模塊generator,這個模塊除了生成持久層的代碼之外同時我們今天也將它打造為控制器、service、新增請求類、查詢請求類、結果返回類的代碼都在這個模塊下生成 ### 前面講過的mybatis持久層代碼如何生成的我們就不廢話了,去看前面的文章就行 ### 第一步:首先在generator子模塊的pom.xml當中增加如下依賴 ![](https://img.kancloud.cn/11/9d/119d71646d7e63315adc958f2f867411_1469x970.png) ### 第二步:在generator子模塊的resource當中的generator-config-member.xml當中的最后 ![](https://img.kancloud.cn/64/eb/64eb39950c012b9163703e65b861330e_1808x947.png) 如上圖所示這里規定了要對哪個表要生成持久層的代碼以及生成的代碼的類的名稱是什么 雖然是mybatis持久層但是我們生成自定義的其他代碼也需要用到,因為在生成service的時候就需要使用到mapper 但是mapper的名稱就是根據這里的Passenger來命名的 **所以在整個的自定義代碼生成器當中 上圖當中的兩個名字非常關鍵!!!** ### 另外這里提到的generator-config-member.xml只是一個案例當然你也可以使用別的名字但是我們這里就約定是使用這種方式來命名,**尤其關鍵的是最后的member一定要和子模塊的名稱對其!!!因為在生成控制器或者service或者其他請求和返回結果類的時候一定有所在的模塊是哪個,就是取得這個文件名稱的最后一個單詞作為模塊名稱** ### 這是兩個非常值得注意的地方,后面講到我們也會標注出來 ### 接下來我們截圖代碼梳理一下整體的步驟,具體細節還是去看git版本提交信息或者直接去讀我的源代碼也行 ### 1、先看一下整體目錄結構 ![](https://img.kancloud.cn/92/76/9276ed0178a62e7c7c5b485bfd4447d6_1668x992.png) ### 2、獲取generator/pom.xml節點信息拿到定義的之前持久層代碼生成器用到的配置文件路徑 ![](https://img.kancloud.cn/28/b2/28b258f2c8ee08f71d868d38861b4b26_1691x939.png) ![](https://img.kancloud.cn/10/f8/10f883e540fca1aa3709e2c4018fca52_1819x1005.png) ### ![](https://img.kancloud.cn/55/9e/559e47e46406c72b7d59ec7dda03f732_1556x854.png) ### 如下圖所示這樣就拿到了src/main/resources/generator-config-member.xml當中的member子模塊的名稱 ![](https://img.kancloud.cn/1f/23/1f23a4f61a42b52afc0f107eca8e570c_1583x950.png) ### 接下來去拿表名稱和對應的類名稱: ![](https://img.kancloud.cn/44/13/4413ce3d65e69bec88d67da3549ae400_1584x903.png) ### 接下來除了我們要生成service、控制器等后端代碼我們考慮將前端vue的代碼也一起生成了,但是前端的頁面當中的表單等數據肯定是根據數據庫字段名稱以及類型以及注釋等信心來生成的 ### 所以我們需要拿到src/main/resources/generator-config-member.xml當中的數據源信息也就是如下圖所示的里面的元素信息的值: ![](https://img.kancloud.cn/44/ff/44ff7e1e05a939fe36020bef6cb9f5aa_1806x911.png) ### 如何拿呢?如下圖所示 ![](https://img.kancloud.cn/a2/b9/a2b984cbd32f54fd09011e581f4fda0b_1520x878.png) ### 拿到之后我們需要鏈接數據庫啊 我們使用傳統的jdbc去鏈接數據庫就行 所以我們寫了一個DbUtil工具 ### ![](https://img.kancloud.cn/59/53/59531491f7f13ba71a8fc581c28db4d1_1373x990.png) ### 如何存儲這些字段的信息呢?所以我們還定義了一個Field字段類 ![](https://img.kancloud.cn/f5/a0/f5a0737bba8e2fe9e4c1bf63fe749490_1328x965.png) ### 然后就是使用DbUtil工具類去獲取表和字段的一些信息了 ![](https://img.kancloud.cn/84/3e/843e38fa1f1301187a5a3c0c00a5f717_1353x831.png) ### 尤其是在獲取字段列的一些信息的時候有一些特別需要注意的地方 ![](https://img.kancloud.cn/11/cf/11cfa612bda6377763e86aa109615bb0_1439x993.png) 如上圖所示: **第一點就是字段的注釋信息 如果是 “旅客|xxxxxxxx“的那么我們就直接取|前面的作為字段注釋信息; 第二點就是字段的長度,主要是針對varchar類型來設置長度,如果不是varchar類型那么長度統統為0; 第三點就是枚舉類型,枚舉的注釋一定要這么寫:枚舉[CourseLevelEnum] 一定要有枚舉兩個字然后中括號里面就是枚舉的名字一定要帶著后綴Enum 我們會根據枚舉兩個字判定這個字段是不是枚舉類型 然后拿到CourseLevel作為枚舉的名字去后端枚舉類讀取枚舉數據** ### ![](https://img.kancloud.cn/e6/ea/e6ea06025295a59dfc8208cd4e3539f8_1309x698.png) ### 最后就是將數據整合組裝參數 ![](https://img.kancloud.cn/31/7d/317dafacff8bd5934d242426cf49937c_1233x757.png) ### 然后我們先說一下生成后端代碼的方法gen() ### ![](https://img.kancloud.cn/8d/9c/8d9c88cfcaf014e3e49f9356807eed4d_1715x966.png) ### 所以這里尤為重要的就是ftl的模版了 ### 思路一般是這樣的:先寫一套標準的CURD的后端接口然后拷貝過來改造成模板就行 比如控制器的模版就是根據標準的控制器改造而來的 用標簽替換掉之前寫死的類名稱等信息 ![](https://img.kancloud.cn/a2/c7/a2c797e32848299fd6065e3bdf539603_1862x960.png) ### 請求類的模版比較簡單 因為我們需要生成的是標準的代碼 像之前在里面寫的各種條件判斷統統不要 生成好請求類代碼之后再去改就行 ![](https://img.kancloud.cn/46/9a/469afbcd381d634dfec2541e9a66cf0e_1161x691.png) ### 結果返回類更復雜哈 ![](https://img.kancloud.cn/9d/95/9d954d6d497b080d3384ca1026211103_1355x959.png) ### 最后就是根據gen()方法來生成對應的后端代碼了 ### 接下里我們看一下前端vue的代碼是如何生成的額? 其實比后端代碼的業務邏輯簡單多了 ![](https://img.kancloud.cn/e5/ce/e5ce78a01142300f9231d6aac0c10a6a_1308x943.png) ### 看一下vue.ftl模版不難發現也是進行的模版變量的替換 ![](https://img.kancloud.cn/83/54/83546b7140da0b160cf88af72ad22a86_1452x993.png) ![](https://img.kancloud.cn/08/78/08783c1c31bce2fd10bdfc0be32202bd_1213x867.png) 當然模版也不是一觸而就的 需要改好多次好多次好多次 我擦!!! ### 但是最為重要的一點就是枚舉類型在前端的顯示 ### ![](https://img.kancloud.cn/6e/16/6e16349f7e619f5decfbad22209ae4dd_1157x864.png) ### 通過后端傳遞的參數就已經拿到了對應的枚舉的變量名稱 比如字段注釋信息為枚舉[CourseLevelEnum]那么返回的枚舉名稱就是CourseLevel ### 本身我們是直接手動寫死在前端代碼里面的 ![](https://img.kancloud.cn/b1/1f/b11fb6e4268b5fac207f638039c66248_1595x802.png) ### 可是這樣也不行啊 總不能后端寫一個枚舉類 前端就跟著寫一個枚舉js啊!當然也可以這么玩 不過我們又寫了一個前端枚舉代碼生成器 ### ![](https://img.kancloud.cn/2d/86/2d860145368bc866a87ee52658aa7e2f_1649x959.png) #### 并且生成兩種格式的枚舉數據 ![](https://img.kancloud.cn/8b/4b/8b4bcf0e777c8dd27f7a234686d598e8_1361x445.png) ### 在整個的設計過程當中約定了一些規范!!! 使用的時候也請遵守這些規范!!! 否則會有意外報錯產生!!!
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看