日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

[NewLife.XCode]反向工程(自动建表建库大杀器)

發(fā)布時間:2023/12/4 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [NewLife.XCode]反向工程(自动建表建库大杀器) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

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)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。