`
yipsilon
  • 浏览: 244733 次
  • 性别: Icon_minigender_1
  • 来自: 大连
社区版块
存档分类
最新评论

只有一个文件的ORM工具包:CMSPAD Object!

阅读更多
前段时间我们在项目选型中选择了EZPDO作为ORM工具,但其运行效率之低确实也让我们汗颜。于是,我们开设了一个新的项目组专门来为CMSPAD研发ORM工具包,目的是提供一个更简化的类ActiveRecord模式的ORM工具,命名为“CMSPAD Object!”。

目前,它已经可以做很多事情了,下面我来说说CMSPAD Object!的一些特性:

1. 更简化的对象配置:直接在PHP对象的property中进行定义映射信息。
class BankObject extends CmspadObject{
  public $id = array(
    'column' => 'b_id',
    'type' => 'integer',
    'key' => true
  );

  public $name = array(
    'column' => 'b_name',
    'type' => 'string',
    'null' => false
  );

  public $recommend = array(
    'column' => 'b_recommend',
    'type' => 'integer'
  );

  public function __construct(){
    CmspadObject::bind($this, 'cmspad_bank_info');
  }
}

上面的代码就是定义简单的关系映射信息,构造函数里的代码是把当前对象添加到对象注册表中与数据表关联。如果您不想在构造方法中绑定数据表,可以在其他地方使用下面的代码来实现同样功能:
CmspadObject::bind('BankObject', 'cmspad_bank_info');

好了,这两步已经做完了,下面可以开始使用该对象了:
$bankObj = new BankObject();
$banks1 = $bankObj->findAll(); //查找所有的银行, 返回银行对象的数组
$bank1 = $bankObj->find("{name} = '招商银行'"); // 查找名字为“招商银行”的银行
$banks2 = $bankObj->findAllByRecommend(5); // 查找所有推荐级别为5的银行
$bank2 = $bankObj->findById(1); // 查找ID为1的银行
$bankName = $bank1->getName(); // 获得bank1的名称字段,该字段已在映射中定义
... ...

至此,简单的数据表映射配置完成了。下面看看更高级的特性...

2. 关系映射进阶:当前实现,支持一对一、一对多关系,并支持延迟加载技术。
class BankObject extends CmspadObject{
  public $id = array(
    'column' => 'b_id',
    'type' => 'integer',
    'key' => true
  );

  public $name = array(
    'column' => 'b_name',
    'type' => 'string',
    'null' => false
  );

  public $cards = array{
    'column' => 'b_id',
    'type' => 'BankCardObject.bank',
    'relation' => 'many'
  }
}
class BankCardObject extends CmspadObject{
  public $id = array(
    'column' => 'bc_id',
    'type' => 'integer',
    'key' => true
  );

  public $name = array(
    'column' => 'bc_name',
    'type' => 'string',
    'null' => false
  );

  public $bank = array(
    'column' => 'bc_bank',
    'type' => 'BankObject',
    'relation' => 'one',
    'lazy' => true
  );
}

上面的代码包含了一对一、一对多和延迟加载的配置信息:一家银行中可以发行多个银行卡,而每个银行卡只能对应一家银行。
当调用 $bankObj->getCards() 方法时,返回的是一个 BankCardObject 类型的对象数组,由于 BankObject.cards 属性没有设置懒加载标记,每次使用findXXX查询时都会一次性载入。而 BankCardObject.bank 属性设置了懒加载标记,只有当调用 $bankCardObj->getBank() 方法时,才会加载 BankObject 对象。

3. 更高级的OQL查询语言:CMSPAD Object!提供了一个更强大的查询语言机制 - OOQL,类似于Hibernate的HQL。
$bankObj->query("FROM {BankObject} WHERE {BankObject.id} > 10 LIMIT 2,10");

值得注意的是,跟HQL一样,由于CMSPAD的Database库本身支持多种数据库(Oracle、MySQL、MSSql等),因此OOQL的LIMIT也是跨数据库的,而不仅仅作用在MySQL上。

如同其他子项目差不多,该项目目前是个内部评估版,待到我们把所有需要实现的特性目标制定好后,该项目将在PHP领域上寻求高效映射的平衡点,为提高大家的开发效率和程序的运行效率而努力。:)
分享到:
评论

相关推荐

    org.springframework.orm.hibernate4.HibernateOptimisticLockingFailureException

    标题中的"org.springframework.orm.hibernate4.HibernateOptimisticLockingFailureException"是一个具体的异常类型,源自Spring框架的Hibernate4模块。这个异常通常在乐观锁(Optimistic Locking)机制失败时抛出,...

    SqlSugar ORM工具箱2.2.7z

    综上所述,"SqlSugar ORM工具箱2.2.7z"提供的这些组件和库,构建了一个强大的ORM解决方案,支持多种数据库系统,包括SQLite、Oracle、PostgreSQL、MySQL和SQL Server,并且集成了Entity Framework的功能。...

    一款orm.net工具

    而`chm`文件则可能是一个帮助文档,包含工具的使用指南、API参考、示例代码等内容,帮助用户更好地理解和使用这款ORM工具。 学习和掌握ORM工具是现代.NET开发中的重要技能之一,它能提升开发效率,降低维护成本,...

    .NET ORM开发框架:fohu.EntitySharp

    在.NET开发环境中,ORM(Object-Relational Mapping)框架已经成为处理数据库操作的重要工具。ORM框架能够将数据库表映射为对象,从而简化了数据库交互,减少了对SQL语句的直接依赖。fohu.EntitySharp就是这样一款轻...

    K-ORM 自定义ORM工具

    本文将详细探讨一个名为“K-ORM”的自定义ORM工具,该工具基于JDBC和Java反射机制实现,旨在提供简单易用的数据操作接口。 首先,我们要理解JDBC(Java Database Connectivity)在其中的角色。JDBC是Java平台上的...

    针对自己的框架 写的 orm自动工具

    在本主题中,我们讨论的是一个自定义的 ORM 工具,它专为作者自己的框架设计,旨在提高开发效率和代码的可维护性。 【描述】:虽然描述为空,但根据“博文链接:https://mojianpo.iteye.com/blog/1179698”可以推测...

    ORM实验(超级详细!)(期末复习很管用!!!).zip

    3. **MyBatis框架详解**:MyBatis是一个轻量级的ORM框架,强调SQL的灵活性。重点学习MyBatis的配置文件、Mapper接口、XML配置文件的编写,以及如何通过注解方式来实现映射。 4. **MyBatis的CRUD操作**:掌握在...

    很好用ORM工具

    在提供的压缩文件列表中,我们看到了`FluentDataDB.accdb`,这是一个Access数据库文件,可能包含了FluentData用于测试的数据模型和样本数据。`FluentData.IntegrationTests`目录下的文件表明,这个项目包含了一套...

    orm 映射工具

    5. `Solution`:这可能是另一个解决方案文件或者一个代码目录,与`Solution.cst`类似,用于组织项目结构。 总的来说,ORM工具如NHibernate极大地简化了数据库操作,通过映射和反射技术,实现了对象和关系数据间的...

    ORM_数据持久层_生成工具

    ORM(Object-Relational Mapping,对象关系映射)是一种编程技术,用于将关系数据库的数据映射到对象上,使得开发者可以使用面向对象的方式来操作数据库,而无需关心底层SQL语句的编写。在IT行业中,ORM工具极大地...

    自己开发了一个小型ORM项目

    在你开发的小型ORM项目中,包含了一个代码生成工具,这通常是为了简化开发过程,自动生成与数据库表结构对应的实体类、数据访问接口以及实现。通过这种方式,开发者只需要关注业务逻辑,而无需手动编写繁琐的数据库...

    dbVisitor 是一个数据库 ORM 工具

    dbVisitor 是一个数据库 ORM 工具。提供对象映射、丰富的类型处理、动态SQL、存储过程、内置分页方言20+、 支持嵌套事务、多数据源、条件构造器、INSERT 策略、多语句/多结果。兼容 Spring 及 MyBatis 用法。 它不...

    数据库访问轻型ORM工具

    总结来说,轻型ORM工具是现代软件开发中一个重要的辅助工具,尤其适合于需要快速开发和迭代的互联网项目。"DbExtension"这样的轻型ORM库可以帮助开发者更高效地管理数据库操作,提高开发速度,同时保持代码的清晰性...

    iOS orm工具

    从压缩包子文件的文件名称“HezDBHelper”来看,这可能是一个名为"Hez"的数据库帮助器类库,专门用于iOS平台的ORM操作。它可能包含了数据库的连接管理、模型类与数据库表的映射、CRUD操作(创建、读取、更新、删除)...

    ORM 工具源码面向对象数据库生成工具

    LLBLGen_v1.2_Final_Src这个压缩包文件包含的是LLBLGen 1.2版本的最终源码,这为我们提供了一个难得的学习机会,去探究早期ORM工具的设计和实现。通过阅读源码,我们可以了解到以下几个关键知识点: 1. **实体类...

    hsweb-easy-orm, 简单的orm工具,为动态表单而生.zip

    HSWeb-Easy-ORM 是一个开源的简单对象关系映射(ORM)工具,设计初衷是为了简化动态表单的处理。ORM 工具的核心作用在于桥接数据库与编程语言,允许开发者通过面向对象的方式操作数据库,避免了直接编写 SQL 语句的...

    Aestate Framework 是一款基于Python语言开发的ORM框架,为Python提供数据库多样化操作的ORM工具包

    Aestate Framework是一款专为Python设计的ORM(Object-Relational Mapping)...对于初学者来说,Aestate Framework是一个不错的学习ORM框架的起点,而对于有经验的开发者,它则提供了一个高效、灵活的数据库操作工具。

    asyncorm:完全异步的ORM受Django启发

    AsyncORM是一个完全异步的受梦幻般的 Orm的启发 AsyncORM当前仅支持postgres,但其开发目的是为了“轻松”插入许多不同的数据库接口。 它旨在与任何异步库一起使用,但牢记 。 去做 为了将asyncOrm释放为可用于...

    Dos.ORM Demo

    轻量级,只有一个dll文件(不到200KB),相比于EF,NHibernate这些重量级的ORM框架,实在是太小。  3.支持各种不同主流数据库,例如:SQL Server,MySql,Oracle,Sqlite,Access等等。  4.高性能,接近手写sql  5...

Global site tag (gtag.js) - Google Analytics