1. 程式人生 > >ORM系列之三:Dapper

ORM系列之三:Dapper

目錄

1.Dapper 簡介

2.Dapper 安裝

3.Dapper 使用

           

Dapper簡介  

         Dapper是一個輕量級的ORM框架,短小精悍,正如其名。對於小專案,使用EF,NHibernate這樣的重量級ORM框架,有點殺雞用牛刀的感覺,此時Dapper會是個很不錯的選擇。 

Dapper優勢  

  1. 輕量,Dapper.dll大小不到105KB。
  2. 快,讀取資料接近IDataReader。
  3. 支援大部分主流的資料庫,如:MS SQL,Oracle,MySQL,Sqlite等等。
  4. 支援對映一對一,一對多,多對多關係。 

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 { getset; } public string Title { 
getset; } public string Content { getset; } public User User { getset; } } public class User { public int Id { getset; } public string Name { getset; } }

  建立表指令碼:  

複製程式碼
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當前已使用的記憶