JavaRush /Java Blog /Random-JA /PostgreSQL データベースを Spring Boot の RESTful サービスに追加します。パート1
Artur
レベル 40
Tallinn

PostgreSQL データベースを Spring Boot の RESTful サービスに追加します。パート1

Random-JA グループに公開済み
まず最初に言っておきますが、私はElleanor Kerryによる「REST 概要」というシリーズの記事がとても楽しかったです。これらの記事へのリンクは次のとおりです。 PostgreSQL データベースを Spring Boot の RESTful サービスに追加します。 パート 1 - 1一般的に、私は自由を選択してそれらに少し追加することにしました。つまり、データベースを作成してこのアプリケーションに接続する方法を説明します。どこから始めればよいでしょうか?おそらくデータベース自体からのものでしょう。PostgreSQL の使いやすい管理インターフェイスが気に入ったので、 PostgreSQLを使用することにしました。まず、PostgreSQL インストーラーを、たとえばここからダウンロードする必要があります: PostgreSQL データベースのダウンロード 完全なインストール プロセスについては説明しません。OSによって異なる場合があります。ただし、その過程で、デフォルトのpostgresロール (アカウント)の管理者パスワードを作成し、それを 2 回入力する必要があることに注意してください。簡単にするために、パスワードを123 に設定します。もちろん、実際のプロジェクトでは、より複雑なものを考え出す必要があります。 PostgreSQL データベースを Spring Boot の RESTful サービスに追加します。 パート 1 ~ 2次に、インストール プログラムによってポートを選択するように求められますが、ここではデフォルト値のままにしました。 PostgreSQL データベースを Spring Boot の RESTful サービスに追加します。 パート 1 ~ 3ロケールもデフォルトのままにしました。 PostgreSQL データベースを Spring Boot の RESTful サービスに追加します。 パート 1 ~ 4インストールされたら、管理者インターフェイスpgAdminを開きます。ブラウザが開き、ポップアップ ウィンドウが開き、以前に作成したパスワードの入力を求められます。 PostgreSQL データベースを Spring Boot の RESTful サービスに追加します。 パート 1 ~ 5次に、インターフェース言語を設定する必要があります。これを行うには、「pgAdmin の構成」 --> 「その他」 --> 「ユーザー言語」をクリックし、目的の言語を選択--> 「保存」して、ブラウザー・ページをリロードしますPostgreSQL データベースを Spring Boot の RESTful サービスに追加します。 パート 1 ~ 6ページの左上隅で [サーバー] をクリックすると、 [サーバーに接続]ウィンドウが表示されます。パスワードを再度入力し、毎回入力しないように [パスワードを保存]チェックボックスをオンにします。PostgreSQL データベースを Spring Boot の RESTful サービスに追加します。 パート 1 ~ 7すべてのデータベースに対して管理者ロールを引き続き使用することもできますが、データベースとそれらを使用するプログラムが多数ある可能性があるため、新しいロールを作成することをお勧めします。これを行うには、左上隅でPostgreSQL 12 をクリック -->ログイン/グループ ロールを右クリック--> 作成 --> ログイン/グループ ロール PostgreSQL データベースを Spring Boot の RESTful サービスに追加します。 パート 1 ~ 8ポップアップ ウィンドウの「全般」タブで、役割の名前。ロールにrootという名前を付けました。 PostgreSQL データベースを Spring Boot の RESTful サービスに追加します。 パート 1 ~ 9定義」タブで新しいパスワードを作成します。混乱しないように、 123のままにしました。PostgreSQL データベースを Spring Boot の RESTful サービスに追加します。 パート 1 ~ 10権利」タブに移動し、必要な項目をすべてチェックします。すべての項目を「 YES 」に設定しました。「保存」 をクリックしてPostgreSQL データベースを Spring Boot の RESTful サービスに追加します。 パート 1 ~ 11データベースの作成に進みます。「データベース」を右クリック--> 作成 --> データベース PostgreSQL データベースを Spring Boot の RESTful サービスに追加します。 パート 1 ~ 12全般」タブでデータベースの名前を作成します。たとえば、顧客であるとします。所有者を、前のステップで作成した rootに割り当てます。PostgreSQL データベースを Spring Boot の RESTful サービスに追加します。 パート 1 ~ 13「」について定義» UTF8エンコーディングが設定されていることを確認します。「保存」をクリックします。以上で、データベースが作成されました (今のところは空です)。 PostgreSQL データベースを Spring Boot の RESTful サービスに追加します。 パート 1 ~ 14この時点では、pgAdmin で終了できます。なぜなら... プログラムでテーブルを作成しますが、念のため、手動でテーブルを作成する方法を説明します。[顧客] --> [スキーマ] --> [パブリックツリー]を展開します。[テーブル]を右クリック--> [作成] --> [テーブル] をクリックします。 PostgreSQL データベースを Spring Boot の RESTful サービスに追加します。 パート 1 ~ 15ポップアップウィンドウが開きます。「全般」タブで、テーブルに名前 (例: test_table )を割り当て、root を所有者として割り当てます。 PostgreSQL データベースを Spring Boot の RESTful サービスに追加します。 パート 1 ~ 16」タブに移動し、「+」をクリックして新しい列を作成します。名前「id」とデータ型bigserialを入力します。これは Java のLong型に相当しますが、自動インクリメントされます (新しいレコードを追加すると、id は自動的に 1 ずつ増加します)。 非 NULL をYes」としてマークし、主キーも「Yes」とします。 PostgreSQL データベースを Spring Boot の RESTful サービスに追加します。 パート 1 ~ 17同様に「名前」、「メール」、「電話」の列を作成します。データ型文字変化を選択します。これはString型に対応しますが、最大長を設定できます。フルネームを入力するには、名前の最大長を200文字に設定します。1つの列で。電子メールの最大長は254文字に設定されています。電子メールにこのような最大長がある理由については、こちらをご覧ください。電話番号には20文字を選択します。これで十分です。電話番号について少し:電話番号に関するプログラマーの誤解(Habr) このデータを必須にしたい場合は、すべての列の非 NULL をYes 」としてマークします。保存」をクリックします。以上で、テーブルが作成されました。 PostgreSQL データベースを Spring Boot の RESTful サービスに追加します。 パート 1 ~ 18テスト テーブルを削除するには、(ツリー内で) テスト テーブルを右クリックして「削除」します。プログラムからテーブルを作成するので、これはもう必要ありません。pgAdmin を閉じて、プログラムに移動します。プロジェクトでIDEAを開いてみましょう。インターフェースの右側の列にある「データベース」をクリックし、「 +」をクリックしてデータベースを追加します。次のデータ ソース --> PostgreSQLPostgreSQL データベースを Spring Boot の RESTful サービスに追加します。 パート 1 ~ 19ポップアップ ウィンドウで、[ユーザー]フィールドに、前に作成したroot役割とパスワードを入力します。パスワードフィールドに123 を入力します。「データベース」フィールドには、顧客データベースの名前を書き込みます。[接続のテスト]ボタンを押し、その下に緑色のチェックマークが表示されたら、すべてが正常であるため、 [ OK]ボタンを押します。 PostgreSQL データベースを Spring Boot の RESTful サービスに追加します。 パート 1 ~ 20これでデータベースに接続できました。次に、pom.xmlファイルに移動して依存関係を追加しましょう。 ORM データベースを操作するには:
<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.sqlPopulateDB.sql の2 つのファイルを作成します。1 つ目はテーブルの作成を担当し、2 つ目は最初にテーブルを埋めることを担当します。initDB.sqlを開く と、上部にSQL 言語が設定されていないことを示す緑色のバーが表示されます。これは、プロジェクトに SQL 言語を選択していないことを意味します (SQL 言語はいくつかあります)。同じストリップの右側の碑文「方言を…に変更」をクリックします。ポップアップ ウィンドウで[プロジェクト SQL 方言]をクリックし、データベースがPostgreSQLであるため、同じ名前の方言を選択します。「OK」 をクリックして、.sqlPostgreSQL データベースを Spring Boot の RESTful サービスに追加します。 パート 1 ~ 21ファイルの入力に進みましょう。まず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 12のフィールドにすでに入力されているために発生します。作成したテーブルでは、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 私の写真とテキストの書式を修正してくれたモデレーターに感謝します。
コメント
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION