まず最初に言っておきますが、私はElleanor Kerryによる「REST 概要」というシリーズの記事がとても楽しかったです。これらの記事へのリンクは次のとおりです。
- REST の概要。パート 1: REST とは何ですか
- REST の概要。パート 2: クライアントとサーバー間の通信
- REST の概要。パート 3: Spring Boot での RESTful サービスの作成
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
REST コントローラーを作成するには:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-rest</artifactId>
</dependency>
Tomcat サーバーの場合:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</dependency>
PostgreSQL の場合:
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>42.2.10</version>
</dependency>
pom.xml を整理したので、リソース フォルダーに移動して、application.propertiesファイルに次のように入力しましょう。
spring.datasource.url=jdbc:postgresql://localhost:5432/customers
spring.datasource.username=root
spring.datasource.password=123
spring.datasource.driver-class-name=org.postgresql.Driver
spring.jpa.database=postgresql
spring.jpa.database-platform=org.hibernate.dialect.PostgreSQL10Dialect
ここでは、データベースの URL を入力し、そのログインとパスワードを指定し、PostgreSQL のドライバーを登録し、PostgreSQL データ型を使用することを示し、Hibernate の方言を指定しました。次に、同じリソース フォルダー内に、 databaseという新しいディレクトリを作成しましょう。このディレクトリに、 initDB.sqlとPopulateDB.sql の2 つのファイルを作成します。1 つ目はテーブルの作成を担当し、2 つ目は最初にテーブルを埋めることを担当します。initDB.sqlを開く と、上部にSQL 言語が設定されていないことを示す緑色のバーが表示されます。これは、プロジェクトに SQL 言語を選択していないことを意味します (SQL 言語はいくつかあります)。同じストリップの右側の碑文「方言を…に変更」をクリックします。ポップアップ ウィンドウで[プロジェクト SQL 方言]をクリックし、データベースがPostgreSQLであるため、同じ名前の方言を選択します。「OK」 をクリックして、.sqlファイルの入力に進みましょう。まずinitDB.sqlファイルに情報を入力しましょう。
CREATE TABLE IF NOT EXISTS clients
(
id BIGSERIAL PRIMARY KEY ,
name VARCHAR(200) NOT NULL ,
email VARCHAR(254) NOT NULL ,
phone VARCHAR(20) NOT NULL
);
ファイルに入力した後、クライアント 以外の単語が白いフォントで書かれている場合は、テキスト内を右クリックして、 [方言の変更] --> [PostgreSQL]を再度選択します。おそらくすでに理解されていると思いますが、これはテスト テーブルを手動で作成するときに入力したデータと同じです。ここでは、SQL 言語の PostgreSQL 言語でフォーマットされています。次に、 populateDB.sqlファイルに情報を入力しましょう。
INSERT INTO clients VALUES
(1, 'Vassily Petrov', 'vpetrov@jr.com', '+7 (191) 322-22-33)'),
(2, 'Pjotr Vasechkin', 'pvasechkin@jr.com', '+7 (191) 223-33-22)');
クライアントテーブル の名前が赤い文字で書かれていれば問題ありません。重要なのは、このテーブルがまだ作成されておらず、IDEA がそれをまだ認識していないということです。テーブルを作成してデータを設定するには、application.propertiesファイルに戻り、そこに次の 3 行を追加する必要があります。
spring.datasource.initialization-mode=ALWAYS
spring.datasource.schema=classpath*:database/initDB.sql
spring.datasource.data=classpath*:database/populateDB.sql
これらの行では、データベースをプログラムで初期化し、そのためにどのファイルを使用する必要があるかを示しています。次に、アプリケーションのmainメソッドに移動して起動します。その後、pgAdmin --> サーバー --> PostgreSQL 12 --> データベース --> 顧客 --> スキーマ --> publicに移動し、「テーブル」、「更新」を右クリックします。すべてがうまくいけば、作成したクライアントテーブルが表示されます。その後、 application.propertiesファイルに戻り、その行をコメントアウトします。
spring.datasource.data=classpath*:database/populateDB.sql
以下のように:
spring.datasource.url=jdbc:postgresql://localhost:5432/customers
spring.datasource.username=root
spring.datasource.password=123
spring.datasource.driver-class-name=org.postgresql.Driver
spring.jpa.database=postgresql
spring.jpa.database-platform=org.hibernate.dialect.PostgreSQL10Dialect
spring.datasource.initialization-mode=ALWAYS
spring.datasource.schema=classpath*:database/initDB.sql
#spring.datasource.data=classpath*:database/populateDB.sql
これを行わないと、次回プログラムを実行するときに次のエラーが表示されます: org.postgresql.util.PSQLException: ERROR: 重複したキー値が一意の制約 "clients_pkey" に違反しています。これは、 (最初の起動時であっても)テーブル内のID 1と2のフィールドにすでに入力されているために発生します。作成したテーブルでは、idフィールドはbigserialとして指定されており、これはJava のLong型に対応します。ただし、このプログラムでは、このフィールドの型はIntegerです。Long (BIGSERIAL) は Integer よりも範囲が広いため、Long (BIGSERIAL) の使用方法を示すことにしました。実際、テーブルでは、主キーとして指定されたフィールドは、ユーザーID の保存だけでなく、さまざまなデータのインデックスの保存にも使用でき、そのようなレコードの数は最大整数値を超える可能性があります。たとえば、プログラムが毎秒何らかの測定を行い、そのデータをテーブルに書き込むとします。Long データ型を使用するようにクラスを書き直すには、 idフィールドを使用するすべてのクラスとメソッドで型を Integer から Long に変更する必要があります。このプログラムはもともとid Integer 型用に作成者によって書かれたものであるため、これは行いません。これは、これにはある程度の意味があることを意味します。続行するには、作成したクライアントテーブルをデータベースからもう一度削除しましょう。ただし、手動ではなくプログラムで削除してみます。これを行うには、 initDB.sqlファイル内のコードをコメント アウトし、次の 1 行を追加します。
-- CREATE TABLE IF NOT EXISTS clients
-- (
-- id BIGSERIAL PRIMARY KEY ,
-- name VARCHAR(200) NOT NULL ,
-- email VARCHAR(254) NOT NULL ,
-- phone VARCHAR(20) NOT NULL
-- );
DROP TABLE IF EXISTS clients
プログラムを起動し、pgAdminに移動し、(顧客データベース内の) 「テーブル」を右クリックし、「更新」をクリックすると、テーブルが消えていることがわかります。 注意!このコマンドを使用するときは注意してください。そうしないと、テーブル内のすべてのデータが失われる危険があります。initDB.sqlファイルに戻って、次のように書き直してみましょう。
CREATE TABLE IF NOT EXISTS clients
(
id SERIAL PRIMARY KEY ,
name VARCHAR(200) NOT NULL ,
email VARCHAR(254) NOT NULL ,
phone VARCHAR(50) NOT NULL
);
ここでは、 idタイプをSERIALに 変更しました。これは、プログラムのidフィールドに使用しているIntegerタイプと一致します。さらに、電話フィールドの最大長が拡張され、スペースや特殊文字 (括弧、ダッシュなど) を自由に使用できるようになりました。現在、電話番号の最大桁数は 18 桁です (私の記憶が正しければ)。念のためサイズを50文字に設定しました。application.properties ファイルに移動して、次の行のコメントを外してみましょう。
spring.datasource.data=classpath*:database/populateDB.sql
プログラムを実行して、pgAdmin に移動し、テーブルが作成されたことを確認して、この行をコメントアウトして戻しましょう。
#spring.datasource.data=classpath*:database/populateDB.sql
ここでおそらくこの記事の最初の部分を終了します。気に入っていただければ幸いです(気に入らなかった場合でも)コメントを書いてください。パート 2 では、実際のデータベースで動作できるようにクラスを書き直します。続き: Spring Boot 上の RESTful サービスに PostgreSQL データベースを追加します。パート 2 UPD 私の写真とテキストの書式を修正してくれたモデレーターに感謝します。
GO TO FULL VERSION