小書MybatisPlus第7篇-代碼生成器的原理精講及使用方法
一、代碼生成器的基礎(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}; #list> <#if entityLombokModel> import lombok.Data; import lombok.EqualsAndHashCode; #if> /** *
* ${table.comment!} *
* * @author ${author} * @since ${date} */ <#if entityLombokModel> @Data <#if superEntityClass??> @EqualsAndHashCode(callSuper = true) <#else> @EqualsAndHashCode(callSuper = false) #if> #if> public class ${entity} extends Model<${entity}> { <#list table.fields as field> private ${field.propertyType} ${field.propertyName}; #list>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
三、數(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.添加依賴
添加 代碼生成器 依賴
1
2
3
4
5
添加 模板引擎 依賴,MyBatis-Plus 支持 Velocity(默認(rèn))、Freemarker、Beetl,用戶可以選擇自己熟悉的模板引擎。
Velocity(默認(rèn)):
1
2
3
4
5
Freemarker:
1
2
3
4
5
Beetl:
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)容。