springのSQL select結果をRowMapper(オブジェクト)で取得する方法

spring

以前springでDB結果を複数件取得する方法を紹介しました。こちらの方法は取得した結果をMapに入れて返却しています。
Map返しは不便です。(キッパリ)
実運用には正直向いていないかなーと思います。

ORマッパーのようにオブジェクト返しが出来たら便利ですよね。
はい。もちろんspringもオブジェクト返しが出来ます。

今回は、select結果をオブジェクト返しする方法を紹介します。

[スポンサーリンク]

この章でやること

RowMapperを使って、select結果をオブジェクトにして返却します。

springでDB操作する方法

過去にDB接続方法の記事を書きました。
DB接続がまだの方は、こちらを参照して下さい。
springのDB接続方法を解説

select結果をオブジェクトにして返却するプログラム

@Component
public class ExampleDaoImpl implements ExampleDao {

	@Autowired
	private JdbcTemplate jdbcTemplate;

	@Override
	public List<SampleDto> find() {

		RowMapper<SampleDto> mapper = new BeanPropertyRowMapper<SampleDto>(SampleDto.class);
		List<SampleDto> dtoList = 
				jdbcTemplate.query("select * from sample", mapper);
		for (SampleDto dto : dtoList) {
			System.out.println(dto.getId());
			System.out.println(dto.getName());
		}
		return dtoList;
	}

}

返却オブジェクト(SampleDto)

setter、getterは必ず入れてください。
もし入れなかったら、データが取得できません。

public class SampleDto {

	private int id;
	private String name;
	
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	
}

テーブルデータ

サンプルプログラム内で使用している、テーブル構成と、insertしているデータです。

CREATE TABLE `sample` (
   `id` int(11) NOT NULL AUTO_INCREMENT,
   `name` varchar(20) DEFAULT NULL,
   PRIMARY KEY (`id`)
 ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8
 
insert into sample values(1,'test');

解説

ExampleDaoImplクラスの12行目で、mapperを引数に指定しています。
これでselect結果の戻り値は、RowMapperになります。

注意して下さい!
mapperに指定するデータオブジェクトクラス(SampleDto)は、フィールドのsetterメソッドとgetterメソッドを用意して下さい。
もしこれらがないと正常に動作しません。(値が空になってしまいます。)

springMVCのバージョン

org.springframework-versionは、3.1.0を使っています。
javaは、1.7を使っています。

最後に

select結果を複数件を取得する方法は、DBを使っているシステムであれば、色々な場面で使うことになります。
DBを使わないシステムは非常に稀な気がしますが、、、

select結果はMapよりもオブジェクトで返却する方が、保守の観点からみて断然良いです。
3日たてば自分が書いたコードでも忘れてしまいます。
BeanPropertyRowMapperを活用しましょう!
それでは!