zoukankan      html  css  js  c++  java
  • 小巧方便的ORM类库——PetaPoco

    PetaPoco是一个简单轻巧的orm开源类库,全部功能只有一个文件,可以很方便集成到项目中。代替SqlHelper辅助类的不二选择。。。

    主要功能包括:
    - 映射实体类,支持enum,Nullable等类型,可同时映射多个实例。
    - 支持分页
    - 以@0等占位符代替SqlParameter,传参更方便
    - 带有sql字符串构造器,构造条件查询sql非常方便
    - update支持指定字段更新
    - 支持T4模板

    使用示例: 使用前需要先new一个数据库实例:

    var db = new PetaPoco.Database("ConnectionName");

    可以放心地把db实例设为static,因为实例中没有SqlConnection的引用,连接每次执行完后,会自动关闭。 发现有人反映在web上使用static的db实例还是会有问题,具体可看链接(Link1),StackOverflow中推荐web中每个请求使用一个单独的db实例(Link2). 1、取一条记录

    var a = db.SingleOrDefault("SELECT * FROM articles WHERE article_id=@0", 123));

    2、分页

    // 分页实质在内部是用Row_Number()重写了sql,支持join
    var result=db.Page(1, 20, "SELECT * FROM articles WHERE category=@0 ORDER BY date_created DESC", "coolstuff");

    上面的分页sql,会被改写为sql:

    SELECT * FROM (
        SELECT ROW_NUMBER() OVER (ORDER BY date_created DESC) peta_rn, * FROM articles WHERE category=@0 ) peta_paged
    WHERE peta_rn>@1 AND peta_rn

    3、部分更新

    db.Update("articles", "article_id", new { title="New title" }, 123);

    4、sql条件构造

    var sql = PetaPoco.Sql.Builder
        .Append("SELECT * FROM articles")
        .Append("WHERE article_id=@0", id)
        .Append("WHERE date_created>=@0", start_date)
        .Append("WHERE date_created<=@0", end_date);
    
    

    5、直接执行sql

    db.Execute("DELETE FROM articles WHERE draft<>0");

    6、调用存储过程

    //调用存储过程
    db.Execute("exec procSomeHandler @0, @1", 3, "2011-10-01");
    
    //调用带输出(OUTPUT)参数的存储过程, 写的sql语句,@0参数后的“output”是关键
    var param = new SqlParameter() { Direction = ParameterDirection.Output, SqlDbType = SqlDbType.Int };
    db.Execute("exec procSomeHandler @0 OUTPUT", param);

    7、代替返回值DataTable 有时,我们并不想每条执行的sql都需要创建对应的实体类,这样会导致项目中存在过多的实体类,有方法能做到DataTable这样灵活就最好了。在.net4.0中,PetaPoco可以返回dynamic类型,可以很好地解决这个问题,而在.net3.5中就没办法,不过可以通过修改PetaPoco代码,实现使用Dictionary类型来代替dynamic动态类型的功能。改动代码如下:https://github.com/cxfksword/PetaPoco/commit/e07746c06977f09ef8e7a0f81b718e520b4513ed

    var list = db.Fetch>("select article_id,date_created from articles");

    使用petapoco时有点需要注意,就是当数据库字段数据类型是varchar等非unicode字符类型时,petapoco传参需要把string转换为AnsiString类型,否则会有性能问题。

    Ansi String Support
    
    DBA guru Rob Sullivan yesterday pointed out that SQL Server has pretty severe performance overhead if you try to query an index with varchar column using a unicode string parameter. To fix this the parameter needs to be bound as DbType.AnsiString. To facilitate this you can now wrap such string parameters in a new AnsiString class:
    
    var a = db.SingleOrDefault("WHERE title=@0", new PetaPoco.AnsiString("blah"));

    参考资料: http://code.google.com/p/dapper-dot-net/ http://www.toptensoftware.com/petapoco/

  • 相关阅读:
    一些零碎小知识点积累随笔
    STM32学习笔记——新建工程模板步骤(向原子哥学习)
    记一次电信反射xss的挖掘与利用
    mysql字符串操作相关函数用法总结
    mysql学习笔记
    sigmoid function的直观解释
    多变量线性回归时使用梯度下降(Gradient Descent)求最小值的注意事项
    SAE中Python无法创建多线程的解决方案
    BCNF/3NF 数据库设计范式简介
    web.py下获取get参数
  • 原文地址:https://www.cnblogs.com/vento/p/2909562.html
Copyright © 2011-2022 走看看