Dev Study
← 解説「JDBC・JPA・Hibernate と、略語の早見表」に戻る

サンプルコードで身につける: JDBC・JPA・Hibernate と、略語の早見表

解説で学んだ概念を、5つの具体例で確認します。素朴な例から実務寄りの例へと進みます。

1用語早見表: データベースの用語

このレッスン前半の用語を1つずつ並べた表です。 は API、ドライバはその実装、 は仕様、 はその実装、という2組の「決まりと実装」になっています。TypeORM や Prisma との対応は、 であるという点までです。

用語早見表(JDBC・JPA・Hibernate)表
用語 | 一言で
手元では: 何として見えるか
近いもの: Node / NestJS で近いもの
 
JDBC | Java から SQL でデータベースを使うための標準 API
JDK に入っている
手元では: java.sql.Connection などのインターフェース
近いもの: pg や mysql2 を直接使う層(ただし共通の API)
 
JDBC ドライバ | 個々のデータベースと実際に話す実装
JDK には入っていない。別の JAR
手元では: 依存に足す JAR
近いもの: pg、mysql2
 
DataSource | 接続を取り出す窓口のインターフェース
手元では: javax.sql.DataSource(JDK の一部)
近いもの: 対応を確かめていない
 
JPA | オブジェクトと表の対応づけの標準仕様
現在の正式名は Jakarta Persistence
手元では: jakarta.persistence の @Entity や @Id
近いもの: 無い(仕様と実装が分かれている)
 
Hibernate | JPA の実装の1つ。独自の API も持つ
手元では: 起動ログの Hibernate ORM core version 7.4.5.Final
近いもの: TypeORM / Prisma(ORM である、という点まで)
 
ORM | オブジェクトと表を対応づけること
object/relational mapping の略
近いもの: TypeORM / Prisma がしていること
 
エンティティ | 表の行に対応づけられる、保存の対象のオブジェクト
手元では: @Entity を付けたクラス
近いもの: 対応を確かめていない
 
Spring Data JPA | JPA を使うリポジトリを書きやすくする
Spring のプロジェクト
ここでのリポジトリはデータの出し入れの窓口のこと。
Maven のリポジトリ(JAR の置き場)とは別の意味
手元では: JpaRepository を継承したインターフェース
近いもの: 対応を確かめていない

2エンティティと、Hibernate が出した SQL

を付けたがエンティティで、1つのが表の1行に対応します。自分では SQL を書いていませんが、保存と読み出しのときに Hibernate が SQL を組み立てて送りました。末尾のコメントがその実物で、1行目は ID の番号を採るための SQL です。SQL の文面は Hibernate の版とデータベースで変わります。

// エンティティ: 表 author の1行に対応づけられるクラス
// (@Entity や @Id は JPA のアノテーション。import の行は省略)
@Entity
class Author {
    @Id @GeneratedValue Long id;
    String name;
    @OneToMany(mappedBy = "author", cascade = CascadeType.ALL)
    List<Book> books = new ArrayList<>();
    protected Author() {}
    Author(String name) { this.name = name; }
}

// Spring Data JPA のリポジトリ。書くのはこの1行で、実装は書かない
interface AuthorRepository extends JpaRepository<Author, Long> {}

// Author を保存し、あとで ID で読んだときに Hibernate が出した SQL
// (Hibernate ORM 7.4.5 / H2。SQL を表示する設定で起動。
//  ... は省略した行で、関連する Book の採番と保存などがある)
//   Hibernate: select next value for author_seq
//   ...
//   Hibernate: insert into author (name,id) values (?,?)
//   ...
//   Hibernate: select a1_0.id,a1_0.name from author a1_0 where a1_0.id=?

3略語の早見表

Java と の文書でよく見る略語です。・・ は、Java や の仕様が定義した語ではなく、慣習的な呼び名です(誰が使い始めたかはこのコースでは確認していません)。 は配布元の支援の約束で、最新の版は別にあります。

略語と正式名称表
略語 | 正式名称
意味
 
