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
  • 1.1 關於C# C#只是一種簡單安全的新型面向對象語言,繼承了C的語法風格和C++的面向對象特性,不再提供對指針類型的支持(因此程式不可隨便訪問記憶體地址空間)、不再支持多重繼承; C#的誕生意義是生成面向.NET Framework環境的代碼,身為編程語言的一種,它作為開發工具而存在,本身並不是. ...
  • 往一張產品圖片上,加兩個小標簽,Demo實現最好的效果 素材例圖與最終效果如下: 具體實現的代碼如下: 添加引用: using System.Drawing; using System.Drawing.Drawing2D; 註意:如果添加命名空間沒效果,加一下Nuget包 System.Drawin ...
  • 前置要求:有百度賬號,實名認證以及開發者認證,創建應用並獲取到關鍵憑證:Appid、Appkey、Secretkeyk和Signkey 平臺上入門十分清楚,直接對著逐步操作即可,個人開發者審核也很快 百度網盤開放平臺地址如下:https://pan.baidu.com/union/doc/nksg0 ...
  • 使用方法 安裝 Maven <dependency> <groupId>com.github.yulichang</groupId> <artifactId>mybatis-plus-join</artifactId> <version>1.2.4</version> </dependency> G ...
  • 數字常量 int: 一般的整數, long: 長整型,2.x版本需在數字後加 “L” 或 “l” ,表示長整型 如 100000000L; python3.x 版本後不分長整型,統一為int,不可加 “L” 或 “l” float: 浮點數,1.0 也為浮點數,float 可強制轉換為 int,取整 ...
  • if __name__ == "__main__" 也就是說執行當前文件,不調用模塊的時候__name__=__main__ 調用模塊的時候,測試如下: 1、新建 test01.py 文件測試代碼如下 print("這條消息來自test01") def func(): print('hello, w ...
  • 一.scoket基本介紹 1.scoket簡介(以下是來自chatgpt回答) 1)Socket(套接字)是電腦網路中用於描述主機之間通信的一種機制。它定義了一種標準的介面, 使得應用程式可以利用網路傳輸層提供的服務(如TCP或UDP)進行通信。 2)Socket的作用是在網路應用程式之間提供數據 ...
  • 一、函數的定義 可以分為以下兩種: 1、函數聲明和函數定義分離 這種方法將函數聲明和函數定義分開,通常在頭文件中先聲明函數原型,然後在源文件中實現函數定義。 例如,頭文件 example.h 中聲明瞭一個函數 add: #ifndef EXAMPLE_H #define EXAMPLE_H int ...
  • 一 回顧trait使用 https://blog.csdn.net/bushuwei/article/details/103514174發現之前本人說明很模糊,自己居然不知道為什麼其實這裡的$c,就是class B再次回顧邏輯 二 分析 self和static區別說的沒毛病 Trait基類use t ...
  • 一、延遲計算 RDD 代表的是分散式數據形態,因此,RDD 到 RDD 之間的轉換,本質上是數據形態上的轉換(Transformations) 在 RDD 的編程模型中,一共有兩種運算元,Transformations 類運算元和 Actions 類運算元。開發者需要使用 Transformations ...