【Spring】公式サイト教程読取りノート(三):SpringでJDBCを使って関係データにアクセスする


【はじめに】REST教程第三編では、SpringでJDBCを使ってデータにアクセスする方法を紹介します.原文のリンク http://spring.io/guides/gs/relational-data-access/
【ターゲット】ここでは、JdbcTemplateを使って、関係データベースのデータにアクセスするアプリケーションを作成します.
【準備作業】(軽自動車に慣れているので、pom.xmlの中のdependencisの内容だけを記載します.他の準備は原文を参考にしてもいいです.)
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
        </dependency>
        <dependency>
            <groupId>com.h2database</groupId>
            <artifactId>h2</artifactId>
        </dependency>
    </dependencies>
一つ目はスプリングアプリケーションのアーティファクトで、二つ目はjdbcで、三つ目はh 2データベースです.
以下で使用する簡単なデータベースアクセスロジック:お客様の名前を処理します.ここでCustomarクラスを作成します.
package hello;

public class Customer {
    private long id;
    private String firstName, lastName;

    public Customer(long id, String firstName, String lastName) {
        this.id = id;
        this.firstName = firstName;
        this.lastName = lastName;
    }

    @Override
    public String toString() {
        return String.format(
                "Customer[id=%d, firstName='%s', lastName='%s']",
                id, firstName, lastName);
    }

    // getters & setters omitted for brevity
}
データの保存と検索
Springはテンプレート類JdbcTemplateを提供しており、SQL関係データベースとJDBCに便利に利用できます.ほとんどのJDBCコードは、アクセスデータベースのアクセス許可、接続管理、異常処理、エラーチェックに制限されています.これらは完全にコードに関心がなくて、しなければならないことです.JdbcTemplateテンプレートは上の操作を完了します.このようにあなたは手元の仕事に関心を持つ必要があります.
(下のコードは長い)
package hello;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;

@SpringBootApplication
public class Application implements CommandLineRunner {

    public static void main(String args[]) {
        SpringApplication.run(Application.class, args);
    }

    @Autowired
    JdbcTemplate jdbcTemplate;

    @Override
    public void run(String... strings) throws Exception {
        System.out.println("Creating tables");
        jdbcTemplate.execute("drop table customers if exists");
        jdbcTemplate.execute("create table customers(" +
                "id serial, first_name varchar(255), last_name varchar(255))");

        String[] fullNames = new String[]{"John Woo", "Jeff Dean", "Josh Bloch", "Josh Long"};
        for (String fullname : fullNames) {
            String[] name = fullname.split(" ");
            System.out.printf("Inserting customer record for %s %s
", name[0], name[1]); jdbcTemplate.update( "INSERT INTO customers(first_name,last_name) values(?,?)", name[0], name[1]); } System.out.println("Querying for customer records where first_name = 'Josh':"); List<Customer> results = jdbcTemplate.query( "select id, first_name, last_name from customers where first_name = ?", new Object[] { "Josh" }, new RowMapper<Customer>() { @Override public Customer mapRow(ResultSet rs, int rowNum) throws SQLException { return new Customer(rs.getLong("id"), rs.getString("first_name"), rs.getString("last_name")); } }); for (Customer customer : results) { System.out.println(customer); } } }
@Spring Bootationの注釈は第一篇で述べたことがあります.Spring 4が導入した注釈で、複数の注釈を完成する機能です.
メインメソッドのSpringAppleication.runも第一編に登場しましたが、ここでの役割は第一編と同じです.
Spring BootはH 2データベースを実行して、メモリデータベースエンジンと自動接続します.私たちはspring-jdbcを使っていますので、SpringBootは自動的にJdbcTemplateテンプレート類を作成します.ドメイン@Autowired JdbcTemplate jdbcTemplate;JdbcTemplateのインスタンスを作成して、自動的にデータベースをロードして接続します.Jdbcサービスを提供してくれます.
このクラスは、アプリケーションのコンテキストローディングが完了した後、run()メソッドを実行するインターフェースCommand Linerを実現します.
  • まず、JdbcTemplate.execute()の方法でDDLをインストールする必要があります.
  • その後、JdbcTemplate.udate()を使って新生産の表に有人記録を行います.
  • udate()メソッドの最初のパラメータは、クエリ文であり、最後のパラメータ(配列s)は、クエリ文の中のプレースホルダと一致するために使用されますか?使うプレースホルダと変数バインディングはSQL注入攻撃SQL injection tacksを防ぐことができます.
  • 最後に、query()方法を使って表の中で条件に合った記録を遍歴しました.ここでもプレースホルダを使いましたか?変数と結合します.query()メソッドの最後のパラメータはRowMapperの例であり、彼はあなたに提供されます.Springは90%の仕事をしましたが、結果をどのように処理したらいいのか分かりませんので、この例でデータベースで調べた結果をBeanにマッピングして、query()はこのマッピングを呼び出してbeanオブジェクトとして現れる結果セットに組み立てます.
  • Buildと実行
    前の2編と同じで,省略する.
    【結び目】JdbcTemplateの使い方を把握し、@Spring Bootaplicationの注釈とSprigAplication.run()の方法を復習し、@AutoWiredはJdbcTemplateオブジェクトの実例化を実現し、Command Linerインターフェース、RowMapper<T>類のqueryでの使い方