精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

手把手教你開發代碼生成器,學不會的來懟我!

開發 開發工具
在實際的軟件項目開發過程中,我可以很負責任的跟大家說,如果你真的實際寫代碼的時間過5年了,你對增刪改查這類簡單的功能需求開發,可以說已經完全寫吐了,至少我就是這種類型的。

[[418900]]

一、介紹

在實際的軟件項目開發過程中,我可以很負責任的跟大家說,如果你真的實際寫代碼的時間過5年了,你對增刪改查這類簡單的功能需求開發,可以說已經完全寫吐了,至少我就是這種類型的。

但是呢,不可否認,絕大多數的軟件功能,向下追隨到最基本的單元,也基本都是單表的增、刪、改、查!

只是隨著用戶需求不斷增多,原來可能一個張單表就可以搞定的事情,現在可能需要多張表,或者多個庫才能搞定,代碼層就像堆積木一樣,越堆越復雜。

我記得早期做項目的時候,項目每新加一張單表,我都需要在代碼層,按照MVC框架的思想,重新編寫一套CURD的代碼,寫完所有的基礎的增刪改查,至少需要20分鐘,手快的情況下,最快也要10分鐘。

假如某個新開發的功能,要新增10張表,按照這個時間計算,至少要100分鐘,仔細想想,其實你會發現大部分的時間都浪費在這些簡單而又重復的編程圈子中去了。

那有沒有一個辦法,將這些簡單的CURD代碼,全部都標準化、公共化呢?這樣我們的可以省下很多時間來投入業務場景的開發。

答案是肯定的,有!

我記得早期我最先接觸的是MybatisGenertor工具包,通過這個工具包,我們可以省去大部分的mybaits中xml文件的curd編寫工作。

還有我們所熟悉的JPA,里面有一套公共的持久層動態代理類,它可以自動根據名稱生成SQL語句,能為開發省下不少的事情。

但是我這個人比較懶,我想搞一個工具,從controller、service、entity、dao層,全部的crud代碼,包括單元測試類,通過工具自動生成好。

像這樣的工具,現在網上也有,例如我們所熟悉的Mybatis-plus插件,它就可以做到這一點,也是非常好用。

但是有的公司就不喜歡它,原因也很簡單,里面的很多公共方法封裝的過于深入,而且很多crud的sql全部都是動態生成,你根本看不到。

總之啊就是一句,不在自己掌控之內的,很多程序員總是帶著各種疑慮~~

當然,還有一個明顯的疑慮,就是對微服務的開發,不能全面支持,比如你項目采用的是SpringBoot +Dubbo組合來開發,這個時候生成的controller,完全沒啥用處,而且還很雞肋。

因此在這種情況下,你得基于當前的項目軟件開發規則,自己開發一套代碼生成器,以滿足快速開發的需要。

下面我就簡單的介紹一下,如何自行開發一套代碼生成器,過程如下!

二、代碼實踐

其實開發一套代碼生成器,真沒大家想象中的那么復雜,其中用的最重要一項技術,就是利用模板來生成代碼,例如我們經常使用的模板引擎freemarker,它就可以幫助我們實現這一點。

2.1、首先我們添加 freemarker 依賴包

  1. <dependency> 
  2.     <groupId>org.freemarker</groupId> 
  3.     <artifactId>freemarker</artifactId> 
  4.     <version>2.3.23</version> 
  5. </dependency> 

 

2.2、然后創建一個代碼模版

