springのDB接続方法を解説

spring

KVSが流行っている昨今でもWebアプリとDBは切っても切れない縁ですね。今回はspringのDB接続方法を紹介します。

仕事でspringを使っている方も多いと思います。
スクラッチ(新規)でspringフレームワークを使って構築せずに、会社で用意されたプロジェクトを使って開発していると、どうしてもDB接続部分などのコアな部分が疎遠になりがちです。
いざスクラッチ(新規)で構築しようと思ったら・・・あれ?なんてことにも。。

今回は、springフレームワークのDB(MySQL)接続のみを解説します。
今からspringフレームワークを使ってプロジェクト構築を予定している方は是非参考にしていただけると幸いです。

[スポンサーリンク]

この章でやること

springのDB接続のみの簡単なプロジェクトを紹介します。

maven(pom.xml)の設定

pom.xmlへ以下を追加します。
DB接続では、spring-jdbcmysql-connector-javaを使用します。

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>3.2.2.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.25</version>
        </dependency>

spring設定ファイル(servlet-context.xml)の設定

JdbcTemplatedataSourceを設定します。
${jdbc.url}の部分には、9行目で指定したプロパティファイルの値が入ります。

プロパティファイルは、src/main/resources直下に置いて下さい。
classpath:の説明については、springMVCのclasspathとfileの違いを見てください。

    <bean id="dataSource" 
        class="org.springframework.jdbc.datasource.DriverManagerDataSource" >
        <property name="driverClassName" value="${jdbc.driverClassName}" /> 
        <property name="url" value="${jdbc.url}" /> 
        <property name="username" value="${jdbc.username}" />
        <property name="password" value="${jdbc.password}" />
    </bean>

    <context:property-placeholder location="classpath:jdbc.properties"/>

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

プロパティファイル(jdbc.properties)の設定例です。

jdbc.driverClassName=org.gjt.mm.mysql.Driver
jdbc.url=jdbc:mysql://127.0.0.1:3306/test_db
jdbc.username=root
jdbc.password=root

DBアクセスするプログラム

25行目でJdbcTemplateでselect文を発行しています。
27行目で、sampleテーブルのnameカラムの値をJSPに設定しています。

@Controller
public class HomeController {
	
	@Autowired
	private JdbcTemplate jdbcTemplate;

	private static final Logger logger = LoggerFactory.getLogger(HomeController.class);
	
	/**
	 * DDL
	 * 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
	 * 
	 * DML
	 * insert into sample values(1,'test');
	 */
	@RequestMapping(value = "/", method = RequestMethod.GET)
	public String home(Locale locale, Model model) {
		logger.info("Welcome home! The client locale is {}.", locale);

		// データ取得テーブルは、当メソッドのコメント文のDDLとDMLを流して事前に用意して下さい。
		List<Map<String, Object>>  list = jdbcTemplate.queryForList("select * from sample");

		model.addAttribute("data", list.get(0).get("name") );
		return "home";
	}
	
}

今回はJSPも使用したので、JSPのソースも載せておきます。

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ page session="false" %>
<html>
<head>
	<title>Home</title>
</head>
<body>
<h1>
	Hello world!  
</h1>

<P>  DB's data is ${data}. </P>
</body>
</html>

実行結果

みんな大好きHello World!
「test」の部分がDB値です。

spring-datasource-basic1

springMVCのバージョン

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

ダウンロード

GitHubでサンプルソースを公開しています。こちらからご自由にダウンロードして下さい。
demo

最後に

DB接続はいかがでしたか?
意外と簡単だったのではないでしょうか。
jdbc.propertiesにDB接続情報を外だし&読み込みするあたりは、spring特有の設定方法だなぁと感じました。
DB接続情報は、mavenのprofileを使って、開発環境や本番環境ごとに設定することも可能です。
環境ごとに値を変更する方法は、profilesを使って、環境毎に異なる設定値(propertyファイル)を変更する方法を参照して下さい。

今回は、SQLをControllerクラスに直接書きましたが、本来はDaoを作るべきですね。
サンプルソースということでご勘弁を!
それでは!