「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