ORM系列之三:Dapper
目錄
1.Dapper 簡介
2.Dapper 安裝
3.Dapper 使用
Dapper簡介
Dapper是一個輕量級的ORM框架,短小精悍,正如其名。對於小專案,使用EF,NHibernate這樣的重量級ORM框架,有點殺雞用牛刀的感覺,此時Dapper會是個很不錯的選擇。
Dapper優勢
- 輕量,Dapper.dll大小不到105KB。
- 快,讀取資料接近IDataReader。
- 支援大部分主流的資料庫,如:MS SQL,Oracle,MySQL,Sqlite等等。
- 支援對映一對一,一對多,多對多關係。
Dapper原理
Dapper實際上是擴充套件了IDbConnection,提供了一些的查詢和執行方法,對ADO.NET的訪問物件進行了最底層的封裝,所以效能接近ADO.NET。
Dapper安裝
通過NuGet包管理器,直接搜尋Dapper,選擇搜尋結果中的第一個,點選安裝到專案中即可。
Dapper 使用
Dapper查詢結果支援強型別,同時也支援動態型別,在實際開發中我們建議使用強型別,方便以後維護。
實體類
示例中需要用到兩個實體型別,分別為Post.cs和User.cs。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
public class Post
{
public int Id
{ get ; set ;
}
public string Title
{ get ; set ;
}
public string Content
{ get ; set ;
}
public User
User { get ; set ;
}
}
public class User
{
public int Id
{ get ; set ;
}
public string Name
{ get ; set ;
}
}
|
建立表指令碼:
CREATE TABLE [dbo].[Post]( [Id] [int] IDENTITY(1,1) NOT NULL, [Title] [nvarchar](50) NULL, [Content] [nvarchar](2000) NULL, [UserId] [int] NULL, CONSTRAINT [PK_Post] PRIMARY KEY CLUSTERED ( [Id] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY] CREATE TABLE [dbo].[User]( [Id] [int] IDENTITY(1,1) NOT NULL, [Name] [nvarchar](20) NULL, PRIMARY KEY CLUSTERED ( [Id] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY]
輔助類
由於Dapper是IDbConnection.cs進行了擴充套件,所以我們自己要管理資料庫連線,本示例我封裝了一個簡單的DBHelper.cs用於管理資料庫連線的開啟和關閉。
public class DBHelper { private static string strConn = "Data Source=2012-20130731KI;Initial Catalog=QYHDB;Integrated Security=True;Connect Timeout=15;Encrypt=False;TrustServerCertificate=False"; /// <summary> /// 開啟連結 /// </summary> public static SqlConnection OpenConnection() { SqlConnection conn = new SqlConnection(strConn); conn.Open(); return conn; } public static void CloseConnection() { SqlConnection conn = new SqlConnection(strConn); if (conn.State != System.Data.ConnectionState.Closed) { conn.Close(); } } }
方法測試
/// <summary> /// Dapper示例 /// </summary> class Program { static void Main(string[] args) { SqlConnection conn = DBHelper.OpenConnection(); //示例1:簡單查詢,返回強型別列表 Console.WriteLine("示例1:簡單查詢,返回強型別列表:"); var result1 = conn.Query<Post>("select Id,Title,Content from Post"); foreach (var item in result1) { Console.WriteLine(item.Id + " " + item.Title + " " + item.Content); } //示例2:簡單查詢,返回動態列表 Console.WriteLine("示例2:簡單查詢,返回動態列表"); var result2 = conn.Query("select Id,Title,Content from Post"); foreach (var item in result1) { Console.WriteLine(item.Id + " " + item.Title + " " + item.Content); } //示例3:帶引數的查詢 Console.WriteLine("示例3:帶引數的查詢"); var result3 = conn.Query<Post>("select Id,Title,Content from Post where [email protected]", new { UserId = 1 }); foreach (var item in result3) { Console.WriteLine(item.Id + " " + item.Title + " " + item.Content); } //示例4:執行沒有返回結果的命名 //Test04(conn); //示例5:執行多次指令碼 //Console.WriteLine("示例5:執行多次指令碼"); //conn.Execute("insert into [User](Name) values(@Name)", new[] { new { Name = "wangwu" }, new { Name = "zhouliu" }, new { Name = "chenqi" } }); ////示例6:返回多個結果 Console.WriteLine("示例6:返回多個結果"); string sql = @"select * from Post where [email protected] select * from [User] where [email protected]"; using (var multi = conn.QueryMultiple(sql, new { Id = 1 })) { Post post = multi.Read<Post>().Single(); User user = multi.Read<User>().Single(); } //示例7:執行儲存過程 Console.WriteLine("示例7:執行儲存過程"); var result7 = conn.Query<Post>("sp_GetPost", new { Id = 3 }, commandType: CommandType.StoredProcedure); foreach (var item in result7) { Console.WriteLine(item.Id + " " + item.Title + " " + item.Content); } // 示例8:一對多對映,返回的一行資料對映到資料庫多張表 Console.WriteLine("示例8:一對多對映"); string sqlOneToMulti = "select * from Post p inner join [User] u on p.UserId=u.Id"; //Query<TFirst, TSecond, TReturn> var data = conn.Query<Post, User, Post>(sqlOneToMulti, (post, user) => { post.User = user; return post; }); DBHelper.CloseConnection(); Console.Read(); } }
相關推薦
ORM系列之三:Dapper
目錄 1.Dapper 簡介 2.Dapper 安裝 3.Dapper 使用 Dapper簡介 Dapper是一個輕量級的ORM框架,短小精悍,正如其名。對於小專案,使用EF,NHibernate這樣的重量級ORM框架,有點殺雞用牛刀的感覺
Dapper系列之三:Dapper的修改與刪除
幫助 一個 。。 講解 復制 upd font 希望 update Dapepr的Update和Delete 上兩篇文章我們介紹Dapper中添加和查詢。本篇文章我們繼續講解修改和刪除。。。。。如果本篇文章看不懂,請看閱讀上兩篇Dapper系列相關文章Update
初識Redis系列之三:Redis支持的數據類型及使用
ted print 數據類型 eight 排序 sorted ring hang 無序 支持的數據類型有五種: string(字符串)、hash(哈希)、list(列表)、set(集合)及zset(sorted set:有序集合); 下面分別對這幾種類型進行簡單的Redis
緩存系列之三:redis安裝及基本數據類型命令使用
pytho children tile 指令 sed eject 檢測 install 文件的 一:Redis是一個開源的key-value存儲系統。與Memcached類似,Redis將大部分數據存儲在內存中,支持的數據類型包括:字符串、哈希表、鏈表、集合、有序集合以及基
Https系列之三:讓服務器同時支持http、https,基於spring boot
signed 默認 gfs proc idl clas 兩種方法 .... gpg Https系列會在下面幾篇文章中分別作介紹: 一:https的簡單介紹及SSL證書的生成二:https的SSL證書在服務器端的部署,基於tomcat,spring boot三:讓服務器同時
Office 365 系列之三:Office 365 初體驗
office365 註冊office 365 試用office 365 在上一章節中我們已經成功申請註冊全球版微軟 Office 365 E5版本了,試用期為 30 天。接下來跟大家一起檢查下具備哪些服務和訂閱,怎麽去查看並確保各種服務是正常的。登陸 Office 365 管理中心,如下
Exchange 2013系列之三:網絡及先決條件準備
Windows Exchange AD 這裏僅以ExchCas01服務器舉例。打開網絡和管理中心,右鍵Manage網卡,選擇屬性;選擇IPV4,點擊屬性;輸入IP地址、子網掩碼及網關,DNS指向域控服務器,點擊確定;右鍵Heart網卡,點擊屬性;選擇IPV4,點擊屬性;因為心跳網絡只用於虛擬機之間
spring boot 系列之三:spring boot 整合JdbcTemplate
closed com context boot pin pan url wired ace 前面兩篇文章我們講了兩件事情: 通過一個簡單實例進行spring boot 入門 修改spring boot 默認的服務端口號和默認context path 這篇文章我們來看下怎
Java分析系列之三:jstat命令的使用及VM Thread分析
前面提到了一個使用jstack的shell指令碼,通過命令可以很快地定位到指定執行緒對應的堆疊資訊。 目錄 [隱藏] 1 使用jstat命令 2 JVM記憶體模型 3 JVM記憶體引數設定 3.1 堆記憶體設定 3.2 非堆記憶體設定
Kubernetes系列之三:部署你的第一個應用程式到k8s叢集
部署你的第一個應用程式到k8s叢集 看到這裡,求知慾飢渴難耐的你一定在想,怎麼部署的我們應用程式到叢集裡面去呢?來個簡單的,只需要兩步:(這裡本文使用nginx映象當我們的應用程式,因為nginx 簡單,執行起來後直接可以用瀏覽器訪問網頁了。) 第一步:在master 節點上建立一個
Docker入門系列之三:如何將dockerfile製作好的映象釋出到Docker hub上
這個系列的前兩篇文章,我們已經把我們的應用成功地在Docker裡通過nginx運行了起來,並且用dockerfile裡製作好了一個映象。 Docker入門系列之一:在一個Docker容器裡執行指定的web應用 Docker入門系列之二:使用dockerfile製作包含指定web應用的映象 本
JVM系列之三:型別的生命週期
此篇文章主要介紹從一個Java型別(類或者介面)的生命週期(從它進入虛擬機器到退出)開始階段的裝載、連線與初始化,以及佔Java型別宣告週期絕大部分時間的物件例項化、垃圾收集和物件終結,然後是Java型別生命週期的結束,也就是從虛擬機器中解除安裝。 型別裝載、連線與初始化 Java虛擬機器通過裝載、連
skyfans之每天一個Liunx命令系列之三:hostname
今天我們繼續來學習SYSTEM INFORMATION(系統資訊命令),今天學習的是什麼命令呢,那就是hostname。 針對於初學linux者來說,我們可多在伺服器上面輸入 --help命令檢視此命令的用法及內容。廢話不多說,繼續。 Ready Go!!!
敏捷開發日常跟進系列之三:故事板,看板
這是敏捷開發日常跟進系列的第三篇。 (欄目目錄)故事板和看板其實不是一個東西,前者是最初的敏捷開發裡邊的東西,受到了後者的啟發產生的;而後者是製造業的東西,具體內容請參考末尾的百度百科。但是在敏捷開發裡邊提到這兩樣東西,可以認為大致相同。故事板簡單說,故事板是展示迭代中的使用
docker系列之三 :建立自己的image並上傳到docker hub
執行docker run docker/whalesay 會提示沒有映象,然後自動下載映象 建立一個cokerfile mkdir mydockerbuild cd mydockerbuild vi Dockerfile 在docker file 下
.Neter玩轉Linux系列之三:Linux下的分割槽講解
基礎篇 實戰篇 一、Linux分割槽 概述:首先我們要對硬碟分割槽的基本概念進行一些初步介紹,硬碟的分割槽主要分為主分割槽和擴充套件分割槽兩種。主分割槽和擴充套件分割槽的數目之和不能大於四個,且基本分割槽可以馬上別使用,但不能再分割槽。擴充套件分割槽必須再進行分割槽後才能
Spring原理學習系列之三:Spring AOP原理(從原始碼層面分析)-------上部
引言 本文是Spring原理分析的第三篇博文,主要闡述Spring AOP相關概念,同時從原始碼層面分析AOP實現原理。對於AOP原理的理解有利於加深對Spring框架的深入理解。同時我也希望可以探究Spring框架在處理AOP的解決思路,學習框架的時候,有時候
玩轉大資料系列之三:資料報表與展示
經過了資料採集與資料同步、資料分析和處理,我們應該考慮將處理好的資料做成報表或者大屏展示給老闆們看,以便老闆們可以更加精準地做出戰略決策,為業務的發展指明方向。 提到資料報表,不得不說說Quick BI。Quick BI提供海量資料實時線上分析服務,支援拖拽式操作、提供了豐富的視覺化效果,可以幫助您輕鬆自如
玩轉大數據系列之三:數據報表與展示
效果 工程 過濾 業務 數據同步 應用 不同 ref 運營 經過了數據采集與數據同步、數據分析和處理,我們應該考慮將處理好的數據做成報表或者大屏展示給老板們看,以便老板們可以更加精準地做出戰略決策,為業務的發展指明方向。 提到數據報表,不得不說說Quick BI。Quick
Java記憶體洩漏分析系列之三:jstat命令的使用及VM Thread分析
- S0C: Young Generation第一個survivor space的記憶體大小 (kB). - S1C: Young Generation第二個survivor space的記憶體大小 (kB). - S0U: Young Generation第一個Survivor space當前已使用的記憶