從壹開始先後端分離 42 ║支持多種數據庫 & 快速數據庫生成

緣起

 哈嘍你們週三好,休息了一段時間,打算準備找工做了🙃,wuli親故有幫忙內推麼,因此平時的更新學習就停滯了,不過羣裏的問題,我仍是儘可能一直在回答的。。。html

今天的內容很簡單,不是一個技術文章,僅僅是一個項目更新文檔,給正在使用這個框架的小夥伴一個時間線,否則的話下次再 pull code 的時候,一看,又是更新一片,並且也不知道更新了啥。若是你是鐵粉讀者的話(至少讀完第一個系列吧),確定知道我以前是寫過《38 ║自動初始化數據庫》了,這篇文章也是關於如何經過項目,自動生成數據庫的,那你確定疑惑了,爲啥還要寫?這裏有幾個契機:mysql

一、準備面試,HR打電話,很神奇的是,幾乎每一個人都問了是否會 MySql 或者 Oracle ?git

二、平均每週都有不少小夥伴問:這個後端項目的數據庫數據在哪?執行報錯?github

三、羣裏使用MySql的愈來愈多了,也是一直問我:你這個後端項目是否匹配 MySql ?面試

四、SqlServer 在跨平臺上真的難 ! sql

五、本想找夥伴幫我一塊兒維護項目,可憐沒人😂數據庫

六、每次修改數據庫,都須要生成sql腳本文件,麻煩!之後sql腳本不維護了,走下文的流程。json

 欸~聰明的你看到這幾個問題,確定就知道爲啥要寫這個,沒錯,就像是文章標題那樣,想項目同時支持多個數據庫,而且可配置的生成對應數據庫,只需一鍵,就可快速切換任何數據庫。後端

我這周簡單學了學 MySql ,雖然大學的時候本身玩兒過,可是很久沒有用了,幾乎都忘了,趁着此次好好研究研究 MySql ,玩兒了兩天,而後整合了下項目,也完美的支持了 MySql !你能夠在配置文件中,一鍵操做,就能夠隨心的切換本身喜歡的數據庫,之後還會融入其餘數據庫(好比Oracle啥的)、主從分離等數據庫技術,挖個坑之後再看。固然這裏也重點誇凱旋兄,SqlSugarCore 多數據庫支持完美。緩存

 

好啦,內容很簡單,就很少鋪墊了,開門見山,主要說說哪裏作了更新,以及第一次用我框架的小夥伴,如何操做。

 

1、初次見面,如何玩轉項目?

有不少小夥伴,第一次使用,剛剛下載的時候,就被 數據庫 和 Reids 搞得心煩意亂,我這裏就重點說一下吧,之後這個能夠做爲 Blog.Core 項目的使用手冊。

目前項目已經支持 Sqlserver、MySql、Oracle、Sqlite四種數據庫,項目默認啓動是Sqlite,你們什麼都不用操做,只須要直接運行,就能看到效果,只須要開啓閥門便可:

打開這兩個,就能夠直接使用數據了,不須要配置任何數據庫環境!

  

若是你用其餘的數據庫也同理,這裏以 Mysql 舉例來講(更新:目前最新代碼 sugar5.0 已經支持本身建立數據庫了,無需手動建立空數據庫):

 

 

 

一、配置數據庫鏈接字符串

注意若是使用 Mysql記得引用 MySql.Data.dll 包。

感謝 @ 守墓老人 提建議

這裏不須要安裝mysql.data.dll,只須要安裝sqlsugarcore一個nuget包就行。

關於數據庫鏈接字符串,這裏有個小夥伴總結的挺好的《各類數據庫的鏈接字符串》,我打算之後也學學 SQLite 、Oracle 、PostgreSQL 啥的,權當練練手了。

這個很簡單,我在 Blog.Core ->  appsettings.json 文件中,新增了兩個節點:

    "SqlServer": {
      "Enabled": false,//這個是開啓對應數據庫的閥門,都開啓的話,優先級越靠上越高。 "SqlServerConnection": "Server=.;Database=WMBlogDB;User ID=sa;Password=123;",//配置鏈接字符串,能夠參考上邊的文章中查找 "ProviderName": "System.Data.SqlClient" //暫時無用
    },
    "MySql": {
      "Enabled": true,
      "MySqlConnection": "Server=localhost; Port=3306;Stmt=; Database=wmblogdb; Uid=root; Pwd=456;"
    },

 

多個數據庫目前是互斥的,也就是優先採用最上邊開啓閥門的數據庫,若是你想開啓其餘數據庫,好比 Sqlite ,Oracle ,能夠順着開啓節點就行,目前 SqlSugar 支持這些數據庫,我儘可能都加上:

  public enum DataBaseType
  {
      MySql = 0,
      SqlServer = 1,
      Sqlite = 2,
      Oracle = 3,
      PostgreSQL = 4
  }

 

 

二、啓動種子生成閥門 

 配置好鏈接字符串後,剩下的就是很簡單了,直接在下邊的 SeedDBEnabled 啓動 true 便可,以前是須要在代碼 program.cs 中手動註釋或取消註釋,來實現的,如今移植到了配置文件裏:

 

