轻量级ORMPetaPoco及改进

摘要:
PetaPoco将PetaPoko描述为一个小型、快速、单文件的微型ORM,可以在NET和Mono平台上运行。与NHibernate和EntityFramework相比,PetaPoco以以下几点吸引了我:1.轻量级、高性能;2.可以同时在.net和mono平台上运行;3.支持多个数据库,并根据提供的规范编写和组装SQL

      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.      下面,主要分享一下我对它的一些小改造
  8.    

   PetaPocoRepository 仓储基类 

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

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

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

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

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

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

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

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

    OK,直接上图:

    SingleDbFactoryimage

      SingleRepository<T>image

   使用

     示例环境:

        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. 仓储类      imageimage

      5. 类图

image

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

MySql / SqlServer 多种数据库的支持

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

image

需要探讨的问题

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

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

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

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

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

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

免责声明:文章转载自《轻量级ORMPetaPoco及改进》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇js实现html转pdf+html2canvas.js截图不全的问题【原创】Spring连接、事务代码分析下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

在SpringBoot中使用flyway进行数据库版本管理

本文大纲 flyway是什么 能帮助我们解决什么问题 springboot环境下使用flyway flyway的工作原理 一、flyway是什么 Flyway是一个开源的数据库版本管理工具,并且极力主张“约定大于配置”,简单、专注、强大。可以使用SQL完成数据同步,或者基于特定数据库的语法(例如PL / SQL,T-SQL等)或Java代码(适用于高...

centos7搭建DVWA环境

///首先先下载好dvwa这个压缩包,去晚上搜一下就有了,话不多说,开始干活 第一步: #yum install -y mariadb* php* httpd安装好数据库,php和apache 第二步: 然后将下载好的DVWA-master.zip解压#unzip DVWA-master.zip //解压 #mv DVWA-master.zip DVWA...

Access数据库 字段值 字符替换

两种方法: (一)Access数据库内部使用方法 Update 表 SET 字段=replace(字段,"原字符","替换字符") 示例: 假设表为biao、字段为content、原字符为xiazai.jb51.net、替换字符为down1.jb51.net, 那么相应的SQL语句如下:Update biao SET content=replace(co...

在linux系统下检查postgresql数据库安装,登录数据库及简单的查看数据库

1. 检查Linux系统是否安装数据库 首先查看自己的系统是否安装了postgresql数据库命令如下:rpm -qa | grep postgresql 如果没有显示查询结果(如下图所示)说明就未安装postgresql数据库 2. 登录数据库 输入命令 su postgres 然后在输入命令psql,结果如入所示 这时相当于系统用户postgres...

db2 reorg详解

reorgchk,检查table index 是否需要重组。reorg 重组,重新放置数据位置。runstats 统计信息,可以优化查询器 一个完整的日常维护规范可以帮助 DBA 理顺每天需要的操作,以便更好的监控和维护数据库,保证数据库的正常、安全、高效运行,防止一些错误重复发生。 由于DB2使用CBO作为数据库的优化器,数据库对象的状态信息对数据库使用...

sqlmap基础教程

sqlmap是一款非常强大的开源sql自动化注入工具,可以用来检测和利用sql注入漏洞。它由Python语言开发而成,因此运行需要安装python环境。 python环境安装教程:http://jingyan.baidu.com/album/c910274be14d64cd361d2dd8.html?picindex=2 注意:sqlmap只是用来检测和利...