「うらがみがJavaまわりのORMを知りたい会」に参加してきました
※本記事はNCデザイン&コンサルティング㈱のブログに私が記載したものを転載・修正したものです。
6/14に「うらがみがJavaまわりのORMを知りたい会」という勉強会に参加してきたので、その内容と感想について書きたいと思います。
6/14に「うらがみがJavaまわりのORMを知りたい会」という勉強会に参加してきたので、その内容と感想について書きたいと思います。
うらがみがJavaまわりのORMを知りたい会
- http://connpass.com/event/3583/
- 関西を代表するJavaエンジニアであるうらがみさん(@backpaper0)とJavaまわりのORMを勉強しようというもの
- 関西のJava界隈のエンジニアが20名程集まっていました。
- 結構ギークな面々。名古屋からも強力な方が一名。
「JavaのORM、Domaの話+α」:@backpaper0さん
やはりDomaについての話が印象的でした。 DomaはS2Daoの進化系。 SQLファイルとDAO、クエリ実行結果とEntityをシンプルにマッピングする技術というイメージ。 @backpaper0さんの言葉を借りるとObject ResultSet Mapper。- Pluggable Annotation Processing API(JSR269)をうまく利用している
Pluggable Annotation Processing APIはコンパイル(javac)時にアノテーションを使った機能拡張が実装でき、Domaではコンパイル時のコード生成や規約チェック、SQLファイルの構文チェックを行っているようです。 SQLファイルの構文チェックはとてもありがたいですね。 - Java8にも積極的に対応
Date and Time API、Optional、Stream/Collectorに対応しているようです。
「F 社乙女チームの ORM (黒) 歴史」:@daiksyさん
自分の発表資料を作成していてあまり聞けてていませんでした...。 @daiksyさん、すいませんm(_ _)m 資料が公開されたら勉強します!「jOOQの紹介」:@chipstar_light
飛び入りで私も個人的に発表をさせてもらいました。 会場に着いてから話を受けて、@daiksyさんの発表中に資料を作ったので、時間が全然なくて資料の体裁はひどい... ですが、皆さん広い心で聞いてくれました。感謝。 資料は以下です。「ORM 初心者が使おうとした」:@kyon_mmさん
jOOQ、iciql、Slick(Scala)を紹介された後、実装が(try-catchで)煩わしくなりがちなエラー処理周りがこれらのフレームワークでどう対応されているかの話でした。- 楽観ロック
.NETのEntityFrameworkやjOOQ、JPAは提供しているが、iciqlは提供しておらず、Slickも提供してないに近い見たいですね。 この辺は当たり前に提供されるのかと思ってましたが、そうでもない製品もあるんですね。 - 悲観ロック
jOOQはSQLを構文レベルでサポートしているので、forUpdateを呼び出せば良い。 でも他の製品はSQLを記述する事になりそう。 業務系では結構重宝するのでサポートしておきたいですが、RDBに依存しすぎる部分があって難しいかのな。 - リトライ
これ、サポートしている製品見た事無いですね。 でも、結構な割合で必要となって作り込む事が多い。 面白かったのは、Azureはネットワークが遅いのでタイムアウトが多く、DBアクセスの場合はデフォルトでリトライロジックを書かないと使い物にならないよという話。知らなかった。 - コネクションプール
JDBCレベルで持っていてほしいですよね。 BoneCPがとても早いらしい。 一説では、DBCPと比較して50倍くらい早いなんと言っている人もいるらしいです。 試す価値ありますね。
「MyBatisを使用した大規模開発の事例紹介 〜成功談や失敗談など〜」:@s_kozakeさん
MyBatisを使っていかにして楽ができるかに挑戦されたお話。 特に面白かったのはMyBatisが持つコード生成機能を拡張する仕組みを利用して、大規模案件らしい拡張をされていた事。 テーブルのメタデータだけでなく、SQLからコードを生成するという発想が面白かったです。 定義したSQLから、Mapper.xmlとMapperクラス、モデルが生成されます。 ビューを作るまでもないレベルだけど、固定の条件を必ずつけるクエリでデータアクセスしたい場合に便利。 このアイデアは便利だと思いました。「GORM めっさゆるい」:@kazuhito_mさん
GORMはGrailsのORM。 最近、Grailsから独立して、単体で利用できるようになったらしいです。 クエリの定義の仕方が面白いです。動的言語の良さを生かしてますね。- Rails由来のダイナミックファインダー
- findByに続けて1つ以上のプロパティ名を組み合わせたメソッド名の形式で呼び出す事により、特定のプロパティに対して検索をかけることができます。
def model = モデル.findByTitle("The Stand") モデル.findBy([Property][Comparator][Boolean Operator])?[Property][Comparator]
- Whereクエリー