我們都知道ORM全稱(chēng)叫做Object Relationship Mapper,也就是可以用object來(lái)map我們的db,而且市面上的orm框架有很多,其中有一個(gè)框架
叫做dapper,而且被稱(chēng)為the king of ORM。
一:為什么選擇Dapper
1. 性能優(yōu)越:
其實(shí)在各大網(wǎng)站上,我們大概都會(huì)看到這樣的一個(gè)對(duì)比效果圖,在超過(guò)500次poco serialization的過(guò)程中所表現(xiàn)的性能,我們發(fā)現(xiàn)dapper是第二名,
當(dāng)然第一名誰(shuí)也無(wú)法超越,越底層的當(dāng)然久越快,同時(shí)也就越麻煩。就好像誰(shuí)能超過(guò)“01代碼”呢???
2. 支持多數(shù)據(jù)庫(kù)
支持多數(shù)據(jù)庫(kù)的本質(zhì)是因?yàn)镈apper是對(duì)IDBConnection接口進(jìn)行了方法擴(kuò)展,比如你看到的SqlMapper.cs,一旦你這樣做了,我們也知道,
SqlConnection,MySQLConnection,OracleConnection都是繼承于DBConnection,而DBConnection又是實(shí)現(xiàn)了IDBConnection的接口,對(duì)吧。。。
二:安裝Dapper
install dapper的方式通常有兩種:
1. 通過(guò)nuget進(jìn)行安裝
如果你不知道怎么用nuget進(jìn)行安裝,或者不知道install-package是什么,可以在browser上找一下,比如下面這樣:
然后我們copy到package console 試試看。
2. 在github上獲取源碼。
為什么要獲取源碼,是因?yàn)橛胕lspy調(diào)試dapper的源碼太費(fèi)勁了,畢竟現(xiàn)在都是異步編程了,從ilspy中看都是匿名方法很多都無(wú)法滲透,廢話(huà)不多
說(shuō),我們只要把Dapper文件夾拉出來(lái)然后copy到我們的solution就可以了,如下圖:
三:快速CURD操作
其實(shí)對(duì)數(shù)據(jù)庫(kù)的操作莫過(guò)于CURD,在進(jìn)行操作之前我們?cè)倥湟粋€(gè)Users表。
1. 配置Users表
CREATE TABLE [dbo].[Users]( [UserID] [int] IDENTITY(1,1) NOT NULL, [UserName] [varchar](50) NULL, [Email] [varchar](100) NULL, [Address] [varchar](100) NULL, CONSTRAINT [PK_Users] PRIMARY KEY CLUSTERED ( [UserID] ASC)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]) ON [PRIMARY]
2. Insert操作
通常來(lái)說(shuō),有兩種insert操作:
<1>單條insert操作
這是一個(gè)簡(jiǎn)單的參數(shù)化insert,而且還可以塞入匿名類(lèi)型,對(duì)吧,跟原始的SqlParameter相比,是不是簡(jiǎn)單的多???
static void Main(string[] args) { IDbConnection connection = new SqlConnection("Data Source=.;Initial Catalog=DataMip;Integrated Security=True;MultipleActiveResultSets=True"); var result = connection.Execute("Insert into Users values (@UserName, @Email, @Address)", new { UserName = "jack", Email = "380234234@QQ.com", Address = "上海" }); }
<2> InsertBulk操作
既然是Bulk操作,那肯定就是批量插入了,我們要做的就是將上面這個(gè) ”匿名對(duì)象" 變成 ”匿名對(duì)象集合“ 就可以了。。。為了方便操作,這里定義
一個(gè)Users類(lèi),比如下面這樣。。。
static void Main(string[] args) { IDbConnection connection = new SqlConnection("Data Source=.;Initial Catalog=DataMip;Integrated Security=True;MultipleActiveResultSets=True"); //var result = connection.Execute("Insert into Users values (@UserName, @Email, @Address)", // new { UserName = "jack", Email = "[email protected]", Address = "上海" }); var usersList = Enumerable.Range(0, 10).Select(i => new Users() { Email = i + "qq.com", Address = "安徽", UserName = i + "jack" }); var result = connection.Execute("Insert into Users values (@UserName, @Email, @Address)",usersList); }
2. Query操作
其實(shí)在Dapper在query上提供的的文章太多了。。。這篇我們就按照最簡(jiǎn)單的參數(shù)化查詢(xún)就好了。。。比如我要找到username=jack的記錄,如下:
1 static void Main(string[] args)2 {3 IDbConnection connection = new SqlConnection("Data Source=.;Initial Catalog=DataMip;Integrated Security=True;MultipleActiveResultSets=True");4 5 var query = connection.Query<Users>("select * from Users where UserName=@UserName", new { UserName = "jack" });6 7 }
圖上的亮點(diǎn)就在于能夠自動(dòng)化mapper到我們object上面來(lái),這是我們DataReader所不能辦到的,對(duì)吧~~
3.update操作
這種操作方式,我們還是使用Execute方法來(lái)實(shí)現(xiàn),和insert是一種套路的哦。
4. delete操作
這里我還是采用參數(shù)化的形式來(lái)刪除UserID=10這條記錄,方式如下:
最終sql的table展示如下,可以看到已經(jīng)正確的修改了UserID=11的記錄,刪除了UserID=10的record。。。。當(dāng)然Dapper好玩的地方多著呢,
這篇只是一個(gè)入門(mén)而已。。。希望本篇對(duì)大家有幫助~~~
原文 :http://www.cnblogs.com/huangxincheng/p/5828470.html
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注