=encoding utf8 =head1 NAME DBIx::Custom::Guides::Ja - DBIx::Customの日本語ガイド =head1 ガイド Lはデータベースへのクエリの発行を簡単に行うための クラスです。LやLと同じように Lのラッパクラスになっています。 LはO/Rマッパーではありません。O/Rマッパーは 便利ですが、O/Rマッパのたくさんの文法を覚える必要があります。 また、O/Rマッパによって生成されたSQLは非効率なことがありますし、 複雑なSQLを生成することができないので、 生のSQLを発行しなければならない場合がたくさんあります。 LはO/Rマッパとは対照的な設計が行われています。 Lの主な目的は、SQLを尊重しつつ、DBIだけでは とてもめんどうな作業を簡単にすることです。もしSQLについて 多くの知識を持っているならば、Lでそのまま 生かすことができます。 Lの仕組みを簡単に説明しておきましょう。 Lでは、タグと呼ばれるものを SQLの中に埋め込むことができます。 select * from book where {= title} and {=author}; {}で囲まれた部分がタグです。このSQLは実際に実行されるときには 次のようにプレースホルダに展開されます。 select * from book where title = ? and title = ?; これらの展開にはどのような意味があるのでしょうかと質問 されることかと思います。 またSQLを簡単に実行するための、 C, C, C,Cなどの シュガーメソッドも提供します。 LはSQLを尊重します。SQLはとても複雑で、美しくはありません。 けれども、SQLはデファクトスタンダードな技術です。 ですので、データベースを学ぶすべての人はSQLを知っています。 あなたがすでにSQLを知っているなら、Lを使って 何かを行うために覚えることはとても少ないです。 では使い方を解説します。 =head2 1. データベースへの接続 Lオブジェクトを生成し、データベースに接続するには Cメソッドを使用します。 use DBIx::Custom; my $dbi = DBIx::Custom->connect(data_source => "dbi:mysql:database=dbname", user => 'ken', password => '!LFKD%$&'); B MySQL "dbi:mysql:database=$database" "dbi:mysql:database=$database;host=$hostname;port=$port" SQLite "dbi:SQLite:dbname=$database" "dbi:SQLite:dbname=:memory:" PostgreSQL "dbi:Pg:dbname=$dbname" Oracle "dbi:Oracle:$dbname" "dbi:Oracle:host=$host;sid=$sid" ODBC(Microsoft Access) "dbi:ODBC:driver=Microsoft Access Driver (*.mdb);dbq=hoge.mdb" ODBC(SQL Server) "dbi:ODBC:driver={SQL Server};Server=(local);database=test;Trusted_Connection=yes;AutoTranslate=No;" LはLのラッパです。 LオブジェクトはCで取得することができます。 my $dbh = $dbi->dbh; データベースハンドル属性にはデフォルトで次のものが設定されます。 $dbi->dbh->{RaiseError} = 1; $dbi->dbh->{PrintError} = 0; $dbi->dbh->{AutoCommit} = 1; この設定を行っているので、致命的なエラーが起こると、 例外が発生しプログラムは終了します。 またクエリが発行されると自動的にコミットされます。 =head2 2. シュガーメソッド Lは、 C、C、C、C のようなシュガーメソッドを持っています。 小さなことを行うのであれば、SQL文を 作成する必要はありません。 =head3 C Cメソッドです。データベースにデータを挿入します。 $dbi->insert(table => 'book', param => {title => 'Perl', author => 'Ken'}); これは次のLの操作と同じです。 my $sth = $dbh->prepare('insert into (title, author) values (?, ?);'); $sth->execute('Perl', 'Ken'); =head3 C Cメソッドです。データベースのデータを更新します。 $dbi->update(table => 'book', param => {title => 'Perl', author => 'Ken'}, where => {id => 5}); これは次のLの操作と同じです。 my $sth = $dbh->prepare( 'update book set title = ?, author = ? where id = ?;'); $sth->execute('Perl', 'Ken', 5); Cメソッドは安全のため where句のないSQLを発行することを許可していません。 もしすべての行を更新したい場合は Cメソッドを使用してください。 $dbi->update_all(table => 'book', param => {title => 'Perl', author => 'Ken'}); =head3 C Cメソッドです。データベースのデータを削除します。 $dbi->delete(table => 'book', where => {author => 'Ken'}); これは次のLの操作と同じです。 my $sth = $dbh->prepare('delete from book where id = ?;'); $sth->execute('Ken'); Cメソッドは安全のため where句のないSQLを発行することを許可していません。 もしすべての行を削除したい場合は Cメソッドを使用してください。 $dbi->delete_all(table => 'book'); =head3 C Cは行の名前とwhere句を指定したものです。 my $result = $dbi->select( table => 'book', column => [qw/author title/], where => {author => 'Ken'} ); 次のLの操作と同じです。 my $sth = $dbh->prepare( 'select author, title from book where author = ?;'); $sht->execute('Ken'); テーブルをjoinしたい場合はCを使用します。 my $result = $dbi->select( table => ['book', 'rental'], column => ['book.name as book_name'] relation => {'book.id' => 'rental.book_id'} ); 次のLの操作と同じです。 my $sth = $dbh->prepare( 'select book.name as book_name from book, rental' . 'where book.id = rental.book_id;'); $sth->execute; SQL文の末尾に文字列を追加したい場合はオプションを使用します。 my $result = $dbi->select( table => 'book', where => {author => 'Ken'}, append => 'order by price limit 5', ); 次のLの操作と同じです。 my $sth = $dbh->prepare( 'select * book where author = ? order by price limit 5;'); $sth->execute; Cオプションは、C、C、C C、C