小書MybatisPlus第7篇-代碼生成器的原理精講及使用方法

      網(wǎng)友投稿 1088 2022-05-29

      一、代碼生成器的基礎(chǔ)實(shí)現(xiàn)原理

      相信大部分的開發(fā)者都使用過或者聽說過“模板引擎”,它可以幫我們實(shí)現(xiàn)視圖與數(shù)據(jù)的分離,快速開發(fā)視圖頁面,并將模板整合結(jié)果用于在瀏覽器顯示。其核心實(shí)現(xiàn)原理就是:HTML模板頁面 + 頁面數(shù)據(jù) = 輸出結(jié)果。頁面視圖輸出的過程就是通過模板引擎實(shí)現(xiàn)的。

      代碼生成器的實(shí)現(xiàn)原理與模板引擎實(shí)現(xiàn)頁面渲染的邏輯幾乎是一致的,除了下面的幾個(gè)區(qū)別:

      所謂模板:就是某語言的代碼 + 模板引擎語法的占位符,該占位符用來數(shù)據(jù)天換。所以代碼生成器的模板文件不再專指HTML頁面模板文件,可以是任何類型的代碼文件。

      模板引擎的輸出結(jié)果在項(xiàng)目中是輸出給瀏覽器進(jìn)行頁面渲染的,但是對(duì)于代碼生成器而言,模板引擎的輸出結(jié)果是保存到磁盤文件。

      二、如何編寫模板文件

      要編寫模板文件,首先我們要知道正常的代碼待如何書寫。比如下面的POJO代碼:

      上面的POJO代碼寫成Freemarker模板文件,就是下面的樣子:

      package ${package.Entity}; <#list table.importPackages as pkg> import ${pkg}; <#if entityLombokModel> import lombok.Data; import lombok.EqualsAndHashCode; /** *

      * ${table.comment!} *

      * * @author ${author} * @since ${date} */ <#if entityLombokModel> @Data <#if superEntityClass??> @EqualsAndHashCode(callSuper = true) <#else> @EqualsAndHashCode(callSuper = false) public class ${entity} extends Model<${entity}> { <#list table.fields as field> private ${field.propertyType} ${field.propertyName};

      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      11

      12

      13

      14

      15

      16

      17

      18

      19

      20

      21

      22

      23

      24

      25

      26

      27

      28

      29

      30

      31

      小書MybatisPlus第7篇-代碼生成器的原理精講及使用方法

      32

      三、數(shù)據(jù)從哪里來?

      有了模板文件,我們想通過模板引擎生成代碼,下面的一個(gè)問題就是數(shù)據(jù)從哪里來?有了數(shù)據(jù)我們才能生成代碼

      從配置中來,比如:package路徑等一些靜態(tài)化不經(jīng)常變化的信息,一個(gè)項(xiàng)目生成的代碼存放的包路徑通常不會(huì)經(jīng)常變化。

      從數(shù)據(jù)庫(kù)中來,比如:實(shí)體類名稱、實(shí)體類字段名稱、實(shí)體類字段類型等信息。類似于逆向工程,通過數(shù)據(jù)庫(kù)表名、字段名、字段類型等信息生成實(shí)體信息。

      3.1.以MySQL的INFORMATION_SCHEMA信息獲取為例

      我們的代碼自動(dòng)生成是針對(duì)數(shù)據(jù)庫(kù)操作,所以首先要了解數(shù)據(jù)庫(kù)表的結(jié)構(gòu)

      SELECT column_name,data_type,is_nullable,character_maximum_length,column_comment FROM INFORMATION_SCHEMA.COLUMNS WHERE table_name='kpi_task' AND table_schema='home' ORDER BY ordinal_position

      1

      2

      3

      4

      5

      如上圖SQL查詢的是home庫(kù),kpi_task表的信息,如下:

      column_name作為表的字段可以生成實(shí)體類的成員變量參數(shù)名稱(通常是駝峰標(biāo)識(shí)規(guī)則)

      data_type,is_nullable,character_maximum_length可用于生成校驗(yàn)規(guī)則。

      注釋可以用于生成column_comment

      四、Mybatis Plus代碼生成器的使用

      如果上面的代碼生成器實(shí)現(xiàn)原理你都看懂了,下面的這些配置你也就不難理解了。

      4.1.添加依賴

      添加 代碼生成器 依賴

      com.baomidou mybatis-plus-generator 3.3.2

      1

      2

      3

      4

      5

      添加 模板引擎 依賴,MyBatis-Plus 支持 Velocity(默認(rèn))、Freemarker、Beetl,用戶可以選擇自己熟悉的模板引擎。

      Velocity(默認(rèn)):

      org.apache.velocity velocity-engine-core 2.2

      1

      2

      3

      4

      5

      Freemarker:

      org.freemarker freemarker 2.3.30

      1

      2

      3

      4

      5

      Beetl:

      com.ibeetl beetl 3.1.8.RELEASE

      1

      2

      3

      4

      5

      注意!如果您選擇了非默認(rèn)引擎,需要在 AutoGenerator 中 設(shè)置模板引擎。

      AutoGenerator generator = new AutoGenerator(); // set freemarker engine generator.setTemplateEngine(new FreemarkerTemplateEngine()); // set beetl engine generator.setTemplateEngine(new BeetlTemplateEngine()); // set custom engine (reference class is your custom engine class) generator.setTemplateEngine(new CustomTemplateEngine()); // other config ...

      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      11

      12

      13

      4.2.代碼生成配置

      AutoGenerator 是 MyBatis-Plus 的代碼生成器,通過 AutoGenerator 可以快速生成 Entity、Mapper、Mapper XML、Service、Controller 等各個(gè)模塊的代碼,極大的提升了開發(fā)效率。

      執(zhí)行下面的這個(gè)測(cè)試用例,Mybatis Plus就可以幫助我們實(shí)現(xiàn)以上各層的代碼生成到對(duì)應(yīng)的package路徑下面

      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      11

      12

      13

      14

      15

      16

      17

      18

      19

      20

      21

      22

      23

      24

      25

      26

      27

      28

      29

      30

      31

      32

      33

      34

      35

      36

      37

      38

      39

      40

      41

      42

      43

      44

      45

      46

      47

      48

      49

      50

      51

      52

      53

      54

      55

      Spring 數(shù)據(jù)庫(kù)

      版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請(qǐng)聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。

      上一篇:協(xié)同OA系統(tǒng)業(yè)務(wù)接待管理解決方案
      下一篇:推薦算法崗位要求(非內(nèi)推非廣告)
      相關(guān)文章
      亚洲色图黄色小说| 国产亚洲精品不卡在线| 亚洲国产一成久久精品国产成人综合 | 亚洲国产精品lv| 亚洲一区无码精品色| 国产精品亚洲一区二区三区| 亚洲色在线无码国产精品不卡| 亚洲日产2021三区在线 | 91亚洲国产在人线播放午夜| 亚洲国产成人精品无码区在线观看| 久久久久国产亚洲AV麻豆| 国产亚洲视频在线| 亚洲heyzo专区无码综合| 在线a亚洲老鸭窝天堂av高清| 亚洲午夜在线一区| 亚洲成a人不卡在线观看| 亚洲高清中文字幕综合网| 亚洲电影国产一区| 久久亚洲国产精品| 亚洲成亚洲乱码一二三四区软件| 亚洲乳大丰满中文字幕| 亚洲综合伊人久久综合| 在线a亚洲v天堂网2019无码| 自拍偷自拍亚洲精品被多人伦好爽| 亚洲五月午夜免费在线视频| 亚洲人成人网站在线观看| 亚洲精品网站在线观看不卡无广告 | 国产亚洲精aa在线看| 456亚洲人成在线播放网站| 亚洲人xxx日本人18| 亚洲伦理中文字幕| 亚洲精品一卡2卡3卡四卡乱码| 中文字幕乱码亚洲精品一区| 亚洲人成电影网站免费| 亚洲国产成人久久精品软件| 亚洲AV日韩AV一区二区三曲| 国产成人亚洲综合在线| 亚洲午夜成人精品电影在线观看| 国产亚洲精品a在线观看| 久久亚洲精品中文字幕三区| 五月天网站亚洲小说|