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/

  • 相关阅读:
    jquery实现选项卡(两句即可实现)
    常用特效积累
    jquery学习笔记
    idong常用js总结
    织梦添加幻灯片的方法
    LeetCode "Copy List with Random Pointer"
    LeetCode "Remove Nth Node From End of List"
    LeetCode "Sqrt(x)"
    LeetCode "Construct Binary Tree from Inorder and Postorder Traversal"
    LeetCode "Construct Binary Tree from Preorder and Inorder Traversal"
  • 原文地址:https://www.cnblogs.com/vento/p/2909562.html
Copyright © 2011-2022 走看看