Spring-jdbc-framework

提供:Dev Guides
移動先:案内検索

Spring-JDBCフレームワークの概要

プレーンな古いJDBCを使用してデータベースを操作している間、例外を処理したり、データベース接続を開いたり閉じたりするために不要なコードを書くのは面倒です。 ただし、Spring JDBC Frameworkは、接続のオープン、SQLステートメントの準備と実行、例外の処理、トランザクションの処理、および最終的な接続のクローズから始まるすべての低レベルの詳細を処理します。

そのため、接続パラメーターを定義し、実行するSQLステートメントを指定し、データベースからデータをフェッチしながら各反復で必要な作業を行うだけです。

Spring JDBCは、データベースとインターフェースするためのいくつかのアプローチとそれに対応する異なるクラスを提供します。 フレームワークの JdbcTemplate クラスを使用する従来の最も一般的なアプローチを採用します。 これは、すべてのデータベース通信と例外処理を管理する中心的なフレームワーククラスです。

JdbcTemplateクラス

JDBCテンプレートクラスは、SQLクエリを実行し、ステートメントを更新し、プロシージャコールを格納し、ResultSetの反復を実行し、返されたパラメーター値を抽出します。 また、JDBC例外をキャッチし、それらをorg.springframework.daoパッケージで定義された汎用のより有益な例外階層に変換します。

_JdbcTemplate_クラスのインスタンスは、一度設定されると_threadsafe_です。 したがって、_JdbcTemplate_の単一のインスタンスを構成し、この共有参照を複数のDAOに安全に挿入できます。

JDBCテンプレートクラスを使用する際の一般的なプラクティスは、Spring構成ファイルで_DataSource_を構成し、その共有DataSource BeanをDAOクラスに依存関係注入し、JdbcTemplateがDataSourceのセッターで作成されることです。

データソースの構成

データベース TEST にデータベーステーブル Student を作成しましょう。 MySQLデータベースを使用していると想定しています。他のデータベースを使用している場合は、それに応じてDDLおよびSQLクエリを変更できます。

CREATE TABLE Student(
   ID   INT NOT NULL AUTO_INCREMENT,
   NAME VARCHAR(20) NOT NULL,
   AGE  INT NOT NULL,
   PRIMARY KEY (ID)
);

次に、データベースアクセスを取得するように自身を構成できるように、JDBCテンプレートにDataSourceを提供する必要があります。 あなたは、次のコードスニペットに示すように、コードの一部でXMLファイルのデータソースを設定することができます-

<bean id = "dataSource"
   class = "org.springframework.jdbc.datasource.DriverManagerDataSource">
   <property name = "driverClassName" value = "com.mysql.jdbc.Driver"/>
   <property name = "url" value = "jdbc:mysql://localhost:3306/TEST"/>
   <property name = "username" value = "root"/>
   <property name = "password" value = "password"/>
</bean>

データアクセスオブジェクト(DAO)

DAOは、データベースアクセスに一般的に使用されるデータアクセスオブジェクトの略です。 DAOは、データベースにデータを読み書きする手段を提供するために存在し、アプリケーションの残りの部分がアクセスするインターフェイスを介してこの機能を公開する必要があります。

SpringのDAOサポートにより、JDBC、Hibernate、JPA、JDOなどのデータアクセステクノロジーを一貫した方法で簡単に操作できます。

SQLステートメントの実行

SQLおよびJDBCテンプレートオブジェクトを使用して、データベーステーブルでCRUD(作成、読み取り、更新、削除)操作を実行する方法を見てみましょう。

整数のクエリ

String SQL = "select count(*) from Student";
int rowCount = jdbcTemplateObject.queryForInt( SQL );

長いクエリ

String SQL = "select count(*) from Student";
long rowCount = jdbcTemplateObject.queryForLong( SQL );

バインド変数を使用した簡単なクエリ

String SQL = "select age from Student where id = ?";
int age = jdbcTemplateObject.queryForInt(SQL, new Object[]{10});

文字列のクエリ

String SQL = "select name from Student where id = ?";
String name = jdbcTemplateObject.queryForObject(SQL, new Object[]{10}, String.class);
  • オブジェクトを照会して返す *
String SQL = "select* from Student where id = ?";
Student student = jdbcTemplateObject.queryForObject(
   SQL, new Object[]{10}, new StudentMapper());

public class StudentMapper implements RowMapper<Student> {
   public Student mapRow(ResultSet rs, int rowNum) throws SQLException {
      Student student = new Student();
      student.setID(rs.getInt("id"));
      student.setName(rs.getString("name"));
      student.setAge(rs.getInt("age"));

      return student;
   }
}
  • 複数のオブジェクトを照会して返す *
String SQL = "select* from Student";
List<Student> students = jdbcTemplateObject.query(
   SQL, new StudentMapper());

public class StudentMapper implements RowMapper<Student> {
   public Student mapRow(ResultSet rs, int rowNum) throws SQLException {
      Student student = new Student();
      student.setID(rs.getInt("id"));
      student.setName(rs.getString("name"));
      student.setAge(rs.getInt("age"));

      return student;
   }
}

テーブルへの行の挿入

String SQL = "insert into Student (name, age) values (?, ?)";
jdbcTemplateObject.update( SQL, new Object[]{"Zara", 11} );

テーブルへの行の更新

String SQL = "update Student set name = ? where id = ?";
jdbcTemplateObject.update( SQL, new Object[]{"Zara", 10} );

テーブルから行を削除する

String SQL = "delete Student where id = ?";
jdbcTemplateObject.update( SQL, new Object[]{20} );

DDLステートメントの実行

_jdbcTemplate_の* execute(..)*メソッドを使用して、SQLステートメントまたはDDLステートメントを実行できます。 以下は、CREATEステートメントを使用してテーブルを作成する例です-

String SQL = "CREATE TABLE Student( " +
   "ID   INT NOT NULL AUTO_INCREMENT, " +
   "NAME VARCHAR(20) NOT NULL, " +
   "AGE  INT NOT NULL, " +
   "PRIMARY KEY (ID));"

jdbcTemplateObject.execute( SQL );

Spring JDBCフレームワークの例

上記の概念に基づいて、SpringでのJDBCフレームワークの使用法を理解するのに役立ついくつかの重要な例をチェックしましょう-

Sr.No. Example & Description
1

Spring JDBC Example

この例では、簡単なJDBCベースのSpringアプリケーションの作成方法を説明します。

2

SQL Stored Procedure in Spring

SpringでJDBCを使用しているときにSQLストアドプロシージャを呼び出す方法を学びます。