コンピュータクワガタ

かっぱのかっぱによるコンピュータ関連のサイトです

Spring JDBCの紹介 No. 2

Spring JDBCの2回目です。

今回は更新系の処理のパラメータ処理を通して、Spring JDBCの便利なところを確認していきます。

NamedParameterJdbcTemplate

今回はNamedParameterJdbcTemplateを使います。そのため、最初にBean定義をしておきます。

<bean class="org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate">
 <constructor-arg ref="dataSource" />
</bean>

NamedParameterJdbcTemplateを使うとその名の通り、パラメーターに名前をつけて処理することができます。

パラメーターに名前をつける

INSERT処理を通して、パラメーターに名前をつける例を見ていきます。

public int insert(Book book) {
    return npJdbcTemplate.update(
            "INSERT INTO BOOK(book_id,book_name,price) "
                    + "VALUES(:book_id,:book_name,:price)",
            new MapSqlParameterSource()
                    .addValue("book_id", book.getBookId())
                    .addValue("book_name", book.getBookName())
                    .addValue("price", book.getPrice()));
}

INSERT文のパラメーターに?の代わりに「:」から始まるパラメーター名を指定します。パラメーター名は任意の名前を指定できます。

パラメーターに値を渡すには、MapSqlParameterSourceオブジェクトを利用します。名前の通り、パラメーター名に対して渡す値を設定します。

addValueする順番は関係ありません。パラメーターの名前でmapされるので、パラメーターの名前があっていれば問題ありません。

Javaオブジェクトでパラメーターを渡す

次に、UPDATE文を通してJavaオブジェクトからパラメータを渡す例を見ていきます。

public int update(Book book) {
    BeanPropertySqlParameterSource beanProps = new BeanPropertySqlParameterSource(
            book);
    return npJdbcTemplate.update("UPDATE book "
            + "SET book_name=:bookName,price=:price WHERE book_id=:bookId",
            beanProps);
}

INSERTと同様にSQLのパラメータには名前をつけます。ただし、今回はパラメータとして渡すJavaBeansオブジェクトのプロパティ名とします。

パラメータはBeanPropertySqlParameterSourceオブジェクトを渡します。コンストラクタでパラメータを含んだJavaBeansオブジェクトを指定することで適切に読み取ってくれます。

Spring3入門 ――Javaフレームワーク・より良い設計とアーキテクチャ

Spring3入門 ――Javaフレームワーク・より良い設計とアーキテクチャ

まとめ http://kuwalab.hatenablog.jp/entry/spring
最初 http://kuwalab.hatenablog.jp/entry/spring_jdbc/1
前回 http://kuwalab.hatenablog.jp/entry/spring_jdbc/1
次回 http://kuwalab.hatenablog.jp/entry/spring_jdbc/3