バックエンド死亡経路TIL 17-19日目


学習目標


講座を聞いて、私の知っている内容をチェックして、
新しい学習内容を整理する.
あなたの疑問を理解し、理解します.

JDBC


JDBCとは?


JDBCは、Javaアプリケーションとリレーショナル・データベースを接続するコネクタです.

JDBC Architecture Model



( https://www.infoworld.com/article/3388036/what-is-jdbc-introduction-to-java-database-connectivity.html )

JDBC Driver Model


Drive Managerは、各データベースに対応するドライバを呼び出し、データベースと通信します.

JDBC Flow


  • DriveManagerでコネクタオブジェクトを受信します.
  • ConnectionでStatementをインポートします.
  • ステータスでクエリーを実行してResultSetを取得するか、更新を実行します.
  • データベースインタフェースを閉じます.
  • SQL Injection

    ' OR '1'='1
    createStatement()ではなくprepareStatement()を使用してSQL Injectionを回避します.

    Spring JDBC DataSource


    DataBase Connection Pool (DBCP)


    コネクタの作成と閉じるたびに、多くのリソースが消費されます.
    コネクタを事前に作成してプールに保存し、必要に応じてインポート、使用、および戻ります.
    このプロセスでは、データ・ソースが接続プールを管理します.
    プールからコネクタをインポートする場合も、データソースからインポートされます.
    コネクタを次の順序で管理します.
  • プールからコネクタをインポートします.
  • インタフェースを使用します.
  • インタフェースはプールを返します.
  • HikariCP


    ドライバマネージャの1つであるHikariCPはJDBC接続プールの1つです.

    JdbcTemplate


    スプリングは、TemplateCallBack Patternを作成することによって、重複部分と変更部分を含むJdbcTemplateを提供します.

    DBバインド統合テストコード


    統合テストにはデータベースが必要です.
    ただし、外部環境の問題でデータベース・サーバに接続できない場合は、テストが必要になる場合があります.
    スプリングは、この問題を解決するために埋め込まれたデータベースを提供します.
    https://github.com/wix/wix-embedded-mysql

    NamedParameterJdbcTemplate


    名前ベースのパラメータを設定するJDBC Template.

    DataAccessException


    JdbcTemplateは、Sql Exceptionを実行時異常のDataAccessExceptionとしてカプセル化します.
    これにより、アプリケーション・レベルでSQLExceptionに注目することを回避できます.
    SQLExceptionで扱いにくい詳細な異常情報を有意義な異常に変換する.

    取引


    トランザクションとは?


    トランザクションは、DBMSまたは同様のシステムで相互作用する単位です.
    例えば、銀行の振り替えシステムを考えてみると、
    勘定科目を検索し、勘定科目からお金を引き出し、振り替える勘定科目にお金を預けるプロセス.
    しかし、引き出しに成功しても送金に失敗した場合、口座から流出したお金が発生する可能性がありますが、振り替える口座は送金できないという問題があります.
    これらの問題を回避するために、論理的にタスクを実行するクエリーを組み合わせ、トランザクションとして管理します.
    トランザクションにより、DBMSは各トランザクションにACID保証を提供します.