哈嘍你們週三好,休息了一段時間,打算準備找工做了🙃,wuli親故有幫忙內推麼,因此平時的更新學習就停滯了,不過羣裏的問題,我仍是儘可能一直在回答的。。。html
今天的內容很簡單,不是一個技術文章,僅僅是一個項目更新文檔,給正在使用這個框架的小夥伴一個時間線,否則的話下次再 pull code 的時候,一看,又是更新一片,並且也不知道更新了啥。若是你是鐵粉讀者的話(至少讀完第一個系列吧),確定知道我以前是寫過《38 ║自動初始化數據庫》了,這篇文章也是關於如何經過項目,自動生成數據庫的,那你確定疑惑了,爲啥還要寫?這裏有幾個契機:mysql
一、準備面試,HR打電話,很神奇的是,幾乎每一個人都問了是否會 MySql 或者 Oracle ?git
二、平均每週都有不少小夥伴問:這個後端項目的數據庫數據在哪?執行報錯?github
三、羣裏使用MySql的愈來愈多了,也是一直問我:你這個後端項目是否匹配 MySql ?面試
四、SqlServer 在跨平臺上真的難 ! sql
五、本想找夥伴幫我一塊兒維護項目,可憐沒人😂數據庫
六、每次修改數據庫,都須要生成sql腳本文件,麻煩!之後sql腳本不維護了,走下文的流程。json
欸~聰明的你看到這幾個問題,確定就知道爲啥要寫這個,沒錯,就像是文章標題那樣,想項目同時支持多個數據庫,而且可配置的生成對應數據庫,只需一鍵,就可快速切換任何數據庫。後端
我這周簡單學了學 MySql ,雖然大學的時候本身玩兒過,可是很久沒有用了,幾乎都忘了,趁着此次好好研究研究 MySql ,玩兒了兩天,而後整合了下項目,也完美的支持了 MySql !你能夠在配置文件中,一鍵操做,就能夠隨心的切換本身喜歡的數據庫,之後還會融入其餘數據庫(好比Oracle啥的)、主從分離等數據庫技術,挖個坑之後再看。固然這裏也重點誇凱旋兄,SqlSugarCore 多數據庫支持完美。緩存
好啦,內容很簡單,就很少鋪墊了,開門見山,主要說說哪裏作了更新,以及第一次用我框架的小夥伴,如何操做。
有不少小夥伴,第一次使用,剛剛下載的時候,就被 數據庫 和 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,爲何使用它》 ,並且要注意端口號我改爲了 6319 ,不是默認的6379,具體的鏈接字符串,你依然能夠在 appsettings.json 文件中配置:
項目中寫了三處 AOP 相關服務,分別是 日誌AOP,內存緩存AOP,Redis緩存AOP,若是你想開啓對應的服務,只須要在配置文件中開啓便可,這三個能夠相互疊加的,不是互斥的:
若是你想了解 AOP 以及他所應用的地方,請查看個人這篇文章:《完美基於AOP的接口性能分析》
如今已經很輕鬆的收集到項目中用到的全部日誌了,包括,操做日誌+異常日誌+Sql日誌:
操做很簡單,功能頗有效,動圖以下,快速查看在線Demo:http://123.206.33.109:8081:
固然這個 swagger 裏不只有SQL日誌,還有異常日誌,更多功能,等待你的開發:
爲了更好的實現項目的自動化和高效性,一個框架就要儘可能的減小用戶的操做步驟,甚至不能修改代碼,只須要配置文件就能達到相應的要求,因此我就想着把項目中須要配置的地方,都移植到 appsettings.json 文件裏,目前也差很少實現了這個目標,那既然有配置,就必定要有初始化的地方,否則項目如何啓動呢?沒錯,就拿數據庫參數初始化舉例:
在 Blog.Core.Common -> DB -> BaseDBConfig.cs 中,我這裏對數據庫相關的參數都作了初始化,之後項目中使用的都從這裏獲取,固然你也能夠注入到服務裏,全局單例使用:
public static string ConnectionString => InitConn(); public static DataBaseType DbType = DataBaseType.SqlServer;
具體的思路能夠參考源碼。
有了配置文件和初始化,剩下的就是數據了,這一塊我考慮了好久,有如下幾個思路:
一、我開發一個 dll 文件(其實就是一個類庫),而後裏邊有全部須要的數據,引用這個nuget,就能夠直接使用,是一個List 泛型數據;//太複雜
二、手動寫死到項目文件裏;//代碼太長,幾千行
三、生成json文件,放到項目裏;//直接增大項目大小
四、生成json文件,放到 GitHub 上,直接訪問鏈接的形式;
若是你也有須要這一塊的話,也能夠嘗試嘗試,我考慮了考慮,最終採用第四種方法:
我寫了一個 exe 小工具,自動將個人數據庫數據,生成對應表的 JSON 文件,而後提交到 Github :
這樣我也好維護,也有指定的版本數據,若是你感受這一版本的數據很差,能夠回退到上一版本的,是否是很貼心😂,主要仍是數據完整性。
這個就是重頭戲了,將 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 數據版本。
好啦,本文就暫時到這裏吧,之後確定還會增長的,主要目的就是幫助新使用的小夥伴,提供新手指南,不知道還會有哪些問題。
未完待續
今天是我入園八個月記念日啦,時間真快!感謝各位小夥伴,謝謝!
( 吉祥金幣,你申請了麼?)
https://github.com/anjoy8/Blog.Core
https://gitee.com/laozhangIsPhi/Blog.Core
------ ♥ ------