「Spring」JdbcTemplate でデータベースにアクセスする

Spring 3 系で JdbcTemplate 使って DB アクセスするサンプル書いてみたので、メモしておきます。

今回、データベースには PostgreSQL を使いました。以下のようなテーブルを用意しておきます。

testdb=# select * from t1;
 id | name
----+------
  1 | hoge
  2 | uga


Bean 定義ファイル ( dataSource.xml ) と コード ( Main.java ) を作成します。それぞれ内容は以下の通りです。

■ dataSource.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xmlns:context="http://www.springframework.org/schema/context"
  xsi:schemaLocation="
        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd">
        
  <!-- プレースホルダで外出しした方がいい -->
  <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
    <property name="driverClassName" value="org.postgresql.Driver" />
    <property name="url" value="jdbc:postgresql://127.0.0.1:5432/testdb" />
    <property name="username" value="postgres" />
    <property name="password" value="postgres" />
  </bean>
 
  <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
    <property name="dataSource" ref="dataSource" />
  </bean>
  
  <bean id="main" class="com.example.datasource.Main"/>
</beans>

■ Main.java

package com.example.datasource;

import java.util.List;
import java.util.Map;

import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.jdbc.core.JdbcTemplate;

public class Main {

	JdbcTemplate jdbcTemplate;

	public static void main(String[] args) {
		try (ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("dataSource.xml")) {
			Main instance = (Main) context.getBean("main");
			instance.jdbcTemplate = (JdbcTemplate) context.getBean("jdbcTemplate");
			instance.select();
		}
	}

	private void select() {
		List<Map<String, Object>> result = jdbcTemplate.queryForList("select * from t1");
		for (Map<String, Object> r : result) {
			System.out.println(r.get("id").toString() + " : " + r.get("name").toString());
		}
	}
}

■ 実行結果

1 : hoge
2 : uga

ちゃんとデータ取れてますね。


dataSource.xml、Main.java を以下の感じにして、アノテーション使ってやってもいいですね ( こっちが普通かな・・・ )。

■ dataSource.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xmlns:context="http://www.springframework.org/schema/context"
  xsi:schemaLocation="
        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd">
        
  <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
    <property name="driverClassName" value="org.postgresql.Driver" />
    <property name="url" value="jdbc:postgresql://127.0.0.1:5432/testdb" />
    <property name="username" value="postgres" />
    <property name="password" value="postgres" />
  </bean>
 
  <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
    <property name="dataSource" ref="dataSource" />
  </bean>
  
  <context:annotation-config />
  <context:component-scan base-package="com.example.datasource" />
</beans>

Main クラスを作成する。

■ Main.java

package com.example.datasource;

import java.util.List;
import java.util.Map;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Component;

@Component
public class Main {

	@Autowired
	JdbcTemplate jdbcTemplate;

	public static void main(String[] args) {
		try (ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("dataSource.xml")) {
			context.getBean(Main.class).select();
		}
	}

	private void select() {
		List<Map<String, Object>> result = jdbcTemplate.queryForList("select * from t1");
		for (Map<String, Object> r : result) {
			System.out.println(r.get("id").toString() + " : " + r.get("name").toString());
		}
	}
}


API ドキュメントは以下にあります。

・JdbcTemplate (Spring Framework 3.2.13.RELEASE API)
< http://docs.spring.io/spring/docs/3.2.x/javadoc-api/org/springframework/jdbc/core/JdbcTemplate.html >

・DriverManagerDataSource (Spring Framework 3.2.13.RELEASE API)
< http://docs.spring.io/spring/docs/3.2.x/javadoc-api/org/springframework/jdbc/datasource/DriverManagerDataSource.html >

以上です。

[ 環境情報 ]
Windows 7 SP1
Java SE 7 Update 51
Spring Framework 3.2.13
PostgreSQL 9.0.4
PostgreSQL JDBC Driver 9.0-801