SlideShare a Scribd company logo
1 of 15
Download to read offline
ビギナーだから使いたいO/Rマッパー
   ~Tengを使った開発~


    Hirobanex(Akabane Hiroyuki)
   2012-06-29@Perl Beginners #3
コンテンツ



• Tengを使いたい3つの理由

• ビギナーにオススメのTengの導入方法

• 本来のO/Rマッパーの効用


                        1
Tengを使いたい3つの理由



• DBIはよくわからん

• O/Rマッパーだと開発が抜群に早くなる

• コード量が少ないし、勉強になる


                        2
生DBIはよくわからん

• コンストラクション時の設定って?

• セレクト系メソッドどれ使えばいい?

• ドキュメントが長すぎてどこ読めば?

• トランザクションって?

• 突然、コネクション切れる?
                      3
セレクト系メソッドどれ使えばいい?
        refとかarrayとかhashとか、頭がパンクします・・・


•fetchrow_arrayref     •selectrow_array
•fetchrow_array        •selectrow_arrayref
•fetchrow_hashref      •selectrow_hashref
•fetchall_arrayref     •selectall_arrayref
•fetchall_hashref      •selectall_hashref
                       •selectcol_arrayref




                                             4
O/Rマッパーだと開発が抜群に早くなる
                   複数データ群をリレーションつけて登録する場合のコード比較
                                            DBI                                                             Teng
use DBI;                                                           #Teng-0.14_05
                                                                   use DBI;
my @data_set = (                                                   use Teng;
   [26,'hiro'],                                                    use Teng::Schema::Loader;
   [27,'bane'],
);                                                                 my @data_set = (
                                                                      [26,'hiro'],
my $dbh = DBI->connect("DBI:mysql:db_name;", "root", "pass",{         [27,'bane'],
  AutoCommit => 0,                                                 );
});
                                                                   my $dbh = DBI->connect("DBI:mysql:db_name;", "root", "pass",);
for my $data (@data_set) {
  my ($age,$name) = @$data;                                        my $teng = Teng::Schema::Loader->load(
                                                                       dbh       => $dbh,
  my ($age_id) = $dbh->selectrow_array(q{                              namespace => 'MyAPP::DB',
    SELECT id FROM age WHERE age = ?                               );
  },undef,$age);                                                   $teng->load_plugin('FindOrCreate');

  unless ($age_id) {                                               my $txn = $teng->txn_scope;
    my $sth = $dbh->prepare(q{                                       for my $data (@data_set) {
      INSERT INTO age (age) VALUES ( ? )                               my ($age,$name) = @$data;
    });
    $sth->execute($age);                                               my $row = $teng->find_or_create('age',{ age => $age });

      #mysql限定                                                         $teng->insert('user', { age_id => $row->id, name => $name });
      $age_id = $dbh->last_insert_id(undef, undef, 'age', 'id');     }
  }                                                                $txn->commit;

  my $sth = $dbh->prepare(q{
    INSERT INTO user (age_id, name) VALUES (?, ?)
  });
  $sth->execute($age_id, $name);
}                                                   20行                                                               7行
$dbh->do('COMMIT');                                                                                                                    5
コード量が少ないし、勉強になる

• オーサーは日本人のnekokakさん

• 不明点は誰かに聞けばわかりそう

• 日本語情報豊富

• 挙動確認がコード量が少ないため楽

• コードをおうと、Perlの勉強になる
                       6
ビギナーにオススメのTengの導入方法
     DBIもよくわからんけど、とにかく早く使ってみたい人向け



• Tengのnew(オブジェクトの作り方)

• SELECT

• INSERT、UPDATE、DELETE

• トランザクション

                                    7
Tengのnew(オブジェクトの作り方)
                                Teng::Schema::Loaderというのを使うと楽
#Teng-0.14_05                   とりあえずメソッド化                      #Teng-0.14_05                             永続化
use strict;                                                     package MyDB;
use warnings;                                                   use strict; use warnings; use utf8;
use DBI;                                                        use DBI;
use utf8;                                                       use Teng;
use Teng;                                                       use Teng::Schema::Loader;
use Teng::Schema::Loader;
                                                                our $TENG;
