.net平台性能很不错的轻型ORM类Dapper(转)
.net平臺性能很不錯的輕型ORM類Dapper
Posted By : 藍狐 Updated On : 2016-04-22 23:16dapper只有一個代碼文件,完全開源,你可以放在項目里的任何位置,來實現數據到對象的ORM操作,體積小速度快。 使用ORM的好處是增、刪、改很快,不用自己寫sql,因為這都是重復技術含量低的工作,還有就是程序中大量的從數據庫中讀數據然后創建model,并為model字段賦值。這些ORM都可以輕松給你搞定。ORM給我們開發帶來便利時,性能也是一個讓我們不得不考慮的問題。一般的ORM性能和直接寫原生的sql比都差不少,但是Dapper性能還很錯,甚至和DbHelperSQL方式性能高出很多。
下載地址:https://github.com/StackExchange/dapper-dot-net
假如你喜歡原生的Sql語句,又喜歡ORM的簡單,那你一定會喜歡上Dapper這款ROM。
?
相關dapper實際項目源碼下載:
基于ASP.NET MVC5和dapper的SEO關鍵詞按天計費系統源碼
dapper ASP.NET MVC5 sql文章&博客網站源碼
mvc5 dapper bootstrap2通用權限后臺管理系統源碼
?
?
Dapper的優勢:
1,Dapper是一個輕型的ORM類。代碼就一個SqlMapper.cs文件,編譯后就40K的一個很小的Dll.2,Dapper很快。Dapper的速度接近與IDataReader,取列表的數據超過了DataTable。
3,Dapper支持什么數據庫。Dapper支持Mysql,SqlLite,Mssql2000,Mssql2005,Oracle等一系列的數據庫,當然如果你知道原理也可以讓它支持Mongo db
4,Dapper的r支持多表并聯的對象。支持一對多 多對多的關系。并且沒侵入性,想用就用,不想用就不用。無XML無屬性。代碼以前怎么寫現在還怎么寫。
5,Dapper原理通過Emit反射IDataReader的序列隊列,來快速的得到和產生對象。性能實在高高。
6,Dapper支持net2.0,3.0,3.5,4.0。【如果想在Net2.0下使用,可以去網上找一下Net2.0下如何配置運行Net3.5即可。】
7,Dapper語法十分簡單。并且無須遷就數據庫的設計。
dapper的安裝
在nuget里面搜索Dapper
點擊“安裝”,會下載Dapper.dll,并把引用添加到項目中。
?
下面介紹Dapper如何使用,來進行高效開發,以下操作dapper是編譯后在Net4.0下操作的例子。
1、定義一個Person類對應數據庫的Person表
- CREATE TABLE [Person](
- [id] [int] IDENTITY(5,1) NOT NULL primary key nonclustered,
- [username] [nvarchar](100) NULL,
- [password] [nvarchar](100) NULL,
- [age] [int] NULL,
- [registerDate] [datetime] NULL,
- [address] [nvarchar](150) NULL
- )
- public class Person
- {
- public int id { get; set; }
- public string username { get; set; }
- public string password { get; set; }
- public int age { get; set; }
- public DateTime registerDate { get; set; }
- public string address { set; get; }
- }
2、定義連接數據庫字符串
- public static string ConnString = "Server=.;Database=Test1;uid=sa;pwd=sa;";
3、獲取id大于2的所有Person,dapper返回類型是List類型
- public static List<Person> GetPersonList()
- {
- using (var conn = new System.Data.SqlClient.SqlConnection(ConnString))
- {
- conn.Open();
- var a = conn.Query<Person>("select * from Person where id>@id", new { id = 2 });
- conn.Close();
- return a.ToList();
- }
- }
這樣返回的是List類型,可以充分利用linq的好處。
4、dapper批量插入數據
- public static void Execute()
- {
- using (var conn = new SqlConnection(ConnString))
- {
- conn.Open();
- var r=conn.Execute(@"insert Person(username, password,age,registerDate,address) values (@a, @b,@c,@d,@e)",
- new [] {
- new { a = 1, b = 1, c = 1, d = DateTime.Now, e = 1 }
- , new { a = 2, b = 2, c = 2, d = DateTime.Now, e = 2 }
- , new { a = 3, b = 3, c = 3, d = DateTime.Now, e = 3 }
- }
- ??????????????? conn.Close();
- ?????????}
- ?);
執行上面方法會插入3條記錄,這樣sql可以靈活的控制,參數不用像ADO.Net那樣聲明每個參數,最后還要把參數集合賦值給ADO的命令。可以看出這樣簡潔多了。
5、dapper修改數據,update
- public static bool Update()
- {
- ?? ?using (var conn = new SqlConnection(ConnString))
- ?? ?{
- ?? ??? ?conn.Open();
- ?? ??? ?var r = conn.Execute(@"update Person set password='www.lanhuseo.com' where username=@username", new { username = 2 });
- ????????conn.Close();
- ?? ??? ?return r > 0;
- ?? ?}
- }
6、dapper刪除數據
- public static bool Delete()
- {
- using (var conn = new SqlConnection(ConnString))
- {
- conn.Open();
- var r = conn.Execute(@"delete from Person where id=@id", new { id = 2 });
- conn.Close();
- return r > 0;
- }
- }
7、dapper使用事務
- using (var conn = new SqlConnection(ConnString))
- {
- conn.Open();
- IDbTransaction trans = conn.BeginTransaction();
- int row = conn.Execute(@"update Person set password='www.lanhuseo.com' where id=@id", new { id = 3 }, trans, null, null);
- row += conn.Execute("delete from Person where id=@id", new { id = 5 }, trans, null, null);
- trans.Commit();
- }
8、dapper集合批量插入
- public static int InsertMultiple<T>(string sql, IEnumerable<T> entities, string connectionName = null) where T : class, new()
- {
- using (SqlConnection cnn = GetOpenConnection(connectionName))
- {
- int records = 0;
- using (var trans = cnn.BeginTransaction())
- {
- try
- {
- cnn.Execute(sql, entities, trans, 30, CommandType.Text);
- }
- catch (DataException ex)
- {
- trans.Rollback();
- throw ex;
- }
- trans.Commit();
- }
- //foreach (T entity in entities)
- //{
- // records += cnn.Execute(sql, entity);
- //}
- return records;
- }
- }
Dapper支持集合的插入,集合提交是一句直接的插入命令,所以速度會快很多。
通過上面的實例可以看到sql語句完全是我們自己控制,對于對EF和NHibernate這些自動給我們生成sql語句的這種機制不爽的同學就有福利了,我個人覺得這個Dapper和iBatis.Net機制都差不多,都是sql語句都是完全由程序員自己寫,框架自身只負責數據轉換成我們需要的Model相關的對象,這樣程序性能得到了保證,但是也有一個不好的地方的所有的sql語句都要自己寫,比如增、刪、查、改,如果一個項目有上百個表,工作量也不小,還好有代碼生成器把我們解放出來,例如:Codesmith。Dapper和iBatis.Net是大的區別是,Dapper更加簡單和輕量,不用像iBatis.Net配置xml文件。
我自從認識了Dapper,如果項目性能要求比較高的情況下,我會首先考慮用Dapper,Dapper簡單、輕量以以對sql語句的完全控制的特性,讓我感覺相見恨晚。
轉載于:https://www.cnblogs.com/LiZhongZhongY/p/10864132.html
總結
以上是生活随笔為你收集整理的.net平台性能很不错的轻型ORM类Dapper(转)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Flask 启动配置
- 下一篇: 一块肥皂大概多少钱?