コンピュータクワガタ

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

Spring JDBCの紹介 No. 3

Spring JDBCの3回目です。

今回はSELECT時のNamedParameterJdbcTemplateのサンプルです。

今回のソースです。

@Autowired
private JdbcTemplate jdbcTemplate;

@Autowired
private NamedParameterJdbcTemplate npJdbcTemplate;

public List<Book> searchBookList1(String bookName) {
    return jdbcTemplate.query("SELECT * FROM book WHERE book_name LIKE ?",
            new BeanPropertyRowMapper<Book>(Book.class), bookName + "%");
}

public List<Book> searchBookList2(String bookName) {
    return npJdbcTemplate.query(
            "SELECT * FROM book WHERE book_name LIKE :book_name",
            new MapSqlParameterSource().addValue("book_name", bookName),
            new BeanPropertyRowMapper<Book>(Book.class));
}

public List<Book> searchBookList3(Book book) {
    return npJdbcTemplate.query(
            "SELECT * FROM book WHERE book_name LIKE :bookName",
            new BeanPropertySqlParameterSource(book),
            new BeanPropertyRowMapper<Book>(Book.class));
}

?にパラメータを渡す

?にパラメータを渡す例です。3番目の引数は可変長になっているため、?の数に合わせて?の順番通りにパラメータを渡していきます。

public List<Book> searchBookList1(String bookName) {
    return jdbcTemplate.query("SELECT * FROM book WHERE book_name LIKE ?",
            new BeanPropertyRowMapper<Book>(Book.class), bookName + "%");
}

2番目の引数にBeanPropertyRowMapperを指定しています。これは引数のclassのオブジェクトを作成し、SELECT文で取得した列名をJavaオブジェクトのプロパティに割り当てます。このとき「_」で区切られた列名の場合にはそのままのプロパティがあればそのまま、なければキャメルケースに変換して割り当てます。今回の場合book_nameやbook_idというプロパティが無いため、自動的にbookNameとbookIdに値が割り当てられています。

パラメーター名

前回と同様、?ではなくパラメーター名を指定して値を設定することができます。

public List<Book> searchBookList2(String bookName) {
    return npJdbcTemplate.query(
            "SELECT * FROM book WHERE book_name LIKE :book_name",
            new MapSqlParameterSource().addValue("book_name", bookName),
            new BeanPropertyRowMapper<Book>(Book.class));
}

JavaBeansでパラメーターを渡す

同様にJavaBeansでもパラメーターが渡せます。

public List<Book> searchBookList3(Book book) {
    return npJdbcTemplate.query(
            "SELECT * FROM book WHERE book_name LIKE :bookName",
            new BeanPropertySqlParameterSource(book),
            new BeanPropertyRowMapper<Book>(Book.class));
}

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/2
次回 http://kuwalab.hatenablog.jp/entry/spring_jdbc/4