LiteSql 一款輕量級ORM

来源:https://www.cnblogs.com/s0611163/archive/2022/08/05/16553601.html
-Advertisement-
Play Games

之前寫的DBHelper,名稱確實太Low,就改了個名,叫LiteSql,本來想叫SqlShuttle(SQL一把梭),奈何單詞太長。 有兩個版本,一個是LiteSql,一個是Dapper.LiteSql,LiteSql底層用的是ADO.NET,Dapper.LiteSql底層用的是Dapper,提 ...


之前寫的DBHelper,名稱確實太Low,就改了個名,叫LiteSql,本來想叫SqlShuttle(SQL一把梭),奈何單詞太長。

有兩個版本,一個是LiteSql,一個是Dapper.LiteSql,LiteSql底層用的是ADO.NET,Dapper.LiteSql底層用的是Dapper,提供的介面和功能是一樣的。

Dapper.LiteSql算是Dapper擴展。

簡介

一款使用原生SQL查詢的輕量級ORM,支持Oracle、MSSQL、MySQL、PostgreSQL、SQLite、Access資料庫。

代碼來源

代碼來源於需求,我整個職業生涯待過的公司,要麼用NHibernate要麼用DBHelper,NHibernate我很討厭,所以就折騰DBHelper了。原始版本的四個主流資料庫的DBHelper,都是經歷過實際項目的,不過現在除了自己寫程式或小項目,我自己沒有機會用了,沒有需求就沒有新功能,最近也只加了個手動分表的支持。

文檔

https://gitee.com/s0611163/LiteSql/blob/main/README.md
https://gitee.com/s0611163/Dapper.LiteSql/blob/main/README.md

NuGet

https://www.nuget.org/packages/LiteSql
https://www.nuget.org/packages/Dapper.LiteSql

為什麼用LiteSql

並非推薦大家用,但我相信會有人需要的,所以有必要寫這個博客自薦一下。

EF和EFCore雖然我寫過Demo,但我只能說我不瞭解。FreeSql和SqlSugar是語法糖的代表,功能很多很強大,語法糖最重要的是要儘量符合使用習慣,使大家儘量不看文檔,就能猜出來怎麼用,在這方面FreeSql和SqlSugar很難超越,所以沒必要重覆造輪子,除非有人覺得可以超越。SmartSQL類似Java的MyBatis。Dos.ORM我也看了一下,好像跟上述兩款同一類型。

Dapper不帶擴展肯定不好用,要是100多個欄位的表能寫死人。Dapper.Contrib遇到資料庫欄位名和屬性名不一致的情況還得自己想辦法,DapperExtensions要寫Mapping,那就是在用了擴展的情況下,自己再寫個小擴展。有人寫Demo就不考慮100多個欄位的情況,我知道你可能有自動生成的工具,你不說,就是沒有。

後續的話,對標FreeSql、SqlSugar那是不可能了,理念不同。能成為DBHelper的終級版或者Dapper擴展的終極版就很好了,這是需要首先進行科學論證的,我想EFCore肯定是經過科學論證的,這裡的科學家是指微軟的頂級大牛們。你說Dapper.Contrib有15M的下載量,怎麼就不解決一下欄位名和屬性名不一致的情況,是什麼理念導致的?DapperExtensions要寫Mapping,減少對實體類的侵入性,肯定是一種理念,但100個欄位我該怎麼寫,用什麼方案?

對於這個ORM,現在的問題是,我沒有用C#寫增刪改查的機會了,所以我不知道有什麼需要改進的地方,空想是想不出來的。我是希望有人共同維護,但一定要有理念和邊界,不是什麼功能都可以加,不然的話為什麼Dapper功能那麼少?

怎麼用?