下面我們以動態創建實體類為例,編寫一個實體類的模板entity.java.ftl,其中${}里面定義的是動態變量。

  1. package ${package}; 
  2.  
  3. import java.io.Serializable
  4.  
  5. /** 
  6.  * <p> 
  7.  * ${tableComment} 
  8.  * </p> 
  9.  * 
  10.  * @author ${author} 
  11.  * @since ${date
  12.  */ 
  13. public class ${entityClass} implements Serializable { 
  14.  
  15.  private static final long serialVersionUID = 1L; 
  16.   
  17.  <#--屬性遍歷--> 
  18.  <#list columns as pro> 
  19.  
  20.  /** 
  21.   * ${pro.comment} 
  22.   */ 
  23.  private ${pro.propertyType} ${pro.propertyName}; 
  24.  </#list> 
  25.  
  26.  <#--屬性get||set方法--> 
  27.  <#list columns as pro> 
  28.  public ${pro.propertyType} get${pro.propertyName?cap_first}() { 
  29.   return this.${pro.propertyName}; 
  30.  } 
  31.  
  32.  public ${entityClass} set${pro.propertyName?cap_first}(${pro.propertyType} ${pro.propertyName}) { 
  33.   this.${pro.propertyName} = ${pro.propertyName}; 
  34.   return this; 
  35.  } 
  36.  </#list> 

2.3、最后生成目標代碼

最后我們基于freemarker編寫一個測試類!

  1. public class CodeGeneratorDemo { 
  2.  
  3.     public static void main(String[] args) throws IOException, TemplateException { 
  4.         Map<String, Object> objectMap = new HashMap<>(); 
  5.         //定義包路徑 
  6.         objectMap.put("package""com.example.test"); 
  7.         //定義實體類 
  8.         objectMap.put("entityClass""Student"); 
  9.  
  10.         //定義實體類屬性 
  11.         List<Map<String, Object>> columns = new ArrayList<>(); 
  12.         //姓名字段 
  13.         Map<String, Object> column1 = new HashMap<>(); 
  14.         column1.put("propertyType""String"); 
  15.         column1.put("propertyName""name"); 
  16.         column1.put("comment""姓名"); 
  17.         columns.add(column1); 
  18.         //年齡字段 
  19.         Map<String, Object> column2 = new HashMap<>(); 
  20.         column2.put("propertyType""Integer"); 
  21.         column2.put("propertyName""age"); 
  22.         column2.put("comment""年齡"); 
  23.         columns.add(column2); 
  24.  
  25.         //定義類的屬性 
  26.         objectMap.put("columns", columns); 
  27.         //定義作者 
  28.         objectMap.put("author""張三"); 
  29.         //定義創建時間 
  30.         objectMap.put("date", new SimpleDateFormat("yyyy-MM-dd").format(new Date())); 
  31.         //定義類描述 
  32.         objectMap.put("tableComment""學生信息"); 
  33.  
  34.         //生產目標代碼 
  35.         Configuration configuration = new Configuration(Configuration.VERSION_2_3_23); 
  36.         configuration.setDefaultEncoding(Charset.forName("UTF-8").name()); 
  37.         configuration.setClassForTemplateLoading(CodeGeneratorDemo.class, "/"); 
  38.         Template template = configuration.getTemplate("/templates/entity.java.ftl"); 
  39.         FileOutputStream fileOutputStream = new FileOutputStream(new File("../src/main/java/com/example/generator/Student.java")); 
  40.         template.process(objectMap, new OutputStreamWriter(fileOutputStream, Charset.forName("UTF-8").name())); 
  41.         fileOutputStream.close(); 
  42.         System.out.println("文件創建成功"); 
  43.  
  44.     } 

運行程序,輸出的文件結果如下!

  1. package com.example.test; 
  2.  
  3. import java.io.Serializable
  4.  
  5. /** 
  6.  * <p> 
  7.  * 學生信息 
  8.  * </p> 
  9.  * 
  10.  * @author 張三 
  11.  * @since 2021-08-22 
  12.  */ 
  13. public class Student implements Serializable { 
  14.  
  15.  private static final long serialVersionUID = 1L; 
  16.   
  17.  
  18.  /** 
  19.   * 姓名 
  20.   */ 
  21.  private String name
  22.  
  23.  /** 
  24.   * 年齡 
  25.   */ 
  26.  private Integer age; 
  27.  
  28.  public String getName() { 
  29.   return this.name
  30.  } 
  31.  
  32.  public Student setName(String name) { 
  33.   this.name = name
  34.   return this; 
  35.  } 
  36.  public Integer getAge() { 
  37.   return this.age; 
  38.  } 
  39.  
  40.  public Student setAge(Integer age) { 
  41.   this.age = age; 
  42.   return this; 
  43.  } 

與預期的效果一致,成功生成!

以上就是生成代碼最核心的部分,首先編寫一套模板,把需要填充的信息全部定義成動態變量,然后在代碼中,通過map數據格式,使用freemarker進行填充!

例如小編我就是采用這種方式,首先把要通過工具生成的代碼,全部通過模板方式定義好。

然后通過連接數據庫的方式,把需要自動生成的表結構查詢出來,封裝成數據渲染參數,最后傳入到freemarker中去,非常簡單、快速的生成與自己預期想要的代碼,所有單表的crud全部一步到位!

下面這個就是小編,基于當前項目定制開發的一款代碼生成器,項目采用SpringBoot + Dubbo框架開發,沒有Controller層,截圖中所有的代碼全部都是采用代碼生成器生成的,直接通過單元測試就可以運行,開發的時候非常快!

由于開發的代碼生成器工具,代碼有點過多,因此不便于通過文章分享給大家,有需要的朋友,可以訪問如下鏈接獲取:https://github.com/justdojava/springboot-example-generator

三、小結

代碼生成器,對于擅長以業務開發為主的程序員來說,絕對是一個巨大的福利,它能很明顯的減輕開發人員的工作量,并且提升開發效率,能騰出更多的時間專注業務開發。

實際上,目前網上已經有很多的成熟、穩定的代碼生成器,mybatis-plus就是其中一個使用非常廣泛的代碼生成器,對于以單體web開發為主的項目,它完全滿足要求。

當然,如果當下你沒有合適的代碼生成器,不妨自己試試開發一款屬于自己的代碼生成器,同樣也可以加倍提升開發效率。

四、參考

1、MyBatis-Plus 文檔

 

責任編輯:武曉燕 來源: Java極客技術
相關推薦

2023-03-14 07:34:47

代碼生成器開發

2024-01-07 20:00:27

2021-01-21 06:04:55

Go語言TCP目錄生成器

2021-09-26 16:08:23

CC++clang_forma

2021-02-26 11:54:38

MyBatis 插件接口

2021-11-24 16:02:57

鴻蒙HarmonyOS應用

2025-08-27 00:00:00

ClaudeCodeAI生成工具

2024-04-02 08:58:13

2024-03-05 18:27:43

2021-07-14 09:00:00

JavaFX開發應用

2011-05-03 15:59:00

黑盒打印機

2011-01-10 14:41:26

2025-05-07 00:31:30

2024-01-26 08:16:48

Exporter開源cprobe

2024-03-18 18:07:38

VSCode插件文件

2023-03-01 09:22:53

雙通道內存內存條

2023-04-26 12:46:43

DockerSpringKubernetes

2022-03-14 14:47:21

HarmonyOS操作系統鴻蒙

2022-01-08 20:04:20

攔截系統調用

2022-12-07 08:42:35

點贊
收藏

51CTO技術棧公眾號

亚洲无av在线中文字幕| 亚洲成人1区2区| 国产在线一区二区三区| 久久久久久久久久综合| 青青久久av| 欧美三级一区二区| 福利在线一区二区| 成人在线免费公开观看视频| 国产一区二区三区在线观看免费视频| 欧美日韩高清在线观看| 中文人妻一区二区三区| 日本一区二区三区中文字幕 | 久久久久亚洲av无码a片| 国产成人免费av一区二区午夜 | 国产精品久久久久久久久久久久久久久久| 欧美/亚洲一区| 亚洲天堂男人天堂| 影音先锋资源av| 国产激情欧美| 狠狠做深爱婷婷久久综合一区| 亚洲一区二区三区欧美| 涩涩视频免费看| 久国产精品韩国三级视频| 97精品视频在线| 欧美国产日韩综合| 日韩精品免费| 亚洲精品一区久久久久久| 香蕉视频xxxx| 久久亚洲国产精品尤物| 欧美日韩亚洲视频一区| 国产成人在线小视频| 免费人成在线观看播放视频| 久久―日本道色综合久久| 成人xxxxx色| 99在线观看精品视频| 美女脱光内衣内裤视频久久网站| 91av在线网站| 日韩av在线播| 国内精品美女在线观看 | 国产jizz18女人高潮| 校园春色另类视频| 亚洲韩国日本中文字幕| 亚洲黄色小说在线观看| 久久天堂久久| 欧美一区二区三区四区在线观看 | 久久久久久少妇| 影音先锋国产精品| 欧美人交a欧美精品| 免费看特级毛片| 天天射综合网视频| 日韩视频免费在线| 综合 欧美 亚洲日本| 精品freesex老太交| 亚洲精品日韩久久久| jizz日本免费| 偷拍亚洲精品| 亚洲欧洲一区二区三区久久| 欧美老熟妇乱大交xxxxx| 小说区图片区色综合区| 亚洲性猛交xxxxwww| 熟女少妇内射日韩亚洲| 日韩精品免费| 久久成人这里只有精品| 欧美日韩一级大片| 国产精品videosex极品| 国内精品小视频在线观看| 日本少妇bbwbbw精品| 亚洲精品综合| 日韩av片永久免费网站| 亚洲大尺度在线观看| 日本不卡一区二区| 国产自产女人91一区在线观看| 国产尤物在线观看| 国产精品影视网| 国产伦精品一区二区三区免| 日本一卡二卡四卡精品| 国产亚洲精品aa| 三年中国中文在线观看免费播放| www.久久ai| 精品国产91久久久| 50路60路老熟妇啪啪| 久久精品国产福利| 日韩精品一区二区三区在线观看| 国产伦精品一区二区免费| 亚洲黄页网站| 精品国产拍在线观看| 精品深夜av无码一区二区老年| 国产精品日韩| 成人免费xxxxx在线观看| 国模私拍视频在线| 日本一区二区三区免费乱视频 | 91精品国产综合久久久久久久 | 午夜不卡福利视频| 国产成人精品福利| 亚洲丝袜av一区| 99精品久久久久| 午夜亚洲视频| 亚洲bt欧美bt日本bt| 亚洲三区在线观看无套内射| 国产精品福利一区二区| 成人免费性视频| 高清av一区| 亚洲国产高清高潮精品美女| 青青青视频在线播放| 精品9999| 川上优av一区二区线观看| 天天摸天天碰天天爽天天弄| 亚洲欧洲精品天堂一级| 少妇性饥渴无码a区免费| 国产精品毛片aⅴ一区二区三区| 亚洲精品美女在线观看播放| 午夜国产福利一区二区| 久久精品麻豆| 岛国一区二区三区高清视频| av男人的天堂在线| 婷婷激情综合网| 亚洲在线观看网站| 色婷婷色综合| 秋霞av国产精品一区| 亚洲国产一二三区| 国产精品白丝在线| 日本精品久久久久中文字幕| 97品白浆高清久久久久久| 色噜噜久久综合伊人一本| 青青国产在线观看| 国产91丝袜在线播放0| 夜夜爽99久久国产综合精品女不卡| 男人久久天堂| 亚洲а∨天堂久久精品9966 | 中文字幕亚洲精品乱码| 国产精品欧美日韩| 欧美精品a∨在线观看不卡| 亚洲在线观看免费| 爱情岛论坛亚洲自拍| 首页国产精品| 国产精品久久久久久超碰| 四虎精品成人免费网站| 亚洲国产精品一区二区久久恐怖片| 国产乱叫456| 欧美疯狂party性派对| 国产精品色婷婷视频| 成人精品一区二区三区免费| 色狠狠av一区二区三区| 久久精品老司机| 9色国产精品| 国内视频一区二区| segui88久久综合9999| 亚洲精品一区二区三区福利| 国产午夜福利精品| 粉嫩绯色av一区二区在线观看| 四虎4hu永久免费入口| 久久久久九九精品影院| 色综合久综合久久综合久鬼88| 99在线观看免费| 亚洲综合色自拍一区| 中文字幕一区二区三区人妻在线视频 | 91蜜桃视频在线| 中国丰满人妻videoshd| 亚洲人挤奶视频| 国产精品夫妻激情| 在线免费看黄网站| 制服丝袜亚洲色图| 欧美人与禽zozzo禽性配| 国产凹凸在线观看一区二区| 男人天堂av片| 亚洲a级精品| 国产精品户外野外| 国产婷婷视频在线| 欧美zozo另类异族| 黄色在线观看国产| 国产国语老龄妇女a片| 99国产精品久久久久久久 | fc2成人免费视频| 亚洲综合另类| 亚洲精品在线免费看| 国产免费av国片精品草莓男男 | 老司机成人影院| 少妇精69xxtheporn| 国产露脸91国语对白| 亚洲第一主播视频| 色欲狠狠躁天天躁无码中文字幕| 久久精品国产免费| 美女黄色免费看| 国产精品视频一区二区三区四蜜臂| 国产精品嫩草影院一区二区| 中文字幕在线播放网址| 日韩国产激情在线| 国产精品特级毛片一区二区三区| 亚洲在线视频网站| 男人的天堂官网 | xxxx日本免费| 国产一区二区三区久久悠悠色av| 六月婷婷在线视频| 日韩免费视频| 国产一级精品aaaaa看| 国产成人精品一区二区三区视频| 久久久久国产精品免费| 国产大片在线免费观看| 欧美mv日韩mv亚洲| 国产精品第六页| 亚洲无线码一区二区三区| 亚洲色成人网站www永久四虎| 韩日欧美一区二区三区| 久久久久久久激情| 你懂的视频一区二区| 欧美亚洲精品日韩| 亚洲一区二区三区在线免费 | 欧美一区二区中文字幕| 97精品国产福利一区二区三区| 国产青春久久久国产毛片| 成人性片免费| 欧美资源在线观看| 七七成人影院| 久久视频在线观看免费| 能在线看的av| 亚洲激情小视频| 国产999久久久| 精品视频在线视频| 亚洲视频 欧美视频| 亚洲一区日韩精品中文字幕| 亚洲色图27p| 久久久亚洲综合| 精品人妻一区二区三区日产| 国产一区二区不卡老阿姨| 黄色三级视频片| 亚洲免费影视| 免费一级特黄毛片| 欧美99久久| 制服国产精品| 久久中文字幕av一区二区不卡| 欧美一区免费视频| 婷婷综合电影| 精品免费国产| 精品三级av在线导航| 99高清视频有精品视频| 精品国产亚洲一区二区三区大结局| 国产精品美女久久久久久免费| 中文字幕乱码在线播放| 91po在线观看91精品国产性色| 黄污视频在线观看| 色综合久综合久久综合久鬼88| 人人澡人人添人人爽一区二区| 欧美成人黄色小视频| gogo在线高清视频| 久久天天躁日日躁| 91cn在线观看| 九色成人免费视频| 欧美极品少妇videossex| 欧美成人精品一区二区三区| 亚洲综合伊人久久大杳蕉| 久久影视电视剧免费网站| 高h视频在线观看| 超碰97人人做人人爱少妇| 国产成人午夜| 欧美精品久久久久久久免费观看 | 亚洲国产精品精华液网站| 久久精品国产亚洲av无码娇色| 一区二区三区波多野结衣在线观看| 国产女人被狂躁到高潮小说| 亚洲一区二区av电影| 国产精彩视频在线观看| 精品福利在线视频| 中文字幕在线观看视频免费| 欧美色精品在线视频| 国产精品国产精品国产专区| 日韩一区二区电影在线| 少妇精品高潮欲妇又嫩中文字幕| 日韩精品免费视频| 岛国在线大片| 久久精品国产91精品亚洲| 亚洲羞羞网站| 91av在线国产| 精品176极品一区| 99高清视频有精品视频| 曰本一区二区三区视频| 四虎永久国产精品| 艳女tv在线观看国产一区| 成人网站免费观看入口| 视频一区中文字幕国产| 国产无色aaa| 99久久99久久久精品齐齐| 久久久久久成人网| 亚洲六月丁香色婷婷综合久久 | 日韩视频免费观看高清完整版在线观看 | 涩涩网在线视频| 国产精品日韩在线观看| 中文字幕区一区二区三| 欧美国产一二三区| 中文字幕一区二区三区久久网站 | 在线视频cao| 国产精品直播网红| 国产一区福利| 亚洲无玛一区| av成人激情| 成年人三级黄色片| 91欧美一区二区| 免费看一级大片| 色婷婷综合久久久久中文一区二区| 91好色先生tv| 亚洲精品一区二区网址 | 国产成人久久久| 亚洲91网站| 亚洲 日韩 国产第一区| 一本不卡影院| xxxx国产视频| 国产精品色噜噜| 成人免费a视频| 日韩美女一区二区三区四区| 超碰97在线免费观看| 午夜精品久久久久久久99热| 99综合久久| 日韩电影免费观看高清完整| 黄色工厂这里只有精品| 成人综合久久网| 国产香蕉久久精品综合网| 日本五十路女优| 日韩精品在线网站| 日韩精品毛片| 国产成人在线一区二区| 欧美大奶一区二区| 成人一区二区av| 国产一区二区在线观看免费| 美国黄色特级片| 91久久一区二区| 三级视频在线播放| 午夜精品一区二区三区在线播放| 秋霞一区二区| 久久天天东北熟女毛茸茸| 另类小说欧美激情| 一级片久久久久| 一本大道av一区二区在线播放| 天天摸天天碰天天爽天天弄| 久久久久久国产精品美女| 欧美a级大片在线| 黄黄视频在线观看| 精品综合久久久久久8888| 战狼4完整免费观看在线播放版| 色综合久久中文字幕综合网| 四虎在线免费观看| 91国偷自产一区二区三区的观看方式| 北条麻妃一区二区三区在线| 国产成人亚洲综合无码| 国产精品一区二区三区四区| 极品魔鬼身材女神啪啪精品| 欧美福利一区二区| 很黄的网站在线观看| 91大片在线观看| 在线成人av| 日本黄色动态图| 黑人巨大精品欧美一区二区免费| 欧美挠脚心网站| 国产精品久久久久久久9999| 日韩在线观看电影完整版高清免费悬疑悬疑| 久久精品一区二| 中文字幕不卡一区| 国产精品欧美亚洲| 欧美成人剧情片在线观看| 一区二区三区自拍视频| 三上悠亚久久精品| 久久久影院官网| 男操女视频网站| 久久精品国亚洲| 911精品国产| 日日摸日日碰夜夜爽av| 国产网站一区二区| 国产精品久久久久久久久久久久久久久久| 蜜臀久久99精品久久久无需会员| 日韩中文字幕视频网| 北条麻妃69av| 国产精品欧美久久久久一区二区 | 国产成人免费视频网站| 久久黄色免费视频| 亚洲美女久久久| 黄页免费欧美| 欧美精品久久久久久久自慰| 久久精品免费在线观看| 亚洲一区二区色| 国精产品一区一区三区有限在线| 亚洲精品亚洲人成在线| 手机在线成人免费视频| 亚洲精品一二三| 欧美日韩国产综合视频| 国产一区二区香蕉| 99精品国产一区二区青青牛奶| 国产123在线| 欧美videos中文字幕| 成人在线网站| 人妻av无码专区| 国产日韩欧美一区二区三区综合| 国产女主播福利| 日韩免费中文字幕| 欧美成人一品| 亚洲第一视频区| 亚洲国产精品久久久久秋霞蜜臀| 欧美日韩国产网站| 日韩激情视频一区二区| 国产精品久久久久久妇女6080| 免费看黄色一级视频| 国产欧美日韩丝袜精品一区| 一二三区精品|