zoukankan      html  css  js  c++  java
  • 给力分享新的ORM => Dapper( 转)

    出处:http://www.cnblogs.com/sunjie9606/archive/2011/09/16/2178897.html

    最近一直很痛苦,想选一个好点的ORM来做项目,实在没遇到好的。昨天忽然的看到Dapper,立刻迷恋上了。这个ORM实在太强大了,可惜资料少的可怜。就发点资料来介绍吧。官方资料点击这里

    Dapper是一个轻型的ORM类。代码就一个SqlMapper.cs文件。文件见下。编译后就40K的一个很小的Dll.(估计其他的ORM要哭了。)

    Dapper很快,有多快。实验下就知道了。官方给了点测试包,想玩的时候就去测试下。Dapper的速度接近与IDataReader,取列表的数据超过了DataTable。(更多的ORM泪奔了,好多ORM弱爆了。)

    Dapper支持什么数据库。Dapper支持Mysql,SqlLite,Mssql2000,Mssql2005,Oracle等一系列的数据库,当然如果你知道原理也可以让它支持Mongo db.(有的ORM泪奔了)

    Dapper的r支持多表并联的对象。支持一对多 多对多的关系。并且没侵入性,想用就用,不想用就不用。无XML无属性。代码以前怎么写现在还怎么写。(更更更更多的ORM泪奔了,看到其他的ORM又是XML又是属性,Map来Map去,设计来设计去,缓存来缓存去,然后还是那么的慢。)

    Dapper原理通过Emit反射IDataReader的序列队列,来快速的得到和产生对象。性能实在高高高。(更更更更更更更多的ORM泪奔了)

    Dapper支持net2.0,3.0,3.5,4.0。不过就是要配置下。如果不知道如何配置查看我博客里的在2.0下使用3.5就可以了。(更更更更更更更更更更更多的ORM泪奔了)

    Dapper的语法是这样的。语法十分简单。并且无须迁就数据库的设计。(我X,无敌了)

     

    public static readonly string sqlconnectionString = "Data Source=xxx;Initial Catalog=Express;User ID=sa;Password=123";
     
    public static readonly string mysqlconnectionString = @"server=xxx;database=dddd;uid=xxx;pwd=123;charset='gbk'";
     
    public static SqlConnection SqlConnection()
    {
        var connection = new SqlConnection(sqlconnectionString);
        connection.Open();
        return connection;
    }
     
    public static  MySqlConnection  MySqlConnection()
    {
        var connection = new MySqlConnection(mysqlconnectionString);
        connection.Open();
        return connection;
    }

    调用方法

    SqlConnection connection = Program.SqlConnection();
     
    for (int i = 0; i < 100000; i++)
    {
        //connection.Execute("INSERT INTO dog (Age,Name,Weight) VALUES (@age,@name,@Weight)",
           //  new { @age = i,@name = Guid.NewGuid().ToString(), @Weight = i });
    }
     
    var d = connection.Query<Dog>("select * from dog where id = 1", null).Single<Dog>();
    var dd = connection.Query<Dog>("select * from dog where id < 10", null).ToList<Dog>();

    试用感觉

    30W条数据,取其中的一个对象,和第一页前15条数据,耗时0.0906879秒。这个速度超过Datable。

    官方的测试代码以及数据

    Performance of SELECT mapping over 500 iterations - POCO serialization

    Method Duration Remarks
    Hand coded (using a SqlDataReader) 47ms
    Dapper ExecuteMapperQuery<Post> 49ms
    PetaPoco 52ms Can be faster
    BLToolkit 80ms
    SubSonic CodingHorror 107ms
    NHibernate SQL 104ms
    Linq 2 SQL ExecuteQuery 181ms
    Entity framework ExecuteStoreQuery 631ms

    Performance of SELECT mapping over 500 iterations - dynamic serialization

    Method Duration Remarks
    Dapper ExecuteMapperQuery (dynamic) 48ms
    Massive 52ms
    Simple.Data 95ms

    Performance of SELECT mapping over 500 iterations - typical usage

    Method Duration Remarks
    Linq 2 SQL CompiledQuery 81ms Not super typical involves complex code
    NHibernate HQL 118ms
    Linq 2 SQL 559ms
    Entity framework 859ms
    SubSonic ActiveRecord.SingleOrDefault 3619ms

    Performance benchmarks are available here: http://code.google.com/p/dapper-dot-net/source/browse/Tests/PerformanceTests.cs , Feel free to submit patches that include other ORMs - when running benchmarks, be sure to compile in Release and not attach a debugger (ctrl F5)

    内存控制 非常好。

    结论不管你用不用,我反正是用它了。

    我编译好了一份发上来了。点击下载。代码如下有点长

  • 相关阅读:
    SQL操作全集 sql精典收藏
    sql中全角字符与半角字符检验问题
    asp.net目录权限设置图文综合[转]
    XPath 语法
    XPath学习
    接口使用例子,阐述接口的优点、作用
    sql查询出表中所有列名 判断两个表中的列是否相同
    指定键让指定的按钮提交
    C#.Net网络程序开发Socket篇
    ASP.NET中异常处理使用
  • 原文地址:https://www.cnblogs.com/smileberry/p/3781628.html
Copyright © 2011-2022 走看看