sub teng {                                                      sub teng {
   my $dbh = DBI->connect("dbi:SQLite:./users.db", '', '', +{      $TENG ||= do {
     Callbacks => {                                                  my $dbh = DBI->connect("dbi:SQLite:./users.db", '', '', +{
        connected => sub {                                             Callbacks => {
           my $conn = shift;                                              connected => sub {
           $conn->do(<<EOF); #テーブルの構造をココに書く                                 my $conn = shift;
CREATE TABLE user (                                                         $conn->do(<<EOF);
   id           INTEGER PRIMARY KEY,                            CREATE TABLE user (
   user_name varchar(10),                                          id          INTEGER PRIMARY KEY,
   sex          varchar(10) default 'male',                        user_name varchar(10),
   age          INTEGER   default 20,                              sex         varchar(10) default 'male',
);                                                                 age         INTEGER   default 20,
EOF                                                             );
           return;                                              EOF
        },                                                                  return;
     },                                                                   },
     sqlite_unicode => 1,#MySQLは、mysql_enable_utf8 => 1 ,              },
   });                                                                 sqlite_unicode => 1,
                                                                     });
    my $teng = Teng::Schema::Loader->load(
      dbh       => $dbh,                                                 Teng::Schema::Loader->load(
      namespace => 'MyDB::Schema'                                           dbh     => $dbh,
    );                                                                      namespace => 'MyDB::Schema'
}                                                                        );
                                                                     }
                                                                }
                                                                1;                                                                8
SELECT
                 SQL文の書けるsearch_by_sqlメソッドを使う
                  複数行の取り出し                                    1行だけの取り出し
use MyDB;                                use MyDB;

my @users = MyDB->teng->search_by_sql(   my $row = MyDB->teng->search_by_sql(
  q{#SQL文が普通にかける                           q{ SELECT * FROM user WHERE user_name = ? },
     SELECT                                ['hirobanex']
       id, user_name                     )->first;
     FROM user
     WHERE
       sex = ? AND age > ?
  },
  ['male',20]#bind値は配列のリファレンスで設定
)->all;

#Rowオブジェクトなるものがいる
for my $row (@users) {
  #カラムはRowオブジェクトに
  #カラム名でメソッド呼び出し
  warn $row->id;
  warn $row->user_name;
}



                                                                                          9
INSERT、UPDATE、DELETE
                      SQL文の書けるdoメソッドを使う
                     INSERT                                UPDATE

use MyDB;                             MyDB->teng->do(q{
                                           UPDATE user SET
MyDB->teng->do(q{                                 user_name = ?
     INSERT INTO user (                         ,age = ?
          user_name,sex,age                 WHERE
     ) VALUES (                                    user_name = ?
          ?,?,?                       },undef,('bane','27','hirobanex'));
     );
},undef,('hirobanex','male','26'));                        DELETE
# errorハンドリングはTengのほうで
やってくれている
                                      MyDB->teng->do(q{
                                           DELETE user WHERE user_name = ?
                                      },undef,('bane'));



                                                                             10
トランザクション
                              囲うだけ

use MyDB;

my $teng = MyDB->teng;

my $txn = $teng->txn_scope;
     for my $user_name ('hiro','bane','ytnobody') {
          $teng->do(q{
               INSERT INTO user (user_name) VALUES (?);
          },umdef,$user_name );
     }
$txn->commit;




                               hachioji.pm                11
実際のO/Rマッパーの効用
       Tengを使いこなしてやれることを広げるためのキーワード
          やれること                           Teng実装

トランザクションをシンプルに書ける       DBIx::TransactionManager


突然コネクションが切られることはない      $dbh->FETCH('Active'), $dbh->pingの確認


コンストラクション設定を楽にする        ×


リファレンスとかでかっこ良く条件文を書く    SQL::Maker

インサートしたと同時にその中身とったり、    Teng::Row(Rowオブジェクト)、
便利メソッドつくる               FindOrCreate, BulkInsertなど各種プラグイン

SQL文を発行するタイミングでなんかする    inflate,deflate(triggerはない)

SELECTのIN構文になげるバインド値に
                        search_namedメソッド
配列リファレンスを使いたい
                                                               12
その他Tengリファレンス
                               cpanm Teng 0.14_05


http://perl-users.jp/articles/advent-calendar/2011/teng/

http://search.cpan.org/~nekokak/Teng-0.14_05/

http://walf443.github.com/teng-doc/


最後はソースコードも読もう




                                                           13
最後に
     YAPC::Asia2012のトークに応募しました!




興味があったら、「いいね!」などお願いしますっ!
                                  14

More Related Content

What's hot

EucalyptusのHadoopクラスタとJaqlでBasket解析をしてHiveとの違いを味わってみました
EucalyptusのHadoopクラスタとJaqlでBasket解析をしてHiveとの違いを味わってみましたEucalyptusのHadoopクラスタとJaqlでBasket解析をしてHiveとの違いを味わってみました
EucalyptusのHadoopクラスタとJaqlでBasket解析をしてHiveとの違いを味わってみました
Etsuji Nakai
 
Chiba.pm #1 lt @studio3104
Chiba.pm #1 lt @studio3104Chiba.pm #1 lt @studio3104
Chiba.pm #1 lt @studio3104
Satoshi Suzuki
 
もにかじ2 lt @studio3104
もにかじ2 lt @studio3104もにかじ2 lt @studio3104
もにかじ2 lt @studio3104
Satoshi Suzuki
 
Perlで伝統芸能
Perlで伝統芸能Perlで伝統芸能
Perlで伝統芸能
hitode909
 
はじめてのCouch db
はじめてのCouch dbはじめてのCouch db
はじめてのCouch db
Eiji Kuroda
 
負荷テストことはじめ
負荷テストことはじめ負荷テストことはじめ
負荷テストことはじめ
Kazumune Katagiri
 

What's hot (18)

Actor&stm
Actor&stmActor&stm
Actor&stm
 
EucalyptusのHadoopクラスタとJaqlでBasket解析をしてHiveとの違いを味わってみました
EucalyptusのHadoopクラスタとJaqlでBasket解析をしてHiveとの違いを味わってみましたEucalyptusのHadoopクラスタとJaqlでBasket解析をしてHiveとの違いを味わってみました
EucalyptusのHadoopクラスタとJaqlでBasket解析をしてHiveとの違いを味わってみました
 
【アシアル塾】PHPオブジェクト指向再入門・第一回クラスとオブジェクト
【アシアル塾】PHPオブジェクト指向再入門・第一回クラスとオブジェクト【アシアル塾】PHPオブジェクト指向再入門・第一回クラスとオブジェクト
【アシアル塾】PHPオブジェクト指向再入門・第一回クラスとオブジェクト
 
3時間濃縮CakePHP2.1 in PHPカンファレンス北海道2012
3時間濃縮CakePHP2.1 in PHPカンファレンス北海道20123時間濃縮CakePHP2.1 in PHPカンファレンス北海道2012
3時間濃縮CakePHP2.1 in PHPカンファレンス北海道2012
 
Yahoo!ボックスAPI Hackathon向け資料
Yahoo!ボックスAPI Hackathon向け資料Yahoo!ボックスAPI Hackathon向け資料
Yahoo!ボックスAPI Hackathon向け資料
 
Yahoo!ボックスAPI Hackday資料
Yahoo!ボックスAPI Hackday資料Yahoo!ボックスAPI Hackday資料
Yahoo!ボックスAPI Hackday資料
 
Chiba.pm #1 lt @studio3104
Chiba.pm #1 lt @studio3104Chiba.pm #1 lt @studio3104
Chiba.pm #1 lt @studio3104
 
もにかじ2 lt @studio3104
もにかじ2 lt @studio3104もにかじ2 lt @studio3104
もにかじ2 lt @studio3104
 
PHP classの教室
PHP classの教室PHP classの教室
PHP classの教室
 
WordPress のキャッシュ機構
WordPress のキャッシュ機構WordPress のキャッシュ機構
WordPress のキャッシュ機構
 
Perlで伝統芸能
Perlで伝統芸能Perlで伝統芸能
Perlで伝統芸能
 
はじめてのCouch db
はじめてのCouch dbはじめてのCouch db
はじめてのCouch db
 
Teclab3
Teclab3Teclab3
Teclab3
 
BPStudy32 CouchDB 再入門
BPStudy32 CouchDB 再入門BPStudy32 CouchDB 再入門
BPStudy32 CouchDB 再入門
 
swooleを試してみた
swooleを試してみたswooleを試してみた
swooleを試してみた
 
大ざっぱにオブジェクト指向
大ざっぱにオブジェクト指向大ざっぱにオブジェクト指向
大ざっぱにオブジェクト指向
 
負荷テストことはじめ
負荷テストことはじめ負荷テストことはじめ
負荷テストことはじめ
 
Ruby 同好会宣言
Ruby 同好会宣言Ruby 同好会宣言
Ruby 同好会宣言
 

Similar to ビギナーだから使いたいO/Rマッパー ~Tengを使った開発~

PerlとSQLのいろいろ
PerlとSQLのいろいろPerlとSQLのいろいろ
PerlとSQLのいろいろ
Takuya Tsuchida
 
Perl暦およそ10年(?)の僕がデータベースを使えるようになるまでの昔話
Perl暦およそ10年(?)の僕がデータベースを使えるようになるまでの昔話Perl暦およそ10年(?)の僕がデータベースを使えるようになるまでの昔話
Perl暦およそ10年(?)の僕がデータベースを使えるようになるまでの昔話
azuma satoshi
 
Customization of DBIC::Schema::Loader
Customization of DBIC::Schema::LoaderCustomization of DBIC::Schema::Loader
Customization of DBIC::Schema::Loader
Toru Yamaguchi
 
Cinnamon - simple deploy tool
Cinnamon - simple deploy toolCinnamon - simple deploy tool
Cinnamon - simple deploy tool
Yuki Shibazaki
 
Mojoliciousをウェブ制作現場で使ってみてる
Mojoliciousをウェブ制作現場で使ってみてるMojoliciousをウェブ制作現場で使ってみてる
Mojoliciousをウェブ制作現場で使ってみてる
jamadam
 
スマートフォン向けサービスにおけるサーバサイド設計入門
スマートフォン向けサービスにおけるサーバサイド設計入門スマートフォン向けサービスにおけるサーバサイド設計入門
スマートフォン向けサービスにおけるサーバサイド設計入門
Hisashi HATAKEYAMA
 
詳説ぺちぺち
詳説ぺちぺち詳説ぺちぺち
詳説ぺちぺち
do_aki
 
My sql casual_in_fukuoka_vol1
My sql casual_in_fukuoka_vol1My sql casual_in_fukuoka_vol1
My sql casual_in_fukuoka_vol1
Makoto Haruyama
 

Similar to ビギナーだから使いたいO/Rマッパー ~Tengを使った開発~ (20)

Web技術勉強会 第25回
Web技術勉強会 第25回Web技術勉強会 第25回
Web技術勉強会 第25回
 
PerlとSQLのいろいろ
PerlとSQLのいろいろPerlとSQLのいろいろ
PerlとSQLのいろいろ
 
Perl暦およそ10年(?)の僕がデータベースを使えるようになるまでの昔話
Perl暦およそ10年(?)の僕がデータベースを使えるようになるまでの昔話Perl暦およそ10年(?)の僕がデータベースを使えるようになるまでの昔話
Perl暦およそ10年(?)の僕がデータベースを使えるようになるまでの昔話
 
test
testtest
test
 
SecurityとValidationの奇妙な関係、あるいはDrupalはなぜValidationをしたがらないのか
SecurityとValidationの奇妙な関係、あるいはDrupalはなぜValidationをしたがらないのかSecurityとValidationの奇妙な関係、あるいはDrupalはなぜValidationをしたがらないのか
SecurityとValidationの奇妙な関係、あるいはDrupalはなぜValidationをしたがらないのか
 
eZ Publish勉強会9月〜テンプレート言語〜
eZ Publish勉強会9月〜テンプレート言語〜eZ Publish勉強会9月〜テンプレート言語〜
eZ Publish勉強会9月〜テンプレート言語〜
 
仕事の手離れを良くする手段としての、静的検査のあるテンプレートエンジン (YATT::Lite talk at 2014 テンプレートエンジンNight)
仕事の手離れを良くする手段としての、静的検査のあるテンプレートエンジン (YATT::Lite talk at 2014 テンプレートエンジンNight)仕事の手離れを良くする手段としての、静的検査のあるテンプレートエンジン (YATT::Lite talk at 2014 テンプレートエンジンNight)
仕事の手離れを良くする手段としての、静的検査のあるテンプレートエンジン (YATT::Lite talk at 2014 テンプレートエンジンNight)
 
CodeIgniter入門
CodeIgniter入門CodeIgniter入門
CodeIgniter入門
 
Customization of DBIC::Schema::Loader
Customization of DBIC::Schema::LoaderCustomization of DBIC::Schema::Loader
Customization of DBIC::Schema::Loader
 
知って得する標準関数の使い方
知って得する標準関数の使い方知って得する標準関数の使い方
知って得する標準関数の使い方
 
Cinnamon - simple deploy tool
Cinnamon - simple deploy toolCinnamon - simple deploy tool
Cinnamon - simple deploy tool
 
Mojoliciousをウェブ制作現場で使ってみてる
Mojoliciousをウェブ制作現場で使ってみてるMojoliciousをウェブ制作現場で使ってみてる
Mojoliciousをウェブ制作現場で使ってみてる
 
スマートフォン向けサービスにおけるサーバサイド設計入門
スマートフォン向けサービスにおけるサーバサイド設計入門スマートフォン向けサービスにおけるサーバサイド設計入門
スマートフォン向けサービスにおけるサーバサイド設計入門
 
01 php7
01   php701   php7
01 php7
 
RDBでのツリー表現入門
RDBでのツリー表現入門RDBでのツリー表現入門
RDBでのツリー表現入門
 
詳説ぺちぺち
詳説ぺちぺち詳説ぺちぺち
詳説ぺちぺち
 
My sql casual_in_fukuoka_vol1
My sql casual_in_fukuoka_vol1My sql casual_in_fukuoka_vol1
My sql casual_in_fukuoka_vol1
 
怠惰なRubyistへの道 fukuoka rubykaigi01
怠惰なRubyistへの道 fukuoka rubykaigi01怠惰なRubyistへの道 fukuoka rubykaigi01
怠惰なRubyistへの道 fukuoka rubykaigi01
 
Inside mobage platform
Inside mobage platformInside mobage platform
Inside mobage platform
 
Groovyで楽にSQLを実行してみよう
Groovyで楽にSQLを実行してみようGroovyで楽にSQLを実行してみよう
Groovyで楽にSQLを実行してみよう
 

ビギナーだから使いたいO/Rマッパー ~Tengを使った開発~

  • 1. ビギナーだから使いたいO/Rマッパー ~Tengを使った開発~ Hirobanex(Akabane Hiroyuki) 2012-06-29@Perl Beginners #3
  • 4. 生DBIはよくわからん • コンストラクション時の設定って? • セレクト系メソッドどれ使えばいい? • ドキュメントが長すぎてどこ読めば? • トランザクションって? • 突然、コネクション切れる? 3
  • 5. セレクト系メソッドどれ使えばいい? refとかarrayとかhashとか、頭がパンクします・・・ •fetchrow_arrayref •selectrow_array •fetchrow_array •selectrow_arrayref •fetchrow_hashref •selectrow_hashref •fetchall_arrayref •selectall_arrayref •fetchall_hashref •selectall_hashref •selectcol_arrayref 4
  • 6. O/Rマッパーだと開発が抜群に早くなる 複数データ群をリレーションつけて登録する場合のコード比較 DBI Teng use DBI; #Teng-0.14_05 use DBI; my @data_set = ( use Teng; [26,'hiro'], use Teng::Schema::Loader; [27,'bane'], ); my @data_set = ( [26,'hiro'], my $dbh = DBI->connect("DBI:mysql:db_name;", "root", "pass",{ [27,'bane'], AutoCommit => 0, ); }); my $dbh = DBI->connect("DBI:mysql:db_name;", "root", "pass",); for my $data (@data_set) { my ($age,$name) = @$data; my $teng = Teng::Schema::Loader->load( dbh => $dbh, my ($age_id) = $dbh->selectrow_array(q{ namespace => 'MyAPP::DB', SELECT id FROM age WHERE age = ? ); },undef,$age); $teng->load_plugin('FindOrCreate'); unless ($age_id) { my $txn = $teng->txn_scope; my $sth = $dbh->prepare(q{ for my $data (@data_set) { INSERT INTO age (age) VALUES ( ? ) my ($age,$name) = @$data; }); $sth->execute($age); my $row = $teng->find_or_create('age',{ age => $age }); #mysql限定 $teng->insert('user', { age_id => $row->id, name => $name }); $age_id = $dbh->last_insert_id(undef, undef, 'age', 'id'); } } $txn->commit; my $sth = $dbh->prepare(q{ INSERT INTO user (age_id, name) VALUES (?, ?) }); $sth->execute($age_id, $name); } 20行 7行 $dbh->do('COMMIT'); 5
  • 7. コード量が少ないし、勉強になる • オーサーは日本人のnekokakさん • 不明点は誰かに聞けばわかりそう • 日本語情報豊富 • 挙動確認がコード量が少ないため楽 • コードをおうと、Perlの勉強になる 6
  • 8. ビギナーにオススメのTengの導入方法 DBIもよくわからんけど、とにかく早く使ってみたい人向け • Tengのnew(オブジェクトの作り方) • SELECT • INSERT、UPDATE、DELETE • トランザクション 7
  • 9. Tengのnew(オブジェクトの作り方) Teng::Schema::Loaderというのを使うと楽 #Teng-0.14_05 とりあえずメソッド化 #Teng-0.14_05 永続化 use strict; package MyDB; use warnings; use strict; use warnings; use utf8; use DBI; use DBI; use utf8; use Teng; use Teng; use Teng::Schema::Loader; use Teng::Schema::Loader; our $TENG; sub teng { sub teng { my $dbh = DBI->connect("dbi:SQLite:./users.db", '', '', +{ $TENG ||= do { Callbacks => { my $dbh = DBI->connect("dbi:SQLite:./users.db", '', '', +{ connected => sub { Callbacks => { my $conn = shift; connected => sub { $conn->do(<<EOF); #テーブルの構造をココに書く my $conn = shift; CREATE TABLE user ( $conn->do(<<EOF); id INTEGER PRIMARY KEY, CREATE TABLE user ( user_name varchar(10), id INTEGER PRIMARY KEY, sex varchar(10) default 'male', user_name varchar(10), age INTEGER default 20, sex varchar(10) default 'male', ); age INTEGER default 20, EOF ); return; EOF }, return; }, }, sqlite_unicode => 1,#MySQLは、mysql_enable_utf8 => 1 , }, }); sqlite_unicode => 1, }); my $teng = Teng::Schema::Loader->load( dbh => $dbh, Teng::Schema::Loader->load( namespace => 'MyDB::Schema' dbh => $dbh, ); namespace => 'MyDB::Schema' } ); } } 1; 8
  • 10. SELECT SQL文の書けるsearch_by_sqlメソッドを使う 複数行の取り出し 1行だけの取り出し use MyDB; use MyDB; my @users = MyDB->teng->search_by_sql( my $row = MyDB->teng->search_by_sql( q{#SQL文が普通にかける q{ SELECT * FROM user WHERE user_name = ? }, SELECT ['hirobanex'] id, user_name )->first; FROM user WHERE sex = ? AND age > ? }, ['male',20]#bind値は配列のリファレンスで設定 )->all; #Rowオブジェクトなるものがいる for my $row (@users) { #カラムはRowオブジェクトに #カラム名でメソッド呼び出し warn $row->id; warn $row->user_name; } 9
  • 11. INSERT、UPDATE、DELETE SQL文の書けるdoメソッドを使う INSERT UPDATE use MyDB; MyDB->teng->do(q{ UPDATE user SET MyDB->teng->do(q{ user_name = ? INSERT INTO user ( ,age = ? user_name,sex,age WHERE ) VALUES ( user_name = ? ?,?,? },undef,('bane','27','hirobanex')); ); },undef,('hirobanex','male','26')); DELETE # errorハンドリングはTengのほうで やってくれている MyDB->teng->do(q{ DELETE user WHERE user_name = ? },undef,('bane')); 10
  • 12. トランザクション 囲うだけ use MyDB; my $teng = MyDB->teng; my $txn = $teng->txn_scope; for my $user_name ('hiro','bane','ytnobody') { $teng->do(q{ INSERT INTO user (user_name) VALUES (?); },umdef,$user_name ); } $txn->commit; hachioji.pm 11
  • 13. 実際のO/Rマッパーの効用 Tengを使いこなしてやれることを広げるためのキーワード やれること Teng実装 トランザクションをシンプルに書ける DBIx::TransactionManager 突然コネクションが切られることはない $dbh->FETCH('Active'), $dbh->pingの確認 コンストラクション設定を楽にする × リファレンスとかでかっこ良く条件文を書く SQL::Maker インサートしたと同時にその中身とったり、 Teng::Row(Rowオブジェクト)、 便利メソッドつくる FindOrCreate, BulkInsertなど各種プラグイン SQL文を発行するタイミングでなんかする inflate,deflate(triggerはない) SELECTのIN構文になげるバインド値に search_namedメソッド 配列リファレンスを使いたい 12
  • 14. その他Tengリファレンス cpanm Teng 0.14_05 http://perl-users.jp/articles/advent-calendar/2011/teng/ http://search.cpan.org/~nekokak/Teng-0.14_05/ http://walf443.github.com/teng-doc/ 最後はソースコードも読もう 13
  • 15. 最後に YAPC::Asia2012のトークに応募しました! 興味があったら、「いいね!」などお願いしますっ! 14