program.cs :

 

 

由於SqlSugar 不像 EFCore 那樣有遷移,因此 Sqlsugar 不能本身建立數據庫,因此咱們須要手動建立一個空的數據庫,這個很重要不要忘記。

SqlSugar 5.x 版本已經能夠支持自動建立數據庫了,因此若是你是 5.x+ 版本,能夠不用手動建立數據庫,反之須要手動建立空的數據庫。

這個時候你只須要運行項目便可,當前若是有問題,你須要清理解決方案,再執行。由於我用的是在線數據,可能數據比較慢,稍微等待。

 

三、對了,還有那個 Redis 配置

可能第一次使用,有的小夥伴不知道如何開啓 Redis ,請參考個人文章 :《什麼是Redis,爲何使用它》 ,並且要注意端口號我改爲了 6319 ,不是默認的6379,具體的鏈接字符串,你依然能夠在 appsettings.json 文件中配置:

 

四、最後還有 AOP 服務相關閥門

項目中寫了三處 AOP 相關服務,分別是 日誌AOP,內存緩存AOP,Redis緩存AOP,若是你想開啓對應的服務,只須要在配置文件中開啓便可,這三個能夠相互疊加的,不是互斥的:

 

 若是你想了解 AOP  以及他所應用的地方,請查看個人這篇文章:《完美基於AOP的接口性能分析

如今已經很輕鬆的收集到項目中用到的全部日誌了,包括,操做日誌+異常日誌+Sql日誌:

 

 

 

 

五、在Swagger中展現 Sql 執行日誌 

操做很簡單,功能頗有效,動圖以下,快速查看在線Demo:http://123.206.33.109:8081

 

固然這個 swagger 裏不只有SQL日誌,還有異常日誌,更多功能,等待你的開發:

 

 

2、總體 Seed 開發流程是怎樣的?

一、配置數據庫初始化參數

爲了更好的實現項目的自動化和高效性,一個框架就要儘可能的減小用戶的操做步驟,甚至不能修改代碼,只須要配置文件就能達到相應的要求,因此我就想着把項目中須要配置的地方,都移植到 appsettings.json 文件裏,目前也差很少實現了這個目標,那既然有配置,就必定要有初始化的地方,否則項目如何啓動呢?沒錯,就拿數據庫參數初始化舉例:

在 Blog.Core.Common -> DB -> BaseDBConfig.cs 中,我這裏對數據庫相關的參數都作了初始化,之後項目中使用的都從這裏獲取,固然你也能夠注入到服務裏,全局單例使用:

 public static string ConnectionString => InitConn();
 public static DataBaseType DbType = DataBaseType.SqlServer;

具體的思路能夠參考源碼。 

 

二、導出數據到 JSON 

 有了配置文件和初始化,剩下的就是數據了,這一塊我考慮了好久,有如下幾個思路:

一、我開發一個 dll 文件(其實就是一個類庫),而後裏邊有全部須要的數據,引用這個nuget,就能夠直接使用,是一個List 泛型數據;//太複雜

二、手動寫死到項目文件裏;//代碼太長,幾千行

三、生成json文件,放到項目裏;//直接增大項目大小

四、生成json文件,放到 GitHub 上,直接訪問鏈接的形式;

若是你也有須要這一塊的話,也能夠嘗試嘗試,我考慮了考慮,最終採用第四種方法:

我寫了一個 exe 小工具,自動將個人數據庫數據,生成對應表的 JSON 文件,而後提交到 Github :

這樣我也好維護,也有指定的版本數據,若是你感受這一版本的數據很差,能夠回退到上一版本的,是否是很貼心😂,主要仍是數據完整性。

 

三、在線 Data 導入數據庫

 這個就是重頭戲了,將 json 數據獲取到,併發序列化生成 List,最後導入數據庫對應表,爲了代碼的簡潔性,我封裝了幾個 Helper ,感興趣的能夠去 Blog.Core.Common 查看,最後只有這一句便可:

 if (!await myContext.Db.Queryable<BlogArticle>().AnyAsync())
       myContext.GetEntityDB<BlogArticle>().InsertRange(JsonHelper.ParseFormByJson<List<BlogArticle>>(GetNetData.Get(string.Format(GitJsonFileFormat,"BlogArticle"))));
              

這樣就把所有的數據導入到數據庫了,很全的,並且你還能夠指定 GitHub 數據版本。

 

好啦,本文就暫時到這裏吧,之後確定還會增長的,主要目的就是幫助新使用的小夥伴,提供新手指南,不知道還會有哪些問題。

未完待續

 

今天是我入園八個月記念日啦,時間真快!感謝各位小夥伴,謝謝!

( 吉祥金幣,你申請了麼?)

 

 

 

3、Github & Gitee

 

https://github.com/anjoy8/Blog.Core

https://gitee.com/laozhangIsPhi/Blog.Core

 

------ ♥ ------

相關文章
相關標籤/搜索