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

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

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

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

JdbcTemplateクラス

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

JdbcTemplateクラスのインスタンスは、一度構成されるとスレッドセーフになります。したがって、JdbcTemplateの単一インスタンスを構成してから、この共有参照を複数のDAOに安全に挿入できます。

JDBCテンプレートクラスを使用する場合の一般的な方法は、Spring構成ファイルでデータソースを構成してから、その共有データソースBeanをDAOクラスに依存性注入することです。JdbcTemplateはデータソースのセッターに作成されます。

データソースの構成

データベーステーブルを作成しましょう Student 私たちのデータベースで TEST。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テンプレートに提供して、データベースアクセスを取得するように自身を構成できるようにする必要があります。次のコードスニペットに示すように、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はDataAccess Objectの略で、データベースの相互作用に一般的に使用されます。DAOは、データベースに対してデータを読み書きする手段を提供するために存在し、アプリケーションの残りの部分がDAOにアクセスするためのインターフェイスを介してこの機能を公開する必要があります。

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

SQLステートメントの実行

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

Querying for an integer

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

Querying for a long

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

A simple query using a bind variable

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

Querying for a String

String SQL = "select name from Student where id = ?";
String name = jdbcTemplateObject.queryForObject(SQL, new Object[]{10}, String.class);

Querying and returning an object

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;
   }
}

Querying and returning multiple objects

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;
   }
}

Inserting a row into the table

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

Updating a row into the table

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

Deleting a row from the table

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

DDLステートメントの実行

あなたは使用することができます execute(..)jdbcTemplateのメソッドを使用して、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 );

SpringJDBCフレームワークの例

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

シニア番号 例と説明
1 SpringJDBCの例

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

2 SpringのSQLストアドプロシージャ

SpringでJDBCを使用しながらSQLストアドプロシージャを呼び出す方法を学びます。