JPAを使用する準備
JPAはデータベースアクセスの基礎となる技術です。ここではJPAを説明し、使用するプロジェクトを準備します。
JPAとは?
JPA(Java Persistence API)は、リレーショナルデータベースへアクセスするフレームワークです。Java SEでは長い間JDBCが一般的でした。
正確には、JPAはデータの永続化を提供します。つまり、プログラム終了後もデータが残ります。JPAを使用すると、操作ごとにSQLを記述したり、フィールドを個別に取り出して変換したりせず、Javaオブジェクトを保存して取得できます。
内部ではJPAがデータベースへアクセスします。アプリケーション側ではJavaオブジェクトを保存して取得します。ORM(Object-relational Mapping)はJavaオブジェクトとリレーショナルデータベースのレコードを対応付けます。JPAも同様にオブジェクト指向で永続化を扱えます。
JPAにはSQLに似たJPQLもあります。データベースが変わっても一貫した形式でクエリを記述できるため、通常はアプリケーションコードではなく設定を変更します。
JPAプロジェクトを作成する
Apache MavenでWebアプリケーションプロジェクトを作成します。
$ mvn archetype:generate -DarchetypeArtifactId=maven-archetype-webapp
次の値を入力します。
groupId: com.devkuma.jpa
artifactId: JavaApp
version: 1.0-SNAPSHOT
package: com.devkuma.jpa
フォルダー構成
.
├── pom.xml
└── src
└── main
├── resources
└── webapp
├── WEB-INF
│ └── web.xml
└── index.jsp
webappフォルダーにはWebアプリケーションとして公開するファイルを配置します。resourcesフォルダーにはJPAで必要な設定ファイルを配置します。
pom.xmlを作成する
pom.xmlへMavenのビルド設定と必要なライブラリを記述します。
Webアプリケーション用ライブラリ
サーブレットコンテナとしてJettyを使用します。
<dependency>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-server</artifactId>
<version>${jetty.version}</version>
</dependency>
<dependency>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-webapp</artifactId>
<version>${jetty.version}</version>
</dependency>
Webアプリケーション用プラグイン
Webアプリケーションを実行するため、Jetty Maven pluginを追加します。
<plugin>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-maven-plugin</artifactId>
<version>${jetty.version}</version>
</plugin>
完成したpom.xml
完成したプロジェクトでは、Jetty、H2、Eclipse Persistence JPA、Jetty Maven pluginを使用します。
<project xmlns="http://maven.apache.org/POM/4.0.0">
<modelVersion>4.0.0</modelVersion>
<groupId>com.devkuma.jpa</groupId>
<artifactId>JavaApp</artifactId>
<packaging>war</packaging>
<version>1.0-SNAPSHOT</version>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<jetty.version>9.4.7.v20170914</jetty.version>
</properties>
<dependencies>
<dependency>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-server</artifactId>
<version>${jetty.version}</version>
</dependency>
<dependency>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-webapp</artifactId>
<version>${jetty.version}</version>
</dependency>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<version>1.4.196</version>
</dependency>
<dependency>
<groupId>org.eclipse.persistence</groupId>
<artifactId>javax.persistence</artifactId>
<version>2.2.0</version>
</dependency>
<dependency>
<groupId>org.eclipse.persistence</groupId>
<artifactId>org.eclipse.persistence.jpa</artifactId>
<version>2.7.0</version>
</dependency>
</dependencies>
<build>
<finalName>JavaApp</finalName>
<plugins>
<plugin>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-maven-plugin</artifactId>
<version>${jetty.version}</version>
</plugin>
</plugins>
</build>
</project>