LTS | Long-Term Support
配布元が長く支援すると約束した版。言語の性質ではない
Oracle の言い方では Java SE 8・11・17・21・25 が LTS
 
GA | General Availability
一般提供(正式公開)の状態を指す語
「GA になった」「GA 版」のように使う
 
SNAPSHOT | (略語ではない)
Maven の、開発中でまだ確定していない版の印
 
RELEASE | (略語ではない)
Spring が以前、正式版の版番号に付けていた印
例: 2.3.12.RELEASE。Spring Boot は 2.4.0 から付けない
 
POM | Project Object Model
Maven のプロジェクト定義。ファイルは pom.xml
 
BOM | bill of materials
依存の版をまとめて決めておく一覧
 
DI | Dependency Injection
依存性の注入。必要な相手を引数などで受け取ること
 
IoC | Inversion of Control
制御の反転。DI はその一種
 
AOP | Aspect-oriented Programming
メソッド呼び出しの前後に処理を挟む仕組み
 
ORM | object/relational mapping
オブジェクトと表を対応づけること
 
POJO | Plain Old Java Object
特別な親クラスやインターフェースを強制されない、
ふつうの Java のオブジェクト
 
DTO | Data Transfer Object
値を運ぶためのオブジェクトを指す、慣習的な呼び名
Spring Data や NestJS の文書が使う。仕様の用語ではない
 
DAO | Data Access Object
データの読み書きを受け持つオブジェクトを指す、慣習的な呼び名
Spring Framework の文書が使う。仕様の用語ではない
 
FQCN | fully qualified class name
パッケージ名まで含めたクラスの名前を指す、慣習的な略語
Java 言語仕様の語は fully qualified name(完全修飾名)
 
JDBC | Java Database Connectivity
Oracle の JDK 8 の文書の表記
 
JPA | Java Persistence API
現行の仕様名は Jakarta Persistence
 
JSP | JavaServer Pages(現行名 Jakarta Pages)
EJB | Enterprise JavaBeans(現行名 Jakarta Enterprise Beans)

4よく見るファイルとフォルダの名前

プロジェクトを開いたときに目に入る名前の早見表です。・・ のどれがあるかでが分かり、 や があれば を作る構成だと見当が付きます。 4.1.1 の文書は設定ファイルを と と書いています。

ファイル名・フォルダ名と、その意味表
名前 | 何か
補足
 
application.properties / application.yaml(.yml)
Spring Boot の設定ファイル。雛形では src/main/resources/ にある
 
pom.xml | Maven のプロジェクト定義
build.gradle / settings.gradle | Gradle のビルドスクリプトと設定
build.xml | Ant のビルドファイル
どれがあるかで、使っているビルドツールが分かる
 
mvnw / gradlew | ラッパー
決まった版の Maven / Gradle を取ってきて実行するスクリプト
 
target/ | Maven の出力先
build/ | Gradle の出力先
Ant では出力先の名前を自分で決めるので、
build/ があるだけでは Gradle とは限らない
 
lib/ | 依存の JAR を置く、慣習的なフォルダ名
Ant の古いプロジェクト、WAR の中の WEB-INF/lib など
 
WEB-INF/ | WAR の中の、外から直接は見えない部分
classes/・lib/・web.xml が入る
 
web.xml | Servlet と URL の対応などを書くファイル
WEB-INF/ の直下にある
 
META-INF/ | JAR の中の説明用のフォルダ
マニフェスト(MANIFEST.MF)が入る
 
src/main/java / src/main/resources / src/test/java
Maven が決めた標準の配置。Java の規則ではない
 
~/.m2/repository | Maven のローカルリポジトリ
取ってきた JAR が全プロジェクト共用で溜まる

5混同しやすいもの: 版の後ろに付く印

版の文字列の後ろの印から、どの段階の版かを読むコードです。古い記事で見る と、今の 4.1.1 は、どちらも正式版という同じ意味です。 と は確定前の版です。規則は Spring の版の付け方に合わせたもので、ほかのライブラリが同じ付け方とは限りません。

Java

図やコードに出てくる用語(タップで説明)