Java ORM標準JPAプログラミング-基本編(1)


SQLを中心とした開発の問題点


  • SQL:リレーショナル・データベース管理システム(RDBMS)のデータを管理するために設計された特殊な目的のプログラミング言語.
    多くのデータベース関連プログラムはSQLを標準として使用しています.
    アプリケーションは主にオブジェクト向け言語(JAVA)を使用します.
    データベースはリレーショナル・データベースを使用します.
    この2つの構造と動作方式は異なる.すなわち,パターンの相違が生じた.

    したがって、オブジェクトをSQLに変換してDBに格納することは、開発者によって実行されます.
    この場合、各オブジェクトをSQLに変換してCRUDに適応するには、冗長な繰り返しが必要であり、変更や拡張時にも大量のコードを変更する必要があるという問題があります.
    つまり、SQLに頼って開発する必要があります.

    オブジェクトとリレーショナル・データベースの違い



  • 1.継承
    	(출처: 인프런 김영한 자바ORM 표준 JPA-기본편 수업자료)
  • DBには対象言語への継承関係などの構造は存在しない.
    したがって、オブジェクトを格納およびクエリーする過程で、さまざまな複雑な問題が発生します.
  • 2. 関連関係

    オブジェクト使用リファレンスキー:Member.getTeam();
    表はスラッシュ:JOIN ON M.TEAM ID=T.TEAM I
  • したがって,我々がオブジェクト向け言語で当たり前のことはデータベースでは成り立たない.
    DBからメンバーをインポートする場合、オブジェクト言語への参照値Teamもメンバーです.getTeamでインポートできる必要があります.
    実際に、チームを単独でインポートしないと、チームに関する情報は照会できません.また、導入時にもチームとメンバーの関係を再設定します.
    同じ脈絡では、オブジェクトがオブジェクトのグラフィックを自由に閲覧できる必要がありますが、これは不可能になります.

    たとえば、メンバーを使用してOrderItemを検索します.
    Member.getOrder().このようにgetOrderItem()を参照できます.
    このようなオブジェクト指向とRDB間の相違による不便を解決するために,オブジェクトをDBに格納するようにJavaセットに格納する方法を検討してきたが,結果はJPAであった.

    JPA

  • JPA : Java Persistence API
  • ORM:オブジェクト-リレーションシップマッピング(オブジェクトリレーションシップマッピング)
    -オブジェクトをオブジェクトとして設計し、RDBをRDBとして設計し、ORMフレームワークを中間から
    -大衆言語にはORM技術が存在することが多い.
  • JPAはインタフェースの集合です
    ->実施者:HyperNate、EclipseLink、DataNucleus

    なぜJPAを使うのですか?


  • SQL中心の開発からオブジェクト中心の開発まで

  • せいさんこうりつ
    既存のSQLに比べて、CRUDは比類のない便利さを提供しています.
    •保存:jpa.persist(member)
    •クエリー:メンバーメンバー=jpa.find(memberId)
    •修正:メンバー.setName(「変更する名前」)
    •削除:jpa.remove(member)
  • 特にUPDATEでは、変更するだけで自分でデータベースを更新できます.
    ->保守が容易
    解決
  • オブジェクトとJPAのモードが一致しない
    差異の継承、関連付け、グラフィックナビゲーションの問題の解決
    既存JPAと対象比較結果エラー
  • String memberId = "100";
    Member member1 = memberDAO.getMember(memberId);
    Member member1 = memberDAO.getMember(memberId);
    //기존 코드, sql로 member를 가져오는 코드라고 가정
    member1 !=member2 // 둘은 다르다
    
    String memberId = "100";
    Member member1 = jpa.find(Member.class, memberId);
    Member member2 = jpa.find(Member.class, memberId);
    member1 == member2; //같다.
  • JPAの性能最適化機能
  • プライマリ・キャッシュとの一貫性を保証
  • トランザクションの書き込み遅延をサポート(トランザクション書き込み後)
    -INSERT SQLを収集し、トランザクションがコミットされるまで一度に送信し、効率を最大化します.
  • 遅延ロード(Lazy Loading)
  • 遅延ロードとインスタントロード
    •遅延ロード:オブジェクトの実際の使用時にロード
    •インスタントロード:JOIN SQLを使用してすべての関連オブジェクトを一度に表示
    両者にはそれぞれ長所と短所がある.