Ruby DataMapper

DataMapper是ruby的另外一个ORM库(之前了解过Active Record)。DataMapper相对较新,完全用ruby写的。安装比较简单:

gem install data_mapper

我们打算使用SQLite,所以需要安装它的适配器:

gem install dm-sqlite-adapter

同样来自《Jump start sinatra》的例子,假设我们创建一个歌单,编辑song.rb文件,输入如下内容:

require 'dm-core'
require 'dm-migrations'

DataMapper.setup(:default, "sqlite3://#{Dir.pwd}/development.db")

class Song
 include DataMapper::Resource
 property :id, Serial
 property :title, String
 property :lyrics, Text
 property :length, Integer
 property :released_on, Date
end

DataMapper.finalize

上述设置development.db这个SQLite数据库,建立了一个名为Song的类,这个类随后会被映射成数据库的表。

在Song类里,include了DataMapper::Resource模块,引入相应方法。property这个方法定义对象的属性(也就是表的字段类型),例如有如下属性:

Serial 自增的ID(主键)
String 文本串,最大256字符
Text 长文本片段
Integer 整数
Float 浮点数
Boolean 布尔值
DateTime 日期时间

DataMapper.finalize方法是必须的,放在所有使用DataMapper的类之后,用来检查完整性。

现在编写另一个脚本load.rb,放在跟song.rb同一目录下,输入:

require './song'

Song.auto_migrate!

运行这个脚本,就创建了development.db这个SQLite数据库文件。
请注意这个方法每次执行会drop掉之前存在的数据(如果有)。

在命令行运行sqlite3 development.db,登入后运行如下命令:

sqlite> .schema songs
CREATE TABLE "songs" ("id" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, "title" VARCHAR(50), "lyrics" TEXT, "length" INTEGER, "released_on" DATE);

可以查看表结构和属性。

下面开始操作数据库。数据库有4种基本操作行为CRUD,代表创建、读取、更新、删除。在DataMapper里执行这些操作很容易。编辑另一个脚本例如crud.rb,输入:

song = Song.new
song.title = "My Way"
song.lyrics = "And now the end is near ... "
song.length = 435
song.released_on = Date.new(1969)
song.save

执行这个脚本2次,在SQLite数据库里看到:

sqlite> select * from songs;
1|My Way|And now the end is near ... |435|1969-01-01
2|My Way|And now the end is near ... |435|1969-01-01

现在读取数据:

puts Song.count # 打印记录数
records = Song.all # 所有记录对象以数组返回
puts records.first.title # 得到第一个记录的title字段的内容

上面这句也可以直接调用类方法:

puts Song.first.title

如果想查找一首title为My Way的歌,使用如下方法:

myway = Song.first(title: "My Way")

得到这首歌的长度(length字段):

myway.length

修改它的长度:

myway.update(length: 275)

上面将这首歌的length修改为275.

删除记录调用destroy方法,例如删除最后一行:

Song.last.destroy

删除length为65的行:

Song.first(length: 65).destroy

基本的CRUD就介绍到这里,更详细用法可以参考Ruby DataMapper官网

此条目发表在Common分类目录,贴了, 标签。将固定链接加入收藏夹。