Chinaunix首页 | 论坛 | 博客
  • 博客访问: 16500851
  • 博文数量: 5645
  • 博客积分: 9880
  • 博客等级: 中将
  • 技术积分: 68081
  • 用 户 组: 普通用户
  • 注册时间: 2008-04-28 13:35
文章分类

全部博文(5645)

文章存档

2008年(5645)

我的朋友

分类:

2008-04-28 21:07:34

下载本文示例代码
  用Ruby on Rails来编写数据库管理系统是非常快速的。Ruby on Rails之所以有如此高的生产率,不光是Ruby的语法灵活,而这一切在很大程序上是拜活动记录(Active Record)所赐。那么什么是活动记录呢?如果用一句话来解释,那就是一个可以将数据映射成对象的框架(这有些类似于Hibernate)。也许你会说:"这有什么,现在这种框架多得是,Hibernate不是也非常强大吗?",但如果你用了Ruby on Rails(以下简称为RoR),你就会发现它和其它的同类框架是多么的不同,它比其它框架更容易使用,编程效率也更高,据官方说,使用RoR比使用Java和Hibernate的生产率高10倍(也许并没有这么夸张,但活动记录的数据映射的确比其它框架的数据映射的生产率高一些)。   无论是桌面程序还是基于Web的程序,数据处理始终是它们的核心。数据可以使用不同的技术进行描述和处理。  这些数据处理技术之一就是对象关系映射技术,或者简称为ORM技术。ORM技术将数据库中的数据表或视图映射成了面象对象的类。而ORM框架的作用就是架起数据和对象之间的桥梁,以及为桥梁两端的数据和对象提供相应的服务。由于ORM框架自成一体,因此,开发人员的主要工作就是将ORM框架和其它的框架(如web框架)连接起来,从而使它们可以协同工作。  在ORM框架家族中,RoR很特别。RoR的核心是ORM框架,而这个框架在RoR中是以活动记录的形式表现的。在本文中,我们将关注活动记录的一些基本概念和她最诱人的地方:快速连接和操作数据库。本文的第一部分将讨论活动记录的基础知识。第二部分将一步步地指导读者如何使用活动记录快速地连接和操作数据库。在第三部分中我们以一个完整的例子来讨论如何将活动记录和ActionController以及ActionView一起使用。以上是本文所讨论的主要内容。  什么是活动记录  活动记录是一个ORM框架,也可以看做是和RoR一起发布的一个数据库映射层。活动记录是RoR的核心。活动记录是一个ORM层,它提供了以下的映射服务:  1. 将表映射成类  2. 将字段映射成类的属性  3. 将表中的主键映射成Ids属性  4. 将行映射成对象  活动记录和其它的ORM框架最大的区别是它们的映射方式不同。大多数流行的ORM框架(如Hibernate)是以XML作为映射容器。而活动记录采用的是更容易使用的"约定"方式进行映射。下面让我们来看看活动记录是如何做的。  将表映射成类  为了将表映射成类,Ruby类必须从ActiveRecord::Base继承。这个Base类在ActiveRecord包中。那么一个类从ActiveRecord::Base继承后发生了什么呢?实际上这个子类已经和一个数据表相对应了。也许大家看到这有一些迷糊,我除了写一个从ActiveRecord::Base继承的空类什么代码都没写,怎么就映射完了。其实这要依靠活动记录的命名约定。活动记录假设一个类名的复数形式(英文类名)就是表名。如果类名中有多个大写字母,那么活动记录就假设表名就是这些单词中间用下划线隔开后连在一起,请看下面的例子。 类名 表名 Record Records LineItem Line_Items Datum Data  以上所描述的是活动记录的默认的映射行为,我们也可以为活动记录定义自已的行为。要改变这些默认的行为,可以按以下步骤做:  1.将全局变量ActiveRecord::Base. pluralize_table_names设为false。这个变量被定义在config目录中的environment.rb中。  2.可以通过set_table_name改变默认的表名。例如,如果将表Orders映射成类Order的代码如下: class Order < ActiveRecord::Baseend  但如果这个类名要映射成MyOrder,那么它的实现代码如下: class Order <ActiveRecord::Baseset_table_name "MyOrder"end  接下来让我们看看如何将字段映射成属性。  将字段转换为属性  在一个数据表被映射成类后,表中的字段就将自动映射成类的属性。这是因为活动记录是在程序运行时动态地将表中的字段映射成类的属性。事实上,在从ActiveRecord::Base的类自动将表中的字段包装在了类中。下表将描述SQL数据类型将被映射成Ruby的哪些数据类型: SQL数据类型 Ruby数据类型(类) int, integer Fixnum decimal, numeric Float interval, date Date clob, blob, text String float, double float chat, varchar, string String datetime, time Time  下面让我们来讨论主键的映射。  将主键映射成Ids  假设有一个Orders表,它的主键是Order_Id。现在让我们看看这个Order_Id字段,这个字段由16个数字组成,其中包括Item id,User Id等。在以后如果Order_id变成20位数字,最后4位数字是一个RFID代码,那么所有依赖这个Order_id字段的列都将发生变化。这些工作量是非常大的,即使这个应用程序并不大。然而活动记录确能自动做到这些。自动映射可按如下代码去做: class Order < ActiveRecord::Baseset_primary_key "orderId"end  将记录映射成对象  无论什么时候,映射类的查询方法被执行时,在内部都会调用相应的SQL语句来查询数据库,并且将查询结果返回,这些返回的结果最终以对象的形式表现。列值将成为对象的属性。返回的每一行将被映射成一个对象。例如以下代码将返回Id等于100的Order对象: an_order = Order.find(100)  上面的代码演示了如何得到特定的记录。接下来让我们看一下使用活动记录建立相应的操作的步骤。共3页。 1 2 3 8 :   用Ruby on Rails来编写数据库管理系统是非常快速的。Ruby on Rails之所以有如此高的生产率,不光是Ruby的语法灵活,而这一切在很大程序上是拜活动记录(Active Record)所赐。那么什么是活动记录呢?如果用一句话来解释,那就是一个可以将数据映射成对象的框架(这有些类似于Hibernate)。也许你会说:"这有什么,现在这种框架多得是,Hibernate不是也非常强大吗?",但如果你用了Ruby on Rails(以下简称为RoR),你就会发现它和其它的同类框架是多么的不同,它比其它框架更容易使用,编程效率也更高,据官方说,使用RoR比使用Java和Hibernate的生产率高10倍(也许并没有这么夸张,但活动记录的数据映射的确比其它框架的数据映射的生产率高一些)。   无论是桌面程序还是基于Web的程序,数据处理始终是它们的核心。数据可以使用不同的技术进行描述和处理。  这些数据处理技术之一就是对象关系映射技术,或者简称为ORM技术。ORM技术将数据库中的数据表或视图映射成了面象对象的类。而ORM框架的作用就是架起数据和对象之间的桥梁,以及为桥梁两端的数据和对象提供相应的服务。由于ORM框架自成一体,因此,开发人员的主要工作就是将ORM框架和其它的框架(如web框架)连接起来,从而使它们可以协同工作。  在ORM框架家族中,RoR很特别。RoR的核心是ORM框架,而这个框架在RoR中是以活动记录的形式表现的。在本文中,我们将关注活动记录的一些基本概念和她最诱人的地方:快速连接和操作数据库。本文的第一部分将讨论活动记录的基础知识。第二部分将一步步地指导读者如何使用活动记录快速地连接和操作数据库。在第三部分中我们以一个完整的例子来讨论如何将活动记录和ActionController以及ActionView一起使用。以上是本文所讨论的主要内容。  什么是活动记录  活动记录是一个ORM框架,也可以看做是和RoR一起发布的一个数据库映射层。活动记录是RoR的核心。活动记录是一个ORM层,它提供了以下的映射服务:  1. 将表映射成类  2. 将字段映射成类的属性  3. 将表中的主键映射成Ids属性  4. 将行映射成对象  活动记录和其它的ORM框架最大的区别是它们的映射方式不同。大多数流行的ORM框架(如Hibernate)是以XML作为映射容器。而活动记录采用的是更容易使用的"约定"方式进行映射。下面让我们来看看活动记录是如何做的。  将表映射成类  为了将表映射成类,Ruby类必须从ActiveRecord::Base继承。这个Base类在ActiveRecord包中。那么一个类从ActiveRecord::Base继承后发生了什么呢?实际上这个子类已经和一个数据表相对应了。也许大家看到这有一些迷糊,我除了写一个从ActiveRecord::Base继承的空类什么代码都没写,怎么就映射完了。其实这要依靠活动记录的命名约定。活动记录假设一个类名的复数形式(英文类名)就是表名。如果类名中有多个大写字母,那么活动记录就假设表名就是这些单词中间用下划线隔开后连在一起,请看下面的例子。 类名 表名 Record Records LineItem Line_Items Datum Data  以上所描述的是活动记录的默认的映射行为,我们也可以为活动记录定义自已的行为。要改变这些默认的行为,可以按以下步骤做:  1.将全局变量ActiveRecord::Base. pluralize_table_names设为false。这个变量被定义在config目录中的environment.rb中。  2.可以通过set_table_name改变默认的表名。例如,如果将表Orders映射成类Order的代码如下: class Order < ActiveRecord::Baseend  但如果这个类名要映射成MyOrder,那么它的实现代码如下: class Order <ActiveRecord::Baseset_table_name "MyOrder"end  接下来让我们看看如何将字段映射成属性。  将字段转换为属性  在一个数据表被映射成类后,表中的字段就将自动映射成类的属性。这是因为活动记录是在程序运行时动态地将表中的字段映射成类的属性。事实上,在从ActiveRecord::Base的类自动将表中的字段包装在了类中。下表将描述SQL数据类型将被映射成Ruby的哪些数据类型: SQL数据类型 Ruby数据类型(类) int, integer Fixnum decimal, numeric Float interval, date Date clob, blob, text String float, double float chat, varchar, string String datetime, time Time  下面让我们来讨论主键的映射。  将主键映射成Ids  假设有一个Orders表,它的主键是Order_Id。现在让我们看看这个Order_Id字段,这个字段由16个数字组成,其中包括Item id,User Id等。在以后如果Order_id变成20位数字,最后4位数字是一个RFID代码,那么所有依赖这个Order_id字段的列都将发生变化。这些工作量是非常大的,即使这个应用程序并不大。然而活动记录确能自动做到这些。自动映射可按如下代码去做: class Order < ActiveRecord::Baseset_primary_key "orderId"end  将记录映射成对象  无论什么时候,映射类的查询方法被执行时,在内部都会调用相应的SQL语句来查询数据库,并且将查询结果返回,这些返回的结果最终以对象的形式表现。列值将成为对象的属性。返回的每一行将被映射成一个对象。例如以下代码将返回Id等于100的Order对象: an_order = Order.find(100)  上面的代码演示了如何得到特定的记录。接下来让我们看一下使用活动记录建立相应的操作的步骤。共3页。 1 2 3 8 : 下载本文示例代码


Ruby on Rails:活动记录纵览Ruby on Rails:活动记录纵览Ruby on Rails:活动记录纵览Ruby on Rails:活动记录纵览Ruby on Rails:活动记录纵览Ruby on Rails:活动记录纵览Ruby on Rails:活动记录纵览Ruby on Rails:活动记录纵览Ruby on Rails:活动记录纵览Ruby on Rails:活动记录纵览Ruby on Rails:活动记录纵览Ruby on Rails:活动记录纵览Ruby on Rails:活动记录纵览Ruby on Rails:活动记录纵览Ruby on Rails:活动记录纵览
阅读(179) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~