JavaとMySQL
JDBCとは
JDBC (Java Database Connectivity)は、Javaプログラムが異なる種類のデータベースにアクセスするためのAPIです。JDBCを使用することで、データベースにクエリを送信し、データの取得、更新、削除などの操作を行うことができます。

データベースに依存しない
JDBCは、データベース固有のコードとJavaコードを分離し、プラットフォーム非依存なデータベースアクセスを実現します。
mysql-connector-java
mysql-connector-javaはMySQLデータベースにアクセスするためのJDBCドライバで、JavaプログラムとMySQLサーバーの通信を担当します。

インストール
SpringからMySQLに接続するために「mysql-connector-java」をインストールします。pom.xml に「mysql-connector-java」ライブラリの依存を追加します。
pom.xml
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.30</version>
</dependency>

- MaveのDependencies からでも自動追加可能だが、バージョンに注意が必要です
JPA
ORMとは
ORM(Object-Relational Mapping)は、プログラムのオブジェクトとデータベースとの間でデータ変換(マッピング) するプログラムです。

ORMには以下のような特徴があります。
クラスオブジェクトでデータ操作
RDBではSQLでデータ操作するために、モデルクラスのメソッドなどでプログラミングします。
オブジェクトとRDBテーブルのマッピング
オブジェクトとRDBテーブルとの対応を定義し、オブジェクト指向プログラミングで扱いやすい形式でRDB操作できます。
クエリの抽象化
SQLなどのクエリを直接書かずに、プログラミングコードで処理します。データベース操作に必要なSQLの知識が少なくてもデータ操作でき、データベースの種類に依存しません。
リレーション管理
オブジェクト間のリレーションをDB内のテーブルと同期させることができます。これにより、面倒なDB操作がプログラムで処理できます。
Spring Data JPA
JPAとは
JPA(Java Persistence API)はJavaのORMツールの1つで、JavaオブジェクトとRDBのデータマッピングします。JPAを使用すると、DBデータアクセスやクエリの自動生成、ページング処理などが簡単に実装できます。

Spring Data JPAとは
SpringでJPAを利用するには、Spring Data JPAライブラリのインストールが必要です。Spring Data JPAで、CRUD(Create, Read, Update, Delete)操作を簡単に実装でき、データ永続化ができます。
ライブラリ依存追加
spring-boot-starter-data-jpa ライブラリの依存を追加します。※MaveのDependenciesからでも自動追加可能
pom.xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>

- MaveのDependenciesからでも自動追加可能だが、バージョンに注意
データベース作成
MySQLデータベース「mynews」を作成します。

データベース名 | ポート | ユーザ名 | パスワード |
---|---|---|---|
mynews | 3306 | root |
- ユーザ名、パスワードは任意
テーブル定義
「schema.sql」作成
「src/main/resouces/」に「schema.sql」を作成します。

DDL(テーブル定義)
「schema.sql」にDDLを記述します。
schema.sql
CREATE TABLE IF NOT EXISTS users (
id bigint PRIMARY KEY AUTO_INCREMENT,
name varchar(255) NOT NULL,
email varchar(255) UNIQUE NOT NULL,
email_verified_at datetime NULL DEFAULT NULL,
password varchar(255) NOT NULL,
remember_token varchar(100) DEFAULT NULL,
created_at datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
updated_at datetime NULL DEFAULT NULL
);
CREATE TABLE IF NOT EXISTS articles (
id bigint PRIMARY KEY AUTO_INCREMENT,
title varchar(255) NOT NULL,
body TEXT NOT NULL,
image_path varchar(255) DEFAULT NULL,
posted_at datetime NOT NULL,
created_at datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
updated_at datetime NULL DEFAULT NULL
);
users
項目 | カラム | データ型 | NOT NULL | その他 |
---|---|---|---|---|
ID | id | bigint | NOT NULL | Primary Key |
作成日 | created_at | datetime | NOT NULL | CURRENT_TIMESTAMP |
更新日 | updated_at | datetime | NULL | |
氏名 | name | varchar(255) | NOT NULL | |
varchar(255) | NOT NULL | |||
Email認証日 | email_verified_at | datetime | NULL | |
パスワード | password | varchar(255) | NOT NULL | |
トークン | remember_token | varchar(100) | NULL |
articles
項目 | カラム | データ型 | NOT NULL | その他 |
---|---|---|---|---|
ID | id | bigint | NOT NULL | Primary Key |
作成日 | created_at | datetime | NOT NULL | CURRENT_TIMESTAMP |
更新日 | updated_at | datetime | NULL | |
投稿日 | posted_at | datetime | NOT NULL | |
タイトル | title | varchar(255) | NOT NULL | |
本文 | body | TEXT | NOT NULL | |
画像パス | image_path | varchar(255) | NOT NULL |
application.properties
application.propertiesは、アプリケーションの動作や構成などをカスタマイズする設定ファイルです。データベース接続情報、ポート番号、キャッシュ設定、プロファイルごとの設定などを定義します。
application.propertiesのパス
application.propertiesはデフォルトで「src/main/resources/」に作成されており、アプリケーション実行時に自動読み込みされます。

データベース接続設定
application.propertiesに、MySQLの接続情報を設定します。
application.properties
spring.datasource.url=jdbc:mysql://localhost:3306/mynews
spring.datasource.username=root
spring.datasource.password=
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.sql.init.mode=always
項目 | プロパティ | 設定値 |
---|---|---|
接続URL | spring.datasource.url | jdbc:mysql://localhost:3306/mynews |
ユーザ名 | spring.datasource.username | root |
パスワード | spring.datasource.password | |
ドライバー | spring.datasource.driver-class-name | com.mysql.jdbc.Driver |
SQL初期化モード | spring.sql.init.mode | always |
spring.sql.init.mode
spring.sql.init.modeで、 「src/main/resources/schema.sql」を自動実行するか設定します。alwaysはアプリケーション起動時に常にschema.sqlを実行するので、DDLでエラーにならないように注意が必要です。
データベース接続確認
Springを起動すると、application.propertiesが実行されます。MySQLデータベースに対して「schema.sql」が実行され、「articles」「users」テーブルが作成されていれば成功です。

演習
問題1
ORMを利用するメリットで正しいのはどれですか?
- データベースインデックスを最適にする。
- データベース間の複雑な結合操作を簡単にする。
- プレーンテキスト形式のデータベースバックアップを簡単にする。
- オブジェクト指向プログラミングとデータベース操作を簡単にする。
問題2
JPA(Java Persistence API)とは何ですか?
- Javaアプリケーションのコンパイルエラーを自動的に修正するツール
- Javaプログラムでのユーザー認証とアクセス制御を提供するライブラリ
- オブジェクトとRDBのマッピングをするJavaのAPI
- データベース内のテーブルをテキストファイルとしてエクスポートするためのライブラリ
問題3
Springのアプリケーション設定ファイルはどれですか?
- application.properties
- schema.sql
- JDBC
- ORM