スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

Spring MVC Spring Data JDBCを使ってみる

前回・前々回とJPAを使ってデータアクセスをしてみたが、今回はSpring JDBCを使って実装してみる。
なお、掲載内容については、前々回記事との差分をメインとする。

■前々回のSpring Data JPAに関する記事
Spring MVC Spring Data JPAを使ってみる

◎動作検証にあたっての各バージョンは以下の通り
  • SpringFramework 3.2.8.RELEASE
  • Java 1.7
  • Tomcat 7.0

1.Mavenのpom.xml



org.springframework
spring-jdbc
3.2.8.RELEASE


com.h2database
h2
1.4.178


データベースは、H2を使用している。

2.datasource-config.xml


<jdbc:embedded-database id="dataSource" type="H2">
<jdbc:script location="classpath:sql/login.sql"/>
<jdbc:script location="classpath:sql/book.sql"/>
</jdbc:embedded-database>

<!-- Spring JDBC -->
<bean class="org.springframework.jdbc.core.JdbcTemplate">
<constructor-arg ref="dataSource"/>
</bean>

Spring JDBCを使うための設定は、<!-- Spring JDBC -->以下の3行となる。

3.BookDaoImplTemplate.java


package jp.co.sample.book.dao;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.stereotype.Repository;

import jp.co.sample.book.entity.BookEntity;

@Repository
public class BookDaoImplTemplate implements BookDao<BookEntity> {

@Autowired
private JdbcTemplate jdbcTemplate;

@Override
public List<BookEntity> findAll() {
String sql = "SELECT * FROM Book";
List<BookEntity> entities = jdbcTemplate.query(sql, new RowMapper<BookEntity>() {
public BookEntity mapRow(ResultSet rs, int rowNum) throws SQLException {
BookEntity entity = new BookEntity();
entity.setBookId(rs.getLong("book_id"));
entity.setBookName(rs.getString("book_name"));
entity.setPrice(rs.getInt("price"));
return entity;
}
});
return entities;
}
}

取得結果をエンティティのリストで返す場合は、queryメソッドを使用する。
RowMapper
インターフェースは「org.springframework.jdbc.core」パッケージ配下に存在し、「mapRow(ResultSet, int) : T」の1メソッドだけ定義されている。サンプルでは匿名クラスを使っている。mapRowメソッドのメリットは、1レコード単位でフレームワークから呼ばれるため、開発者は煩わしいループ処理を記載しなくて済む。

4.BookServiceImpl.java


package jp.co.sample.book.service;

import java.util.List;

import jp.co.sample.book.dao.BookDao;
import jp.co.sample.book.entity.BookEntity;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Service;

@Service
public class BookServiceImpl implements BookService<BookEntity> {

@Autowired
@Qualifier(value="bookDaoImplTemplate")
BookDao<BookEntity> dao;

@Override
public List<BookEntity> findAll() {
return dao.findAll();
}
}

@Qualifier(value="bookDaoImplTemplate")を追加している。理由は、前々回の記事にてBookDaoを実装したクラスがすでに存在するため、どちらをインジェクションするのか指定する必要があるためだ。

5.動作確認

リスト

レコードセットからエンティティへの詰め替え処理を記載しないといけない点がやや古さを感じさせるが、SQLが使用でき、学習コストは低いと思われる。ただSQLを使うのであれば、MyBatisの方が良いかな。

■過去のSpring関連記事
Spring関連記事 Index

スポンサーサイト

コメントの投稿

非公開コメント

プロフィール

bookmount8

Author:bookmount8
システムエンジニア。サーバーサイドでjavaを扱うことが多い。最近は、ミドルやフロント周りも関心あり。

最新記事
カテゴリ
検索フォーム
最新コメント
月別アーカイブ
これまでの訪問者数
ブロとも申請フォーム

この人とブロともになる

RSSリンクの表示
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。