轻量级ORM-PetaPoco及改进

作者:帮助您   发布:2013-04-26 06:03   分类:软件综合问题   阅读:371次   评论关闭  
 

PetaPoco描述

PetaPoco是一个微小的,快速的,单个文件的微型ORM,可以运行在.NET和Mono平台上。相对于NHibernate与Entity Framework,PetaPoco有以下几点非常吸引我:

  1. 1. 轻量级,高性能;
  2. 2. 可同时运行在.net与mono平台上;
  3. 3. 支持多种数据库,且按其提供的规范编写组装SQL,切换数据库时,基本上不需要修改代码;
  4. 4. SqlBuilder高效快捷方便;
  5. PetaPoco地址:http://www.toptensoftware.com/petapoco/
  6. 如何使用PetaPoco,PetaPoco有非常详细的使用指南,园子里面也有同学翻译了:传送门
  7. 下面,主要分享一下我对它的一些小改造

PetaPocoRepository 仓储基类

  1. PetaPocoRepository主要通过一个泛型仓储基类来封装PetaPoco的大多数数据操作。简化业务对象仓储操作类的开发。
  2. 主要有以下操作:

Add,Delete,Update,Save,FirstOrDefault(获取一条),Query(获取列表),PagedList(获取分页)等。

  1. 代码片段:      
  2. 在相对较为复杂的业务系统中,可能存在多个数据库,例如:UserDB,ProductDB,OrderDB等。且存在UserDB数据量较大,需要上Oracle数据库,而其他数据库有可能是SqlServer或MySql;
  3. 即一个业务系统中,存在多个数据库,多种数据库。
  4. 面对这样的业务系统时,我们需要对数据层进行较好地封装,而PetaPoco的Sql Builder无缝兼容多种数据库能很好地解决异构数据库的问题。因此,我们只需要解决多个数据库带来的编码困难。

SingleRepository 单个数据库模式的仓储基类

系统中存在多个数据库时,如果我们使用SqlHelper类似的组件来进行编码时,可能不是很优雅,类似于:     

其实,我们可以通过封装一个基类,通过某个特性来说明此业务对象仓储操作类对应的是哪个数据库。它有以下需求:

1. 最好能继承PetaPocoRepository,得到其所有通用性的数据操作方法;

2. 特性来描述该对象操作的是哪个数据库;

OK,直接上图:

SingleDbFactory

SingleRepository<T>

使用

示例环境:

1. 存在2个数据库:TestDB(SqlServer),Test(MySql);

2. TestDB(SqlServer)中存在2个表UserInfo,ProductId,Test(MySql)中存在表UserInfo

3. 数据库连接字符串

<add name=”SqlServerDB” connectionString=”Server=.\SqlExpress;Database=TestDB;Integrated Security=SSPI;” providerName=”System.Data.SqlClient“/>         <add name=”MySqlDB” connectionString=”Server=127.0.0.1;Database=Test;Uid=root;Pwd=123456;” providerName=”MySql.Data.MySqlClient“/>

4. 仓储类     

5. 类图

通过SingleDbFactory特性的描述,即可较为优雅地实现数据操作类对应不同数据库。

MySql / SqlServer 多种数据库的支持

上面的示例中,TestDB(SqlServer)及Test(MySql)中都存在表UserInfo。当我们从SqlServer切换至MySql时,只需要UserInfoRepository中的SQL语句使用SqlBuilder类来进行规范的组装,完全可以无缝兼容。(只需要修改SingleDbFactory即可,在本文最后会附上示例代码。)

需要探讨的问题

1. 当某个业务对象在一个数据库内进行表水平拆分时,组件需要如何应对。这个想了很久,最开始,我也想通过一个SingleSharddingRepository来实现。碰到了一些困难,如:

Shardding时的规则多样化,怎样通过代码注入的方式来定义规则;         

                    大量使用反射或AOP时,性能会不会有影响;

2. 当某个业务对象进行数据库级别的水平拆分时,组件需要如何应对。

非常希望园子里的高手给出较好的建议

DEMO下载地址:http://files.cnblogs.com/bagegejin/PetaPocoDemo.rar

原创文章,转载请注明: 转载自帮助您

本文链接地址: 轻量级ORM-PetaPoco及改进

