PetaPoco 使用总结(一)

前段时间,公司的一个项目希望用一个ORM 的框架,通过对比 Dapper 和 PetaPoco ,虽然Dapper 功能很强大,速度更快。 但是最终还是选择了比较简单的PetaPoco。 因为PetaPoco更加的简单,所有的代码只有1500多行。通过一个项目的试验,PetaPoco使用简单,无任何需配置,无需冗长的映射文件,性能也不错。

PetaPoco是一款适用于.NET应用程序的轻型对象关系映射器(ORM,  Object Relational Mapper)。与那些功能完备的ORM(如NHibernate或Entity Framework)不同的是,PetaPoco更注重易用性和性能,而非丰富的功能。使用PetaPoco只需要引入一个C#文件,可以使用强类型的 POCO(Plain Old CLR Object),并支持使用T4模板生成的类,和支持.net 4.0 的 Dynamic对象等等。

最近,随着许多开源项目的发布,微型ORM已开始成为一种流行趋势。其他一些众所周知的适用于.NET的项目有Dapper和Massive。那些微型ORM相对于功能完备的ORM而言,会更简单、更高效,微型ORM通常要求开发人员手动编写SQL语句,而非完全动态生成。它们同样不需要冗长的映射文件,因为对于维护和调试而言,那些映射文件只会让过程变得单调乏味。

PetaPoco最让人感兴趣的功能包括:

  • 可与SQL Server、SQL Server CE、MySQL、PostgreSQL以及Oracle数据库协同工作。
  • 包含针对Insert/Delete/Update/Save以及IsNew的多个辅助方法。
  • 支持简单事务
  • 对于翻页请求会自动计算总记录数,并获取特定分页。
  • 支持参数替换,能够从对象属性中抓取命名参数(named parameters)
  • 包括一个消耗资源很少的SQL Builder类
  • 部分记录更新
  • 包括T4 Templates,可以用于基于数据库结构生成POCO类。
  • 很好的性能,剔除了Linq,并通过Dynamic方法快速的为属性赋值

在性能方面,PetaPoco仅次于Dapper,速度只稍逊于手工编码的数据访问层(DAL, Data Access Layer)。

PetaPoco下载地址:

  GitHub - https://github.com/toptensoftware/petapoco

  例子:来自PetaPoco官网

查询

  1.定义Poco 类

// Represents a record in the "articles" table

public class article
{ public long article_id { get; set; } public string title { get; set; } public DateTime date_created { get; set; } public bool draft { get; set; } public string content { get; set; } }

  2.创建PetaPoco数据库连接 ,并执行查询

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

// 查询所有articles
foreach (var a in db.Query<article>("SELECT * FROM articles")) { Console.WriteLine("{0} - {1}", a.article_id, a.title); }

查询返回参数

long count=db.ExecuteScalar<long>("SELECT Count(*) FROM articles");

查询得到一行记录

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

分页查询

PetaPoco 自带了分页功能,可以自动执行分页请求。

    // <-- 1 和 20 分别是页码和每页条数

   var result=db.Page<article>(, ,  "SELECT * FROM articles WHERE category=@0 ORDER BY date_posted DESC", "coolstuff");

   /// PetaPoco 源码中,返回的 Page 对象 的各个属性
   /// <summary>
/// Holds the results of a paged request.
/// </summary>
/// <typeparam name="T">The type of Poco in the returned result set</typeparam>
public class Page<T>
{
/// <summary>
/// The current page number contained in this page of result set
/// </summary>
public long CurrentPage { get; set; } /// <summary>
/// The total number of pages in the full result set
/// </summary>
public long TotalPages { get; set; } /// <summary>
/// The total number of records in the full result set
/// </summary>
public long TotalItems { get; set; } /// <summary>
/// The number of items per page
/// </summary>
public long ItemsPerPage { get; set; } /// <summary>
/// The actual records on this page
/// </summary>
public List<T> Items { get; set; } /// <summary>
/// User property to hold anything.
/// </summary>
public object Context { get; set; }
}

Query vs Fetch

  Database 对象有两个获取数据的方法:Query 和Fetch。这两个方法非常相似,不同的是Fetch方法返回一个POCO类的List<>,而Query使用 yield return 迭代所有数据,这些数据并没有加载到内存中。

  需要注意的是:应该小心再开始一个新的查询之前完成和处理掉上一个查询,否则会曝异常。所以这种情况下, 应该优先使用 Fetch。

  出现这个问题的时候,一直找不到原因,看了源码注释之后,才知道的。

执行非查询的sql 语句

  使用Execute 方法执行一个不带查询的命令:

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

