📝

はじめてのSpringBoot6 ~JDBC:実装準備~

2020/12/20に公開

はじめに

はじめまして
私はJavaを研修で少しかじった程度でSpringBootを使用した開発に参加し、てんやわんやしております森田和華です。
全く分からない中から少しずつ調べて実装をしていますが、自分の学習の為にも記事にして残しておこうと思い作成しております。
参考にしていただける際はそのあたりを念頭に置いたうえで参考にしていただければと思います。
もし私の記事を読んでおかしなところなどありましたらご指摘いただけると嬉しいです。
前回までの記事はこちらです。
はじめてのSpringBoot1 ~プロジェクトの作成~
はじめてのSpringBoot2 ~DB接続~
はじめてのSpringBoot3 ~ログイン機能その1~
はじめてのSpringBoot4 ~ログイン機能その2~
はじめてのSpringBoot5 ~ログイン機能その3~

環境

SpringBootバージョン:2.4.0
Javaバージョン:8
DB:MySQL 8.0
IDE:eclipse

今回の目標

前回まででログイン画面をカスタマイズで表示し認証パラメータをDBで制御しました。
今回はその際にサラッとすすめてしまったDBからのレコード取得について勉強していきます。
まずSpringで提供されているデータアクセスライブラリには
SpringJDBC
JPA(ログイン機能で使ったのはこれ)
Hibernate
MyBatis
などがあるようです。
とりあえずすべてを勉強するのは難しいのでまずはSpringJDBCから勉強していきたいと思います。

SpringJDBCとは

SpringJDBCライブラリはSQLの内容に関わらず共通で行われる典型的なJDBCの処理を代替して行ってくれるというものだそうです。
・コネクションのオープン、クローズ
・SQLステートメントの実行
・処理結果行の繰り返し処理
・例外ハンドリング
このような機能は代替してくれ、
・SQLの定義
・パラメータの設定
・ResultSetの取得結果において各レコードに対して実行したい処理
などの重要な処理のみの実装に限定することが出来るようです。

SpringJDBC実践

ではざっくりとSpringJDBCがどんなものか分かったところで、実装方法を確かめていきます。

利用準備

まず依存関係を確認します。SpringBootJDBCと使っているDBの依存関係が記載があれば問題ありません。

pom.xml
<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
	<groupId>mysql</groupId>
	<artifactId>mysql-connector-java</artifactId>
	<scope>runtime</scope>
</dependency>

JDBCTemplateクラス

SQLによるデータアクセスのためにJDBCTemplate,NamedParameterJdbcTemplateが用意されています。(両者の違いはバインド変数の指定方法の違いなどがあるようです。)
今回はJDBCTemplateを使用していきたいと思います。
まずRepositoryクラスでDBへのアクセスを行います。

JDBCtestRepository.java
package com.elpmas.test.domain.repository;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Repository;

@Repository
public class JDBCtestRepository {

	@Autowired
	JdbcTemplate  jdbctemplate; //jdbcを利用するためのJdbcTemplate(SpringBootでは自動でBean定義されるのでAutowiredのみで使える)

	public List findAll(){
		String sql ="SELECT * FROM book_sample ORDER BY id";
		return jdbctemplate.queryForList(sql);
	}
}

次に取得してきたデータを画面表示するためにContorollerの修正を行います。
今回は前回までのログイン完了画面に出力することにします。

SampleContoroller.java
package com.elpmas.test.controller;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;

import com.elpmas.test.domain.repository.JDBCtestRepository;

@Controller
public class SampleContoroller {

	@Autowired
	JDBCtestRepository jdbcTestRepository;

	@GetMapping("/sample")
    public String getSamplePage(Model model) {

		List bookAll = jdbcTestRepository.findAll();
		model.addAttribute("bookAll",bookAll);

        return "sample";
    }
}

Contorollerの修正が完了したら次はViewの修正です。

sample.html
<div th:each="book:${bookAll}" >
	<div th:text="'ID:'+${book.id}"></div>
	<div th:text="'タイトル:'+${book.title}"></div>
	<div th:text="'概要:'+${book.summary}"></div>
	<div th:text="'分類:'+${book.classification}"></div>
</div>

最後に実際に表示するデータを作成します。
何でもいいので今回は読書管理ツールを作るイメージで書籍テーブルを作成しました。

動作確認

では、実際に動作を確認していきます。

ログインすると、

無事に画面にDBの中身が表示されました。

次回

今回はJdbcTemplateの中でもqueryForListというメソッドを使用してみました。
参考文献の中には
・queryForObject
・queryForMap
・query
・update
のメソッドも紹介されているので次回からはこの辺も少しずつ何が違うのかなど検証していきたいと思います。

参考文献

Spring徹底入門 Spring FrameworkによるJavaアプリケーション開発 (著 株式会社NTTデータ)
https://www.shoeisha.co.jp/book/detail/9784798142470

Discussion