怎麼用請看文檔。這裡我只說一點。
在我上家公司用OracleHelper或SqlServerHelper的時候,查詢、分頁查詢是一種固定寫法,適應性廣,我覺得很好,代碼結構非常清晰,很容易看懂和維護。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 前言 最近複習操作系統,看到了lru演算法,就去網上搜索下,因此發現了GeeCache,順手寫了一遍。研究下lru演算法的實現。 正文: lru使用map+鏈表實現。map裡面存儲了key以及其對應的鏈表節點。當我們根據某個key訪問緩存值的時候,可以經過map快速定位到該鏈表節點。從而獲取值 下麵我們 ...
  • 什麼是商城系統?商城系統又稱線上商城系統,是一個功能完善的線上購物系統,主要為線上銷售和線上購物服務。 一般的商城系統運營模式有B2C單商戶商城系統,B2B2C多商戶商城系統以及SAAS運營版。但是搭建一個商城系統過程很麻煩,這時候我們這些現成的來幫忙啦!likeshop是一個100%開源免費商用而 ...
  • 繼 Tabby、Warp 後,今天再來給大家推薦一款終端神器——WindTerm,完全開源,在 GitHub 上已經收穫 6.6k 的 star。 https://github.com/kingToolbox/WindTerm 作者還拿 WindTerm 和 Putty、xterm、Windows ...
  • 一、前言 我們在實際開發中肯定會遇到後端的時間傳到前端是這個樣子的:2022-08-02T15:43:50 這個時候前後端就開始踢皮球了,!! 後端說:前端來做就可! 前端說:後端來做就可! 作為一名有責任感的後端,這種事情怎麼能讓前端來搞呢! 還有就是Long類型的返回到前端可能會損失精度,這個情 ...
  • 在上一遍文章中已經介紹了PixelShaderEffect 用hlsl(著色器) 可以實現各種自定義濾鏡效果了,本文將用 "ThresholdEffect" 來講解如何編寫,編譯hlsl,然後使用PixelShaderEffect製作自定義濾鏡。 效果圖: 一.hlsl幫助程式介紹 在寫hlsl 代 ...
  • 簡介 FTP是FileTransferProtocol(文件傳輸協議)的英文簡稱,而中文簡稱為“文傳協議”。用於Internet上的控制文件的雙向傳輸。同時,它也是一個應用程式(Application)。基於不同的操作系統有不同的FTP應用程式,而所有這些應用程式都遵守同一種協議以傳輸文件。 FTP ...
  • 在繼承中,派生類可以拿到基類的方法,若是派生類很多,且有時某部分派生類的部分實現邏輯是一樣的,但其他的派生類又用不到,這個時候這些邏輯若是全部寫到派生類中,就會導致產生很多的重覆邏輯,但是若是寫到基類中就會導致其他用不到當前邏輯的派生類也能調用,這樣就會導致代碼維護出現了問題。由此產生了介面。 在C ...
  • WPF 截圖控制項之移除控制項(九)「仿微信」 WPF 截圖控制項之移除控制項(九)「仿微信」 作者:WPFDevelopersOrg 原文鏈接: https://github.com/WPFDevelopersOrg/WPFDevelopers 框架使用大於等於.NET40; Visual Studio ...
一周排行
    -Advertisement-
    Play Games
  • 使用原因: 在我們服務端調用第三方介面時,如:支付寶,微信支付,我們服務端需要模擬http請求並加上一些自己的邏輯響應給前端最終達到我們想要的效果 1.使用WebClient 引用命名空間 using System.Net; using System.Collections.Specialized; ...
  • WPF 實現帶蒙版的 MessageBox 消息提示框 WPF 實現帶蒙版的 MessageBox 消息提示框 作者:WPFDevelopersOrg 原文鏈接: https://github.com/WPFDevelopersOrg/WPFDevelopers.Minimal 框架使用大於等於.N ...
  • 一、JSON(JavaScript Object Notation)的簡介: ① JSON和XML類似,主要用於存儲和傳輸文本信息,但是和XML相比,JSON更小、更快、更易解析、更易編寫與閱讀。 ② C、Python、C++、Java、PHP、Go等編程語言都支持JSON。 二、JSON語法規則: ...
  • 1.避免Scoped模式註冊的服務變成Singleton模式 當提供一個生命周期模式為Singleton的服務實例時,如果發現該服務中還依賴生命周期模式為Scoped的服務實例(Scoped服務實例將被一個Singleton服務實例所引用),那麼這個被依賴的Scoped服務實例最終會成為一個Sing ...
  • 索引時資料庫提高數據查詢處理性能的一個非常關鍵的技術,索引的使用可以對性能產生上百倍甚至上千倍的影響。接下來,會介紹索引的基本原理、概念,並深入學習資料庫中所使用的索引結構和存儲方式,以及如何管理、維護索引等。 1.索引的基本概念 索引時用來快速查詢表記錄的一種存儲結構,一般使用索引有一下兩個方面: ...
  • django2 路由控制器 Route路由,是一種映射關係。路由是把客戶端請求的url路徑和用戶請求的應用程式,這裡意指django裡面的視圖進行綁定映射的一種關係。 請求路徑和視圖函數不是一一對應的關係 在django中所有的路由最終都被保存到一個叫urlpatterns的文件里,並且該文件必須在 ...
  • 1、我們的目標是獲取微博某博主的全部圖片、視頻 2、拿到網址後 我們先觀察 打開F12 隨著下滑我們發現載入出來了一個叫mymblog的東西,展開響應發現需要的東西就在裡面 3、重點來了!!! 通過觀察發現第二頁比第一頁多了參數since_id 而第二頁的since_id參數剛好在上一頁中能獲取到, ...
  • 一、實現原理 在Servlet3協議規範中,包含在JAR文件/META-INFO/resources/路徑下的資源可以直接訪問。 二、舉例說明 如下圖所示,是我新建的一個Spring Boot Starter項目:zimug-minitor-threadpool,用於實現可配置、可觀測的線程池。其中 ...
  • 精華筆記: static final常量:應用率高 必須聲明同時初始化 由類名打點來訪問,不能被改變 建議:常量所有字母都大寫,多個單詞用_分隔 編譯器在編譯時會將常量直接替換為具體的數,效率高 何時用:數據永遠不變,並且經常使用 抽象方法: 由abstract修飾 只有方法的定義,沒有具體的實現( ...
  • Python有一個for...else語法,它的寫法如下 for i in range(0,100): if i == 3: break else: print("Not found") 該語句表示:若for迴圈遍歷完畢,則執行else部分的語句。也就是說上述代碼不會有任何輸出,而下述代碼會輸出“N ...