install and simple usage #02
    こんにちわ!nekokakです!
二日目は早速DBIx::Skinnyを使ってみましょう。
install
まずはinstallしないと何もできませんね。
という事でまずはお使いの環境にDBIx::Skinnyをインストールします。
installはCPANからも出来ますし、githubからも可能です。
CPAN: http://search.cpan.org/dist/DBIx-Skinny/
$ cpan DBIx::Skinny
github: http://github.com/nekokak/p5-dbix-skinny
$ git clone git://github.com/nekokak/p5-dbix-skinny.git $ cd p5-dbix-skinny $ perl Makefile.PL $ make install
これだけです。
DBIx::Skinnyはなるべく依存モジュールが増えないように作っています。
最近Mooseとかが流行ってますが、全く必要ないのでつかっていません:)
installで躓くことはないとは思いますが、なにかあれば遠慮なく聞いてください。
simple usage
installが済んだら実際に使ってみましょう。
とりあえず細かいことを気にせずに雰囲気をつかんでもらえるといいと思います。
今回のサンプルコードは
http://github.com/nekokak/p5-dbix-skinny-sample/tree/master/advent2009-demo/02/
に用意してありますので参考にどうぞ。
まず、試すためのテーブルを用意します。
create table user (
    id       INTEGER PRIMARY KEY AUTOINCREMENT,
    name     TEXT    NOT NULL,
    birth_on DATE
);
用意したuserテーブルを定義するクラスを作成します。
package Proj::DB;
use DBIx::Skinny;
1;
package Proj::DB::Schema;
use DBIx::Skinny::Schema;
install_table user => schema {
    pk 'id';
    columns qw/id name birth_on/;
};
1;
次に定義したuserテーブルに対してinsert/update/select/deleteを実行してみます。
use strict;
use warnings;
use Proj::DB;
# 実験なので実際にファイルをつくらずメモリ上で試す
# DBコネクションの作成
my $db = Proj::DB->new({dsn => 'dbi:SQLite:'});
# 実験用テーブルを作成
$db->do(q{
    create table user (
        id       INTEGER PRIMARY KEY AUTOINCREMENT,
        name     TEXT    NOT NULL,
        birth_on DATE
    )
});
# INSERT INTO user (name), VALUES ('nekokak');
# を実行
my $row = $db->create('user',{name => 'nekokak'});
print $row->id, "\n";   # print 1
print $row->name, "\n"; # print 'nekokak'
# UPDATE user set name = 'yappo' WHERE id = 1;
# を実行
# $row->update({name => 'yappo'});でも同じ
$db->update('user',{name => 'yappo'}, {id => $row->id});
# SELECT * FROM user WHERE name = 'nekokak'
# を実行
$row = $db->search('user', {name => 'yappo'})->first;
print $row->id, "\n";   # print 1
print $row->name, "\n"; # print 'yappo'
# SELECT * FROM user WHERE id = 1 limit 1;
# を実行
$row = $db->single('user', {id => 1});
print $row->id, "\n";   # print 1
print $row->name, "\n"; # print 'yappo'
# DELETE FROM user WHERE id = 1;
# を実行
$db->delete('user',{id =>1});
このようにDBICでつかってたような書き方でDBIx::Skinnyを動かす事も可能です。
細かいインタフェースは異なるのでまるっきり一緒というわけではありませんし、
DBICでは存在するfindメソッドがDBIx::Skinnyには無かったり、同じメソッドが全てある訳ではありません。
逆にDBICにはないメソッドがDBIx::Skinnyにあったりもします。
明日はSchemaの定義について細かく見ていきましょう。
have a nice skinny days!:)