【Spring】公式サイト教程読取りノート(三):SpringでJDBCを使って関係データにアクセスする
【はじめに】REST教程第三編では、SpringでJDBCを使ってデータにアクセスする方法を紹介します.原文のリンク http://spring.io/guides/gs/relational-data-access/
【ターゲット】ここでは、JdbcTemplateを使って、関係データベースのデータにアクセスするアプリケーションを作成します.
【準備作業】(軽自動車に慣れているので、pom.xmlの中のdependencisの内容だけを記載します.他の準備は原文を参考にしてもいいです.)
以下で使用する簡単なデータベースアクセスロジック:お客様の名前を処理します.ここでCustomarクラスを作成します.
Springはテンプレート類JdbcTemplateを提供しており、SQL関係データベースとJDBCに便利に利用できます.ほとんどのJDBCコードは、アクセスデータベースのアクセス許可、接続管理、異常処理、エラーチェックに制限されています.これらは完全にコードに関心がなくて、しなければならないことです.JdbcTemplateテンプレートは上の操作を完了します.このようにあなたは手元の仕事に関心を持つ必要があります.
(下のコードは長い)
メインメソッドの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での使い方
【ターゲット】ここでは、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を実現します.
前の2編と同じで,省略する.
【結び目】JdbcTemplateの使い方を把握し、@Spring Bootaplicationの注釈とSprigAplication.run()の方法を復習し、@AutoWiredはJdbcTemplateオブジェクトの実例化を実現し、Command Linerインターフェース、RowMapper<T>類のqueryでの使い方