アプリ開発ときどきアウトドア

主にJavaを使ったアプリ開発やトラブルシューティング等のノウハウ、キャンプや登山の紹介や体験談など。

1. システムエンジニアリング 設計技術

DB操作フレームワーク はJPA or mybatis?

投稿日:2018年5月20日 更新日:

開発に向けた準備で、開発標準を準備するフレームワーク(FW)チーム、それらを使って実装を行う業務チームが集まって、「DB操作を行うためのFWは何を使うか?」という協議になった。

FWチームは、FW・JavaEE7の標準であるJPAを推奨した。

FWチームの一員ではあるが業務寄りの立場でもある自分はmybatisを推奨した。業務チームからの強い要望で、mybatisを採用する方向で決定した。

  • 分かりやすさ、関心の分離
    JPAはオブジェクト指向プログラムベースでDB操作を完結したい(ORマッパーの目標)ので、結果としてプログラム上にSQL文に相当するDB操作の実装がされる。単純なDB操作であれば美しいと思うが…
    難易度の高い業務システムでは、多数のテーブル結合や副問い合わせを混在させたような複雑なクエリを実装する必要がある。プログラム/JPQL/SQLが混在したソースコードを作るのも大変だし、それをレビューするのも大変である。やはりSQL文だけに集中したい…
    mybatisは外出しのファイルにSQL文を定義できるので、このような問題を軽減できる。
    JPAでもネイティブクエリ(とちょっとの改修)を使えば、外出しのファイルに定義できますよ、とのことだが、だったらmybatisの方が機能が充実しているので、mybatisを選んだ方が素直かと…
  • 学習や開発コスト
    JPA(JPQL)は、SQL文ライクな問い合わせ言語であるが、SQL文ではない。SQL文の感覚でJPQLを定義して実行するとエラーになる場合がある。問題が発生した場合、JPQLの問題なのかSQL文の問題なのかの切り分けが必要となり、難易度が上がる。JPQLでSQL文の全てを表現できるわけではないので、その辺の制約を把握していないと、実行時のエラー原因の特定が難しい。
    FWチームとしては、プロジェクトに投入されるメンバ(パートナー)はJavaEE6or7を分かっている人が投入されると思うので、そんなに問題ないのでは?と。ん~実態はそうではないと思います…ちょっとJava開発やったら「経験者」として営業提案されて入ってくる人も多いのではないかなぁ、なんて思います…自分もJPQLで苦労したので…
  • ORマッパーの考えを否定するわけではありませんが、私の経験や視界にある日本の業務システムは、複雑怪奇であり、ORマッパーは適さないのかなぁ、なんて思います。FWチームは優秀な人が多いのかもしれませんが、その案件のために急遽集められた業務チームのメンバには難しいんじゃないかと思います…
  • 今のFWにあるJPAの機能を使わず、なぜ追加開発でmybatisを使うのか?というコスト的な指摘もありました。全般的に優秀な人ほど、mybatisの採用に否定的でした…あはは…
    直近で考えるならJPAの方が準備が充実しておりコストがかかりません。だがしかし、上記の通り、良くも悪くも寄せ集め業務チーム(20人程)が自分と同じように苦労するよりも、今自分が苦労してmybatisを使えるようにした方が、みんなの負担が削減され、後の品質が良くなるはず!と信じています。

 



(adsbygoogle = window.adsbygoogle || []).push({});


(adsbygoogle = window.adsbygoogle || []).push({});

-1. システムエンジニアリング, 設計技術

執筆者:


comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

関連記事

WebサイトのSSL化

次のようなGoogleウェブマスター向け公式ブログでの推奨や、リモートか管理の安全性向上の向上のためにSSL(TLS)を有効にする。 概要 Googleさんの考え 保護されたウェブの普及を目指して(2 …

開発・検証用のダミーメールサーバの構築(fakeSMTP)

アプリ開発や検証等でメールサーバを利用したい場合がある。 プロジェクトで共有の検証用メールサーバを構築できると効率が良いか、その準備が間に合わなかったり、使用者が限定的な場合は、使用者の開発環境上に構 …

Javaでサポートする暗号化アルゴリズム

Java暗号化アーキテクチャ Javaで暗号化処理を実装する場合、Java暗号化アーキテクチャ(Java Cryptography Architecture: JCA)と呼ばれるフレームワークを使いま …

JSFラジオボタン・チェックボックスとbootstrap

boostrapでラジオボタンやチェックボックスを使用する場合、div, input, label要素にbootstrapのCSSクラスを指定する必要がある。 JSFでラジオボタンを使用する場合、se …

技術検証

Linuxでの gdrive の使い方

wordpressのデータをgoogle driveにバックアップするための基礎調査を行っている。 google driveに接続可能なライブラリは幾つかあるようだが、ここでは無料でお手軽に始められそ …

プロフィール ゆっきーです。
都内でシステムエンジニアをやっています。
もっと詳細を見る