カテゴリー: Seasar

CodeIgniterのすすめ Active Recordクラス

投稿者:isc_blog

CodeIgniterについて何度かご紹介してきていますが
ここんとこSeasar2(Javaのフレームワーク。個人的にはJavaのフレームワークの中で一番好きかな。)っぽいなぁ~と思ったActive Recordクラスについて
ご紹介します。

Seasar2の中でもS2JDBCっていうSeasar2のO/Rマッパーで・・・
っていうか
まぁ、百聞は一見にしかず・・・ってことでこんなコードでDB検索を可能にしています。
[java]
List<Employee> results = jdbcManager.from(Employee.class)
.join("department")
.where("id in (? , ?)", 11, 22)
.orderBy("name")
.getResultList();
[/java]
これって実際のSQLは・・・・こんな感じ
[sql]
select T1_.ID, T1_.NAME, T1.DEPARTMENT_ID, T2_.ID, T2_.NAME
from EMPLOYEE T1_ left outer join DEPARTMENT T2_ on T1_.DEPARTMENT_ID = T2_.ID
where T1_.ID in (?, ?)
order by T1_.NAME desc
[/sql]
※SQL文内の「?」に 「11」「12」が入ってくる感じです。

これをCodeIgniterのActive Recordクラスで書くと・・・
[php]
$this->db->select(‘employee.id,employee.name,employee.department_id,department.id,department.name’);
$this->db->from(‘employee’);
$this->db->join(‘department’, ‘department.id = employee.id’,’left’);
$this->db->where_in(‘id’, array(’11’,’12’));
$this->db->order_by("employee.name", "desc");
$query = $this->db->get();
[/php]
こんな感じ(間違ってたらごめんなさい)
もしかしたらCodeIgniterの方が直感的かもしれない。

どちらももっと複雑なSQLの場合は直接SQL文節をかけちゃう
「S2JDBC」
[java]
List<Employee> results = (List<Employee>) entityManager.createQuery(
"select e from Employee e left join fetch e.department" +
" where e.id in (?1, ?2) order by e.name")
.setParameter(1, 11)
.setParameter(2, 22)
.getResultList();
[/java]

「CodeIgniter」
[php]
$this->db->select(‘(SELECT SUM(payments.amount) FROM payments WHERE payments.invoice_id=4′) AS amount_paid’, FALSE);
$query = $this->db->get(‘mytable’);
[/php]

フレームワークを導入したせいでガチガチでどうしようもなくなる(またはフレームワークのせいでSQL構文を合わせないといけない・・・)というフレームワークではつかれるので、こういうところは柔軟であってほしい。

やはりいいフレームワークだと思います。

久々に書いたけどS2JDBCも強力だなぁ~
Java書きたくなってきたー
※Androidは書いてるか・・・

2011年8月2日