「JJUG ナイトセミナー Java O/Rマッパー特集」のメモ
【東京】JJUG ナイトセミナー 「Java O/Rマッパー特集」 7/26(水)開催 久しぶりの勉強会。久しぶりのOracl。実は会場に参加したのは初めだったJJUG。
メモ書き。
比較
機能 | JPA | MyBatis | Doma | Reladomo |
---|---|---|---|---|
マッピング | テーブル | ResutlSet | ResultSet | テーブル |
SQL | 書かない | 書く | 書く | 書かかない |
(書こうと思えば書ける) | ||||
設定 | アノテーション | XML or | Javaクラス + | xml |
アノテーション or | SQLファイル | |||
DSL |
25分でわかるJPA
資料
ここがスゴイ!
- DB製品に依存しない操作が記述できる
- 1対多のようなリレーションを表現できる
- @OneToOne
- @OneToMany
- @ManyToOne
- @ManyToMany
ここがダメ!
- DB製品には依存しないが、JPAの実装に依存する部分がある
その他
- エンティティの状態遷移が重要
- merge()は、引数自体はMANAGED状態にならないので注意
- フェッチは基本LAZY
- JPAを使っていい条件(AND)
次に
- JPAサンプルコード
- 50分で分かるSpring Data JPA
- はまる!JPA(初学者向けライト版)(@suke_masa)
- はまる!JPA (@makingさん)
- JPAの同時実行制御とロック (@suke_masa)
- @opengl_8080さんのQiita記事一連
- パーフェクトJava EE
MyBatis を利用した Web Application 開発についてのご紹介
資料
ここがスゴイ!
- どんなスキーマでも使える
- 主キーがなくても大丈夫
- MyBatis前提でない既存のDBでも
- サブクエリなどの複雑なクエリも書ける
(クエリが自動生成ではなく自分で書いてるので)発行されるクエリが人間に読みやすい
- O/Rマッパーだとどこでクエリが生成されてるのか、どういうクエリが実行されているのかを意識しながらレビューするのはつらい
- Site Reliability Engineerの人が横断的にクエリをレビューする
- Github Enterpriseで検索、どこで動いてるかをすぐに検索できる
DBのパフォーマンスを最大限活かすSQLを書ける
- 自社サービスなら別DBへの移行なんてめったいにしないから
ここがダメ!
その他
次に
ざっくりわかるDoma
資料
ここがスゴイ!
- コンパイル時にコード検証、コード生成
- 他のJARに依存しない
- ページネーション、悲観排他ロックなどRDBMSの差異を吸収
- Java 8以降に対応
- 日付を扱う場合にLocalDateが扱える
- 2 way SQL
- バインドなどをコメント形式で行うので、SQLファイルの中身をコピペしてクエリ発行できる
- エラーメッセージ、ドキュメントなど日本語で手厚いサポート
ここがダメ!
- SELECTクエリの自動生成ができない
- 親子などの構造を持ったエンティティへのマッピングができない
- エラーメッセージ、ドキュメントなどが現状日本語のみ
その他
- markdownのコメント(???)のところに説明してくれた内容のポイントが書いてある http://backpaper0.github.io/ghosts/doma-zakkuri/slide.md
次に
Reladomo入門
資料
ここがスゴイ!
- OSS化されのたは2016だが、2004からゴールドマン・サックスで開発されてお枯れたフレームワーク
- オブジェクト指向の徹底
- 型安全なクエリー
- XMLからコード、DDLを自動生成
- DBクエリはreladomo、取得後にインメモリー処理でGS Collecitonと使える
- 複数のキャッシュ戦略
- バイテンポラルモデルが簡単に扱える
- 有効時間
- トランザクション時間
ここがダメ!
- 情報が少ない
その他
- 読み方は「リラドモ」
- Relational Domain Object の略
次に
実際になにを使っているか?
JPA > MyBatis > Doma > JDBC直呼び