Menu

FrontPage

Eclipseプラグイン
Eclipse小技集
リファクタリング講座
テスティングフレームワーク JUnit
MSDEについて



The 20 newest affair
2010-09-092010-09-082010-09-072010-09-062010-09-012010-08-312010-08-272010-08-242010-08-232010-08-172010-08-162010-07-302010-07-212010-07-132010-06-272010-06-182010-06-172010-06-16

JDBC抽象化フレームワーク


Springがサポートしているフレームワークの1つに、「JDBC抽象化フレームワーク」があります。

このJDBC抽象化フレームワークを使用することによって

  1. ConnectionやStatementオブジェクトのクローズ処理が不要
  2. ResultSetから値を取得する際のループも不要
  3. SQLExcepionへの対応が不要
           ↓
  • プログラムをシンプルにまとめることが出来る

という点があげられます。

JDBC抽象化フレームワークでは、1SQLい対してクラスを作成し、それらのSQLクラスの取りまとめを行うDAOクラスを用意する。
DAOクラスは目的に応じて必要なSQLクラスを実行し、結果を取得するという流れになります。



まずSQLクラスを用意します。
ここで作成するSQLクラスは「○○テーブルの全内容を取得する」という単純なSQLにします。

FindQuery.java
01 package jp.co.dgic.wiki.spring.sample4;
02 
03 import java.sql.ResultSet;
04 import java.sql.SQLException;
05 import java.sql.Types;
06 
07 import javax.sql.DataSource;
08 
09 import org.springframework.jdbc.core.SqlParameter;
10 import org.springframework.jdbc.object.MappingSqlQuery;
11 
12 public class FindQuery extends MappingSqlQuery {
13 
14   public FindQuery(DataSource ds) {
15     super(ds, QUERY);
16     compile();
17   }
18 
19   protected Object mapRow(ResultSet rs, int rownumthrows SQLException {
20 
21     User user = new User();
22 
23     user.setId(rs.getString("ID"));
24     user.setName(rs.getString("NAME"));
25 
26     return user;
27   }
28 
29   private static final String QUERY =
30     "SELECT * FROM SPRING_TABLE";
31 }

SQLクラスが継承するクラスは2通りあって、

  • 検索系:org.springframework.jdbc.object.MappingSqlQuery
  • 更新系:org.springframework.jdbc.object.SqlUpdate

となり、今回は検索系なのでMappingSqlQueryを継承して作成します。

コンストラクタ内で親クラスに実行するSQLを渡し、compileメソッドでコンパイル処理を実行します。

mapRowメソッドは、ResultSetの内容から結果を取得し、オブジェクトを生成して返却するというメソッドです。
あくまでもここで返却するのは1件のオブジェクトであって、このメソッド内ではループ処理などは行いません。

ここで返却されたオブジェクトは、親クラスがList型にまとめてDAOクラスに返却します。


続いてDAOクラスです。

SampleDAO.java
01 package jp.co.dgic.wiki.spring.sample4;
02 
03 import java.util.List;
04 
05 import org.springframework.dao.DataAccessException;
06 import org.springframework.jdbc.core.support.JdbcDaoSupport;
07 
08 public class SampleDAO extends JdbcDaoSupport {
09 
10   public SampleDAO() {
11     super();
12   }
13 
14   protected void initDao() throws Exception {
15     this.findQuery = new FindQuery(getDataSource());
16   }
17   
18   public List findAll() {
19     return findQuery.execute();
20   }
21   
22   private FindQuery findQuery;
23 }

DAOクラスは、org.springframework.jdbc.core.support.JdbcDaoSupportクラスを継承して作成します。
ちなみにこのJdbcDaoSupportは、InitializingBeanというインタフェースを実装しており、このインタフェースで宣言されたafterPropertiesSetというメソッドを持っています。
このInitializingBeanを実装したクラスは、springのIoCコンテナによってインスタンス化され、プロパティの設定が終わったタイミングでInitializingBeanで宣言された
afterPropertiesSetメソッドを呼び出すようになっています。


Attached File: [Attached File All List]

Lastmodified: 2005-12-04 (日) 01:11:51 (1740d)