[NewLife.XCode]反向工程(自动建表建库大杀器)
NewLife.XCode是一個有10多年歷史的開源數(shù)據(jù)中間件,支持nfx/netstandard,由新生命團隊(2002~2019)開發(fā)完成并維護至今,以下簡稱XCode。
整個系列教程會大量結(jié)合示例代碼和運行日志來進行深入分析,蘊含多年開發(fā)經(jīng)驗于其中,代表作有百億級大數(shù)據(jù)實時計算項目。
開源地址:https://github.com/NewLifeX/X?(求star, 656+)
?
回到目錄
大殺器
反向工程是XCode的大殺器,區(qū)別于其它ORM的最強功能!
通俗理解:基于XCode開發(fā)的應(yīng)用,無需數(shù)據(jù)庫安裝腳本,連接字符串指向哪一臺哪一種數(shù)據(jù)庫,系統(tǒng)就自動在上面建庫建表!
正式定義:基于實體類的表結(jié)構(gòu)信息,在連接字符串指定的目標(biāo)數(shù)據(jù)庫上自動執(zhí)行建庫建表、添刪改字段、創(chuàng)建索引等操作,支持各種數(shù)據(jù)庫!
應(yīng)用系統(tǒng)首次啟動完成的時候,也是自動建表建庫并初始化完成的時候。
反向工程是XCode數(shù)萬級分表的主要倚仗!
?
創(chuàng)建控制臺項目,從Nuget引用NewLife.XCode
創(chuàng)建實體類,模型如下(可參考前面幾章來生成實體類):
?測試代碼:
?執(zhí)行日志:
自始至終,我們沒有編寫SQL腳本,沒有去數(shù)據(jù)庫創(chuàng)建數(shù)據(jù)表。
代碼寫完就跑起來,測試通過就部署到正式庫。
從日志來看,程序自動下載SQLite驅(qū)動,因為我們并沒有指定實體類使用哪一種數(shù)據(jù)庫,XCode自動給我們配置了SQLite。(上一章連接字符串部分有講解)
?
加一行代碼把數(shù)據(jù)庫指向MySql:
?執(zhí)行日志:
同樣的首先下載MySql驅(qū)動,(當(dāng)然也可以自己通過nuget引用)。
首次連接數(shù)據(jù)庫時,庫名指定School報錯,因為根本就不存在這個庫。
因此,XCode切換到系統(tǒng)庫,開始創(chuàng)建數(shù)據(jù)庫School,并創(chuàng)建數(shù)據(jù)表和索引。這里完全是MySql語法,不同于上面的SQLite建表語句。
?
感興趣的同學(xué),還可以試試Oracle和SqlServer等數(shù)據(jù)庫。
?
回到目錄
正向工程
正向工程就是從數(shù)據(jù)庫讀取表結(jié)構(gòu)信息,生成模型信息。
我們來試試寫幾行代碼讀取上面創(chuàng)建的數(shù)據(jù)表:
執(zhí)行日志:
從上面可以看到,讀取dal.Tables得到了這個連接的所有表結(jié)構(gòu)信息,輸出為Xml時,跟前面用來創(chuàng)建實體類的模型文件極為相似。
其實這就是一個模型文件,只是為了生成實體類的模型文件多增加了幾個屬性而已。
新生命碼神工具XCoder,(https://github.com/NewLifeX/XCoder),其中的數(shù)據(jù)建模工具,可以導(dǎo)出各種數(shù)據(jù)庫的表結(jié)構(gòu)信息,正是基于dal.Tables來實現(xiàn)。
?
正向工程由3個基本接口構(gòu)成:
IDataTable。數(shù)據(jù)表接口,dal.Tables就是IDataTable集合,包括名稱、描述等
IDataColumn。數(shù)據(jù)列接口,每張數(shù)據(jù)表有多個數(shù)據(jù)列,包括名稱、類型、長度、描述等
IDataIndex。數(shù)據(jù)索引接口,每張數(shù)據(jù)表沒有或者有多個索引,索引指定包括哪些字段 ,是否唯一
?
回到目錄
反向工程
有了IDataTable,我們就可以主動控制數(shù)據(jù)表結(jié)構(gòu)。
DAL.SetTables(IDataTable[] tables);
這是反向工程高級用法,實際日常工作中用不到,各個實體類加載時,將會逐個連接進行反向工程檢查,正是調(diào)用該方法。
?
給上面的數(shù)據(jù)模型,增加一個字段Code和對應(yīng)索引:
跑起來:
程序自動為我們添加了字段,以及創(chuàng)建了索引!
前面的幾個SHOW,就是XCode的正向工程,取得數(shù)據(jù)庫表結(jié)構(gòu),然后跟實體類結(jié)構(gòu)對比,不相同時執(zhí)行反向操作。
?
回到目錄
反向工程設(shè)置
大家還記得上一章系統(tǒng)設(shè)置中提到的Migration嗎?
XCode.config和連接字符串中都支持這個設(shè)置。
可用設(shè)置項如下:
Off 關(guān)閉,不執(zhí)行反向工程
ReadOnly?只讀不執(zhí)行,異步執(zhí)行反向工程檢查,對比后生成變更DDL寫入日志
On?打開,僅新建,默認(rèn)設(shè)置。新建表、增加字段、創(chuàng)建索引等可以執(zhí)行,禁止修改字段長度類型,禁止刪除字段,以免造成數(shù)據(jù)丟失
Full?完全,修改刪除。除了新建表、增加字段、創(chuàng)建索引外,還可以修改字段長度類型、刪除字段等,極其危險,慎用
反向工程設(shè)計于2008年,10多年經(jīng)驗表明,默認(rèn)On最合理,不僅滿足開發(fā)需要,(隨時加字段),還避免了字段改變而導(dǎo)致的數(shù)據(jù)丟失風(fēng)險;
?
反向工程如此神奇的功能,你想到了什么高端用法嗎?我們將在數(shù)萬級分表分庫章節(jié)等你!
?
回到目錄
系列教程
NewLife.XCode教程系列[2019版]
增刪改查入門。快速展現(xiàn)用法,代碼配置連接字符串
數(shù)據(jù)模型文件。建立表格字段和索引,名字以及數(shù)據(jù)類型規(guī)范,推薦字段(時間,用戶,IP)
實體類詳解。數(shù)據(jù)類業(yè)務(wù)類,泛型基類,接口
功能設(shè)置。連接字符串,調(diào)試開關(guān),SQL日志,慢日志,參數(shù)化,執(zhí)行超時。代碼與配置文件設(shè)置,連接字符串局部設(shè)置
反向工程。自動建立數(shù)據(jù)庫數(shù)據(jù)表
數(shù)據(jù)初始化。InitData寫入初始化數(shù)據(jù)
高級增刪改。重載攔截,自增字段,Valid驗證,實體模型(時間,用戶,IP)
臟數(shù)據(jù)。如何產(chǎn)生,怎么利用
增量累加。高并發(fā)統(tǒng)計
事務(wù)處理。單表和多表,不同連接,多種寫法
擴展屬性。多表關(guān)聯(lián),Map映射
高級查詢。復(fù)雜條件,分頁,自定義擴展FieldItem,查總記錄數(shù),查匯總統(tǒng)計
數(shù)據(jù)層緩存。Sql緩存,更新機制
實體緩存。全表整理緩存,更新機制
對象緩存。字典緩存,適用用戶等數(shù)據(jù)較多場景。
百億級性能。字段精煉,索引完備,合理查詢,充分利用緩存
實體工廠。元數(shù)據(jù),通用處理程序
角色權(quán)限。Membership
導(dǎo)入導(dǎo)出。Xml,Json,二進制,網(wǎng)絡(luò)或文件
分表分庫。常見拆分邏輯
高級統(tǒng)計。聚合統(tǒng)計,分組統(tǒng)計
批量寫入。批量插入,批量Upsert,異步保存
實體隊列。寫入級緩存,提升性能。
備份同步。備份數(shù)據(jù),恢復(fù)數(shù)據(jù),同步數(shù)據(jù)
數(shù)據(jù)服務(wù)。提供RPC接口服務(wù),遠程執(zhí)行查詢,例如SQLite網(wǎng)絡(luò)版
大數(shù)據(jù)分析。ETL抽取,調(diào)度計算處理,結(jié)果持久化
?
總結(jié)
以上是生活随笔為你收集整理的[NewLife.XCode]反向工程(自动建表建库大杀器)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [NewLife.XCode]数据初始化
- 下一篇: Wexflow:C#中的开源工作流引擎