中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

代碼生成器原理是什么

發布時間:2021-10-21 11:16:24 來源:億速云 閱讀:232 作者:iii 欄目:編程語言

這篇文章主要講解了“代碼生成器原理是什么”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“代碼生成器原理是什么”吧!

代碼生成器原理很簡單,用一句話概括就是:將數據庫字段轉換成Java字段并輸出內容。

如下圖所示:

代碼生成器原理是什么

因此,首先需要做的是獲取表信息以及表的字段信息,一般有兩種方式,第一種:連接到數據庫,執行相關SQL,查詢出表結構信息。第二種:解析DDL,得到相關信息,code-gen采用第一種做法。

  • 獲取表信息

包括表名稱,表備注,Mysql可以使用下面這個SQL。(code-gen源碼對應:com.gitee.gen.gen.mysql.MySqlTableSelector)

SHOW TABLE STATUS FROM table_name

如果需要指定某張表,直接加where條件即可

SHOW TABLE STATUS FROM table_name where name = 'user_info';

查詢后結果如下:

NameEngineVersionRow_formatRowsAvg_row_lengthData_lengthMax_data_lengthIndex_lengthData_freeAuto_incrementCreate_timeUpdate_timeCheck_timeCollationChecksumCreate_optionsComment
"user_info""InnoDB""10""Dynamic""0""0""16384""0""0""0""1""2020-12-22 15:16:40"

"utf8_general_ci"

"用戶信息表"
  • 獲取表字段信息

Mysql可以用如下SQL(code-gen對應源碼:com.gitee.gen.gen.mysql.MySqlColumnSelector):

SHOW FULL COLUMNS FROM  user_info;

查詢后結果如下:

FieldTypeCollationNullKeyDefaultExtraPrivilegesComment
"id""int(11)"
"NO""PRI"
"auto_increment""select,insert,update,references""自增主鍵"
"name""int(11)"
"NO"


"select,insert,update,references""姓名"
"create_time""timestamp"
"NO"
"CURRENT_TIMESTAMP"
"select,insert,update,references""添加時間"

從表格中,可以獲取字段名稱、類型、備注、是否主鍵、是否自增

查詢出數據庫的基本信息后,把這信息放到對象中,方便后續處理。

/**
 * 數據庫表定義,從這里可以獲取表名,字段信息
 */
public class TableDefinition {

    /**
     * 表名
     */
    private String tableName;

    /**
     * 表注釋
     */
    private String comment;

    /**
     * 字段
     */
    private List<ColumnDefinition> columnDefinitions

    ... 省略 getter  setter

}

其中TableDefinition類存放表信息,ColumnDefinition類存放字段信息

接下來是將TableDefinition對象中的變量綁定到Velocity模板當中去。

VelocityContext context = new VelocityContext();

TableDefinition tableDefinition = ...

context.put("table", tableDefinition);
context.put("columns", tableDefinition.getColumnDefinitions());


return VelocityUtil.generate(context, template);

VelocityContext存放Velocity變量,在對象中放入兩個變量table、columns,template是模板內容

然后再模板中就可以使用對應的變量了,對應的模板可以這么寫:

/**
 * ${table.comment}
 */
public class ${context.javaBeanName} {

// Java字段信息
#foreach($column in $columns)
	/** ${column.comment} */
	private ${column.javaTypeBox} ${column.javaFieldName};
#end

// getter,setter部分
#foreach(${column} in ${columns})
	public void set${column.javaFieldNameUF}(${column.javaTypeBox} ${column.javaFieldName}) {
		this.${column.javaFieldName} = ${column.javaFieldName};
	}
	
	public ${column.javaTypeBox} get${column.javaFieldNameUF}() {
		return this.${column.javaFieldName};
	}
	
#end

}

得到生成結果后,把內容返回到前端頁面。

處理多種數據庫

如何處理多種數據庫,這里的關鍵點是要獲取數據庫的表結構以及字段信息,每種數據庫的獲取SQL是不一樣的,因此需要把獲取表信息和獲取字段信息抽象出來,然后讓實際的數據庫取實現抽象部分即可。

code-gen對應抽象類:

  • com.gitee.gen.gen.TableSelector 抽象類,用來獲取表信息 子類:

    • com.gitee.gen.gen.mysql.MySqlTableSelector

    • com.gitee.gen.gen.oracle.OracleTableSelector

    • com.gitee.gen.gen.postgresql.PostgreSqlTableSelector

    • com.gitee.gen.gen.sqlserver.SqlServerTableSelector

  • com.gitee.gen.gen.ColumnSelector 抽象類,用來獲取表字段信息 子類:

    • com.gitee.gen.gen.mysql.MySqlColumnSelector

    • com.gitee.gen.gen.oracle.OracleColumnSelector

    • com.gitee.gen.gen.postgresql.PostgreSqlColumnSelector

    • com.gitee.gen.gen.sqlserver.SqlServerColumnSelector

感謝各位的閱讀,以上就是“代碼生成器原理是什么”的內容了,經過本文的學習后,相信大家對代碼生成器原理是什么這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

林芝县| 青冈县| 博爱县| 潞城市| 曲靖市| 南华县| 循化| 潜江市| 哈密市| 泽普县| 武夷山市| 霍林郭勒市| 高陵县| 兴山县| 柏乡县| 洛南县| 珲春市| 阿拉尔市| 化州市| 绩溪县| 峨山| 九台市| 来宾市| 类乌齐县| 临夏市| 南开区| 闵行区| 南投县| 临漳县| 溧水县| 黑水县| 城固县| 简阳市| 麻城市| 孝义市| 高碑店市| 东阳市| 仙居县| 任丘市| 永德县| 朝阳市|