PetaPoco 使用总结(一)的更多相关文章

  1. mono for android中使用dapper或petapoco对sqlite进行数据操作

    在mono for android中使用dapper或petapoco,很简单,新建android 类库项目,直接把原来的文件复制过来,对Connection连接报错部分进行注释和修改就可以运行了.( ...

  2. ASP.NET MVC 使用 Petapoco 微型ORM框架+NpgSql驱动连接 PostgreSQL数据库

    前段时间在园子里看到了小蝶惊鸿 发布的有关绿色版的Linux.NET——“Jws.Mono”.由于我对.Net程序跑在Linux上非常感兴趣,自己也看了一些有关mono的资料,但是一直没有时间抽出时间 ...

  3. 【原】Bootstrap+Knockout.JS+ASP.Net MVC3+PetaPOCO实现CRUD操作

    1.需求: 1.1)页面要美观大气 1.2)前端代码要简洁清晰,要用MVC或是MVVM框架 1.3)服务端要用MVC框架,要Rest风格 1.4)数据访问要用ORM 2.效果: 2.1)列表 2.2) ...

  4. 轻量级ORM框架初探-Dapper与PetaPoco的基本使用

    一.EntityFramework EF是传统的ORM框架,也是一个比较重量级的ORM框架.这里仍然使用EF的原因在于为了突出轻量级ORM框架的性能,所谓有对比才有更优的选择. 1.1 准备一张数据库 ...

  5. PetaPoco利用ODP.NET Managed Driver连接Oracle

    大概几年之前用PetaPoco做过一个Oracle的项目,开发的时候还需要安装oracle的client,非常麻烦.调试好环境后,一直到项目结束都不敢重装系统.最近又有一个需求需要读取oracle,可 ...

  6. 流行ORM产品优缺点分析--EntityFramework、NHibernate、PetaPoco

    什么是ORM? ORM的全称是Object Relational Mapping,即对象关系映射.它的实现思想就是将关系数据库中表的数据映射成为对象,以对象的形式展现,这样开发人员就可以把对数据库的操 ...

  7. Mini ORM——PetaPoco笔记

    Mini ORM--PetaPoco笔记 记录一下petapoco官网博客的一些要点.这些博客记录了PetaPoco是如何一步步改进的. 目录: Announcing PetaPoco PetaPoc ...

  8. miniprofiler的对数据库的监测使用。以nancy,petapoco为例

    miniprofiler的使用 miniprofiler的详细介绍请看这里http://miniprofiler.com/.(可以对数据库和页面等监控如 ado ef mvc mongodb) 本文以 ...

  9. 关于PetaPoco的T4模板使用

    PetaPoco是一款适用于.Net 和Mono的微小.快速.单文件的微型ORM.PetaPoco介绍:http://www.cnblogs.com/youring2/archive/2012/06/ ...

  10. petapoco 使用 MiniProfiler Glimpse监控

    PetaPoco是一款适用于.Net(window) 和Mono( linux )的微小.快速.单文件的微型ORM. MVC MiniProfiler是Stack Overflow团队设计的一款对AS ...

随机推荐

  1. mysql5.5的安装与配置(亲测版)

    mysql5.5.x的编译安装 说明:5.5和5.1差不多,只是在编译时增加了一个cmake,其他基本一样,mysql5.5默认编码是utf-8,在使用mysql5.5配置lnmp或者lamp后安装d ...

  2. ES6新特性:Javascript中的Reflect对象

    Reflect介绍: Reflect这个对象在我的node(v4.4.3)中还没有实现, babel(6.7.7)也没有实现 ,新版本的chrome是支持的, ff比较早就支持Proxy和Reflec ...

  3. mysql-函数CASE WHEN 语句使用说明

    mysql数据库中CASE WHEN语句. case when语句,用于计算条件列表并返回多个可能结果表达式之一. CASE 具有两种格式: 简单 CASE 函数将某个表达式与一组简单表达式进行比较以 ...

  4. Spring-程序中获取注册bean的方式

    获得spring里注册Bean的四种方法,特别是第三种方法,简单: 一:方法一(多在struts框架中)继承BaseDispatchAction  import com.mas.wawacommuni ...

  5. C#-数据库访问技术 ado.net——创建 数据库连接类 与 数据库操作方法 以及简单的数据的添加、删除、修改、查看

    数据库访问技术 ado.net 将数据库中的数据,提取到内存中,展示给用户看还可以将内存中的数据写入数据库中去 并不是唯一的数据库访问技术,但是它是最底层的数据库访问技术 1.创建数据库,并设置主外键 ...

  6. 美化select下拉框

    直接上干货: 需要的材料: change_select.js (文末会给出下载地址) 使用方法: 1.调用方法:<script type="text/javascript" ...

  7. Java 学习之路 之 泛型方法

    前面介绍了在定义类.接口时可以使用类型形参,在该类的方法定义和 Field 定义.接口的方法定义中,这些类型形参可被当成普通类型来用.在另外一些情况下,我们定义类.接口时没有使用类型形参,但定义方法时 ...

  8. Paths(转载)

    Paths中的几个重要元素 Points void CGContextMoveToPoint ( CGContextRef c, CGFloat x, CGFloat y ); 指定一个点成为curr ...

  9. oracle触发器调用java程序

    1.创建java程序:接收存储过程传递的参数,发送socket通信. create or replace and compilejava source named jym as import java ...

  10. Python 编辑器 tips

    1.  IDLE界面美化 注意IDLE是可以设置语法高亮的:(美化参考 http://www.linuxidc.com/Linux/2012-07/66129.htm) windows 用户,直接打开 ...