ゆっきーのブログ

実践的なシステム設計開発、アプリケーションフレームワーク開発、トラブルシューティング、 後輩育成のためのブログ。その他、キャンプ、トレッキング・登山やレジャー等。

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を使えるようにした方が、みんなの負担が削減され、後の品質が良くなるはず!と信じています。

 

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

執筆者:


comment

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

関連記事

postgresqlでの拡張のインストール

PostgreSQL10で暗号化関数を使用するため拡張(pgcrypto)をインストールした際の出来事を記載します。 事象 pgcryptoの拡張をインストールしたり、インストールの確認を行うと、その …

パスワード情報の保管方式の比較

Webアプリの開発でパスワードを使ったユーザ認証を設計・実装する機会がよくある。 後輩への説明や勉強会ネタとして、この辺の話を纏めてみようと思う。 概要 オンラインバンキングやネットショッピングのサイ …

区分データ生成ツール

区分定義書の変更時、定数や列挙体、マスタの一部を手動で修正するような運用だと、抜け漏れや間違いが発生する場合があります。この辺の手間や間違いを低減するために、区分定義書から自動的に成果物を作成するEx …

Wildfly11のインストール

このサイトでWebアプリを公開したい。 仕事ではJBoss Enterprise Application Server(JBoss EAP)を使う機会が多いのでそれを使いたいがライセンス料がかかる。無 …

JavaEE7のJSF, Facelets, JSPの関係

JavaEEを使ったアプリ開発の際に、いつも気になるが後回しにしていたこと… HTML5への対応方法の調査等、今後の理解促進のために、調べてみた。 FaceletsとJSFとの関係は? J …