「JJUG ナイトセミナー Java O/Rマッパー特集」のメモ

f:id:orangeclover:20170731235413p:plain

【東京】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の実装に依存する部分がある
    • JPQLが発行するSQL実装依存
      • Hibernate、EclipseLinnkでは全く別物になる
    • LAZYフェッチでrollback後の動きで差異がある
      • Hibernateだとエラー、EclipseLinkだと検索できるときもある

その他

  • エンティティの状態遷移が重要 f:id:orangeclover:20170731235405p:plain
  • merge()は、引数自体はMANAGED状態にならないので注意
  • フェッチは基本LAZY
  • JPAを使っていい条件(AND)
    • DBを新規に設計できる
    • 集合演算やFROM句での副問合せなど、複雑なSQLは要件的に少ない
    • 「パーフェクトJava EE」を読破した人がプロジェクトに1人以上いる

次に

MyBatis を利用した Web Application 開発についてのご紹介

資料

ここがスゴイ!

  • どんなスキーマでも使える
    • 主キーがなくても大丈夫
    • MyBatis前提でない既存のDBでも
    • サブクエリなどの複雑なクエリも書ける
  • (クエリが自動生成ではなく自分で書いてるので)発行されるクエリが人間に読みやすい

    • O/Rマッパーだとどこでクエリが生成されてるのか、どういうクエリが実行されているのかを意識しながらレビューするのはつらい
    • Site Reliability Engineerの人が横断的にクエリをレビューする
    • Github Enterpriseで検索、どこで動いてるかをすぐに検索できる
  • DBのパフォーマンスを最大限活かすSQLを書ける

    • 自社サービスなら別DBへの移行なんてめったいにしないから

ここがダメ!

その他

次に

ざっくりわかるDoma

資料

ざっくりわかるDoma

ここがスゴイ!

  • コンパイル時にコード検証、コード生成
    • タイポなどつならないミスは、実行時ではなく、コンパイル時に検出できる
    • ドメインクラス(Domaで扱える値オブジェクト)で引数や戻り値の型をチェックできる
  • 他のJARに依存しない
  • ページネーション、悲観排他ロックなどRDBMSの差異を吸収
  • Java 8以降に対応
    • 日付を扱う場合にLocalDateが扱える
  • 2 way SQL
    • バインドなどをコメント形式で行うので、SQLファイルの中身をコピペしてクエリ発行できる
  • エラーメッセージ、ドキュメントなど日本語で手厚いサポート

ここがダメ!

  • SELECTクエリの自動生成ができない
  • 親子などの構造を持ったエンティティへのマッピングができない
  • エラーメッセージ、ドキュメントなどが現状日本語のみ

その他

次に

Reladomo入門

資料

ここがスゴイ!

ここがダメ!

  • 情報が少ない

その他

  • 読み方は「リラドモ」
  • Relational Domain Object の略

次に

実際になにを使っているか?

JPA > MyBatis > Doma > JDBC直呼び

関連