SpringのJDBCの例

Spring + JDBCの例

このチュートリアルでは、JDBCサポートを追加して最後のMaven + Spring hello world exampleを拡張し、Spring + JDBCを使用してレコードを顧客テーブルに挿入します。

1. 顧客テーブル

この例では、MySQLデータベースを使用しています。

CREATE TABLE `customer` (
  `CUST_ID` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `NAME` varchar(100) NOT NULL,
  `AGE` int(10) unsigned NOT NULL,
  PRIMARY KEY (`CUST_ID`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;

2. プロジェクトの依存関係

SpringとMySQLの依存関係をMavenpom.xmlファイルに追加します。

ファイル:pom.xml


  4.0.0
  com.example.common
  SpringExample
  jar
  1.0-SNAPSHOT
  SpringExample
  http://maven.apache.org

  

        
    
        org.springframework
        spring
        2.5.6
    

        
    
        mysql
        mysql-connector-java
        5.1.9
    

  

3. 顧客モデル

顧客モデルを追加して、顧客のデータを保存します。

package com.example.customer.model;

import java.sql.Timestamp;

public class Customer
{
    int custId;
    String name;
    int age;
    //getter and setter methods

}

4. データアクセスオブジェクト(DAO)パターン

顧客Daoインターフェース。

package com.example.customer.dao;

import com.example.customer.model.Customer;

public interface CustomerDAO
{
    public void insert(Customer customer);
    public Customer findByCustomerId(int custId);
}

Customer Daoの実装では、JDBCを使用して単純な挿入および選択ステートメントを発行します。

package com.example.customer.dao.impl;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import javax.sql.DataSource;
import com.example.customer.dao.CustomerDAO;
import com.example.customer.model.Customer;

public class JdbcCustomerDAO implements CustomerDAO
{
    private DataSource dataSource;

    public void setDataSource(DataSource dataSource) {
        this.dataSource = dataSource;
    }

    public void insert(Customer customer){

        String sql = "INSERT INTO CUSTOMER " +
                "(CUST_ID, NAME, AGE) VALUES (?, ?, ?)";
        Connection conn = null;

        try {
            conn = dataSource.getConnection();
            PreparedStatement ps = conn.prepareStatement(sql);
            ps.setInt(1, customer.getCustId());
            ps.setString(2, customer.getName());
            ps.setInt(3, customer.getAge());
            ps.executeUpdate();
            ps.close();

        } catch (SQLException e) {
            throw new RuntimeException(e);

        } finally {
            if (conn != null) {
                try {
                    conn.close();
                } catch (SQLException e) {}
            }
        }
    }

    public Customer findByCustomerId(int custId){

        String sql = "SELECT * FROM CUSTOMER WHERE CUST_ID = ?";

        Connection conn = null;

        try {
            conn = dataSource.getConnection();
            PreparedStatement ps = conn.prepareStatement(sql);
            ps.setInt(1, custId);
            Customer customer = null;
            ResultSet rs = ps.executeQuery();
            if (rs.next()) {
                customer = new Customer(
                    rs.getInt("CUST_ID"),
                    rs.getString("NAME"),
                    rs.getInt("Age")
                );
            }
            rs.close();
            ps.close();
            return customer;
        } catch (SQLException e) {
            throw new RuntimeException(e);
        } finally {
            if (conn != null) {
                try {
                conn.close();
                } catch (SQLException e) {}
            }
        }
    }
}

5. Spring Beanの構成

customerDAOおよびデータソースのSpringBean構成ファイルを作成します。
File : Spring-Customer.xml



    
        
    

ファイル:Spring-Datasource.xml



    

        
        
        
        
    

ファイル:Spring-Module.xml



    
    

6. プロジェクト構造を確認する

この例の完全なディレクトリ構造。

image

7. それを実行します

package com.example.common;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.example.customer.dao.CustomerDAO;
import com.example.customer.model.Customer;

public class App
{
    public static void main( String[] args )
    {
        ApplicationContext context =
            new ClassPathXmlApplicationContext("Spring-Module.xml");

        CustomerDAO customerDAO = (CustomerDAO) context.getBean("customerDAO");
        Customer customer = new Customer(1, "example",28);
        customerDAO.insert(customer);

        Customer customer1 = customerDAO.findByCustomerId(1);
        System.out.println(customer1);

    }
}

出力

Customer [age=28, custId=1, name=example]

ソースコードをダウンロード

ダウンロード–SpringJDBCExample.zip(10 KB)