[转载]ORM-PetaPoco 小型ORM框架的更多相关文章

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

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

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

    说好的给园子里的朋友们录制与<ASP.NET MVC 使用 Petapoco 微型ORM框架+NpgSql驱动连接 PostgreSQL数据库> 这篇博客相对应的视频,由于一个月一来没有时 ...

  3. Mini ORM——PetaPoco笔记

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

  4. Dapper小型ORM的使用(随便吐槽下公司)

    近来公司又有新项目要做,之前做项目用过蛮多ORM,包括ef,NetTiers,ServiceStack.OrmLite等ROM,每种ORM都有一定的坑(或者说是使用者的问题吧~~).用来用去都觉的有一 ...

  5. 轻量级ORM——PetaPoco

    近乎产品的数据访问是基于轻量级ORM——PetaPoco,哪怕是最新的5.2版本也是基于PetaPoco. 产品源码下载地址:http://www.jinhusns.com/Products/Down ...

  6. 手撸ORM浅谈ORM框架之基础篇

    好奇害死猫 一直觉得ORM框架好用.功能强大集众多优点于一身,当然ORM并非完美无缺,任何事物优缺点并存!我曾一度认为以为使用了ORM框架根本不需要关注Sql语句如何执行的,更不用关心优化的问题!!! ...

  7. 手撸ORM浅谈ORM框架之Add篇

    快速传送 手撸ORM浅谈ORM框架之基础篇 手撸ORM浅谈ORM框架之Add篇 手撸ORM浅谈ORM框架之Update篇 手撸ORM浅谈ORM框架之Delete篇 手撸ORM浅谈ORM框架之Query ...

  8. 手撸ORM浅谈ORM框架之Update篇

    快速传送 手撸ORM浅谈ORM框架之基础篇 手撸ORM浅谈ORM框架之Add篇 手撸ORM浅谈ORM框架之Update篇 手撸ORM浅谈ORM框架之Delete篇 手撸ORM浅谈ORM框架之Query ...

  9. 手撸ORM浅谈ORM框架之Delete篇

    快速传送 手撸ORM浅谈ORM框架之基础篇 手撸ORM浅谈ORM框架之Add篇 手撸ORM浅谈ORM框架之Update篇 手撸ORM浅谈ORM框架之Delete篇 手撸ORM浅谈ORM框架之Query ...

  10. 手撸ORM浅谈ORM框架之Query篇

    快速传送 手撸ORM浅谈ORM框架之基础篇 手撸ORM浅谈ORM框架之Add篇 手撸ORM浅谈ORM框架之Update篇 手撸ORM浅谈ORM框架之Delete篇 手撸ORM浅谈ORM框架之Query ...

随机推荐

  1. MYSQL SHOW 用法

    1.SHOW CHARACTER SET 显示所有可用的字符集 mysql> SHOW CHARACTER SET LIKE 'utf8'; +---------+--------------- ...

  2. [转]史上最最最详细的手写Promise教程

    我们工作中免不了运用promise用来解决异步回调问题.平时用的很多库或者插件都运用了promise 例如axios.fetch等等.但是你知道promise是咋写出来的呢? 别怕-这里有本promi ...

  3. spark 执行报错 java.io.EOFException: Premature EOF from inputStream

    使用spark2.4跟spark2.3 做替代公司现有的hive选项. 跑个别任务spark有以下错误 java.io.EOFException: Premature EOF from inputSt ...

  4. 什么是阿里云CDN

    阿里云内容分发网络(Content Delivery Network,简称CDN)是建立并覆盖在承载网之上,由分布在不同区域的边缘节点服务器群组成的分布式网络.阿里云CDN分担源站压力,避免网络拥塞, ...

  5. 【第一季】CH05_FPGA设计Verilog基础(二)Enter a post title

    [第一季]CH05_FPGA设计Verilog基础(二) 5.1状态机设计 状态机是许多数字系统的核心部件,是一类重要的时序逻辑电路.通常包括三个部分:一是下一个状态的逻辑电路,二是存储状态机当前状态 ...

  6. MySQL SQL Training

    源于知乎:50道SQL练习题 一.表数据 1.学生表——Student ),Sname ),Sage )); ' , '赵雷' , '1990-01-01' , '男'); ' , '钱电' , '1 ...

  7. 怎样通过html标签名获取元素节点集合

    方法1. 使用document.querySelectorAll(); 方法2. 使用document.getElementsByTagName(); document.querySelectorAl ...

  8. Rikka with Competition hdu 6095

    签到题目,排序然后按序清理掉一定会输的结果就可以. ac代码: #include <iostream> #include <cstdio> #include <cstri ...

  9. 又谈F分布

    今天看到一篇不错的博文,有感,记录下来,相对来说讲到了本质,也很容易理解.https://www.cnblogs.com/think-and-do/p/6509239.html 首先,老生常谈,还是那 ...

  10. Centos7 部署.net core2.1 详细步骤

    安装dotnet sdk(添加产品秘钥与yum源) 添加yum源:sudo rpm -Uvh https://packages.microsoft.com/config/rhel/7/packages ...