Izinkan saya memulai dengan mengatakan bahwa saya sangat menikmati rangkaian artikel Elleanor Kerry yang berjudul “Ikhtisar REST.” Berikut tautan ke artikel-artikel tersebut:
- Ikhtisar REST. Bagian 1: Apa itu REST
- Ikhtisar REST. Bagian 2: Komunikasi antara klien dan server
- Ikhtisar REST. Bagian 3: Membuat Layanan RESTful di Spring Boot
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
Untuk membuat pengontrol REST:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-rest</artifactId>
</dependency>
Untuk server Tomcat:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</dependency>
Untuk PostgreSQL:
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>42.2.10</version>
</dependency>
Sekarang kita sudah memilah pom.xml, mari masuk ke folder resources dan isi file application.properties sebagai berikut:
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
Di sini kami memasukkan URL database kami, memberikan login dan kata sandinya, mendaftarkan driver untuk PostgreSQL, menunjukkan bahwa kami akan menggunakan tipe data PostgreSQL, dan menentukan dialek untuk Hibernate. Selanjutnya, mari buat direktori baru bernama database di folder sumber daya yang sama . Di direktori ini kita akan membuat 2 file: initDB.sql dan populateDB.sql . Yang pertama akan bertanggung jawab untuk membuat tabel, yang kedua akan bertanggung jawab untuk mengisinya terlebih dahulu. Mari kita buka initDB.sql dan lihat bilah hijau di bagian atas yang bertuliskan dialek SQL tidak dikonfigurasi . Ini berarti kami belum memilih dialek SQL untuk proyek kami (dan ada beberapa di antaranya). Klik di sisi kanan strip yang sama pada tulisan Ubah dialek menjadi… . Di jendela pop-up, klik Project SQL Dialect , dan karena database kami adalah PostgreSQL , kami memilih dialek dengan nama yang sama. Klik OK Mari kita lanjutkan ke pengisian file .sql kita . Mari kita isi terlebih dahulu file 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
);
Jika setelah mengisi file, beberapa kata selain klien ditulis dengan font putih, lalu klik kanan di dalam teks dan pilih Ubah Dialek --> PostgreSQL lagi . Seperti yang mungkin sudah Anda pahami, ini adalah data yang sama yang kami isi saat membuat tabel pengujian secara manual. Di sini mereka diformat dalam dialek PostgreSQL dari bahasa SQL. Sekarang mari kita isi file 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)');
Jika nama tabel klien Anda ditulis dengan huruf merah, maka tidak apa-apa. Intinya kita belum membuat tabel ini, dan IDEA belum mengenalinya. Untuk membuat dan mengisi tabel, kita perlu kembali ke file application.properties dan menambahkan tiga baris berikut di sana:
spring.datasource.initialization-mode=ALWAYS
spring.datasource.schema=classpath*:database/initDB.sql
spring.datasource.data=classpath*:database/populateDB.sql
Pada baris ini kita mengatakan bahwa kita ingin menginisialisasi database secara terprogram dan menunjukkan file mana yang perlu digunakan untuk ini. Selanjutnya, buka metode utama aplikasi kita dan luncurkan . Setelah itu, buka pgAdmin --> Servers --> PostgreSQL 12 --> Databases --> Customer --> Schemas --> public , klik kanan pada " Tables ", " Update ". Jika semuanya berjalan dengan baik, maka kita melihat tabel klien yang kita buat . Setelah itu, kembali ke file application.properties dan beri komentar pada baris tersebut.
spring.datasource.data=classpath*:database/populateDB.sql
seperti di bawah ini:
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
Jika kita tidak melakukan ini, maka saat kita menjalankan program lagi, kita akan menerima kesalahan berikut: org.postgresql.util.PSQLException: ERROR: A duplikat key value melanggar batasan unik "clients_pkey" . Hal ini terjadi karena kita telah mengisi kolom dengan id 1 dan 2 pada tabel (bahkan pada peluncuran pertama). Dalam tabel yang kita buat, bidang id ditentukan sebagai bigserial , yang sesuai dengan tipe Long di Java. Namun, dalam program kami, tipe bidang ini adalah Integer . Saya memutuskan untuk menunjukkan cara menggunakan Long (BIGSERIAL) karena jangkauannya lebih besar daripada Integer. Faktanya adalah bahwa dalam tabel, bidang yang ditetapkan sebagai Kunci Utama dapat digunakan tidak hanya untuk menyimpan id pengguna , tetapi juga untuk menyimpan indeks berbagai macam data, dan jumlah catatan tersebut dapat melebihi nilai Integer maksimum. Misalnya, jika program kita melakukan beberapa pengukuran setiap detik dan menulis datanya ke dalam tabel. Untuk menulis ulang kelas kita agar menggunakan tipe data Long, kita perlu mengubah tipe dari Integer menjadi Long di semua kelas dan metode yang menggunakan bidang id . Kami tidak akan melakukan ini karena program ini awalnya ditulis oleh penulis untuk tipe id Integer, yang berarti ini masuk akal. Untuk melanjutkan, mari kita hapus sekali lagi tabel klien yang kita buat dari database, namun sekarang kita akan mencoba melakukannya secara terprogram, bukan secara manual. Untuk melakukan ini, beri komentar pada kode kami di file initDB.sql dan tambahkan satu baris:
-- 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
Mari kita luncurkan programnya, buka pgAdmin , klik kanan pada “ Tabel ” (di database pelanggan kami ) - -> “ Perbarui ”, dan kita akan melihat bahwa tabel kita telah hilang. Catatan! Berhati-hatilah saat menggunakan perintah ini, jika tidak, Anda berisiko kehilangan semua data yang ada di tabel Anda! Mari kita kembali ke file initDB.sql dan menulis ulang sebagai berikut:
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
);
Di sini kita telah mengubah tipe id menjadi SERIAL , yang cocok dengan tipe Integer yang kita gunakan untuk bidang id di program kita. Selain itu, panjang maksimum bidang telepon telah ditambah sehingga kita dapat leluasa menggunakan spasi dan karakter khusus (tanda kurung, tanda hubung, dll) dalam penulisannya. Jumlah maksimum digit dalam nomor telepon saat ini adalah 18 digit (jika ingatan saya benar). Saya mengatur ukurannya menjadi 50 karakter untuk memastikan. Mari buka file application.properties dan hapus komentar pada baris:
spring.datasource.data=classpath*:database/populateDB.sql
Mari kita jalankan program kita, buka pgAdmin, periksa apakah tabel kita telah dibuat, dan beri komentar kembali pada baris ini.
#spring.datasource.data=classpath*:database/populateDB.sql
Di sinilah saya mungkin akan menyelesaikan bagian pertama artikel ini. Saya harap Anda menyukainya, tulis komentar (meskipun Anda tidak menyukainya). Di bagian kedua, kita akan menulis ulang kelas kita sehingga bisa bekerja dengan database nyata. Lanjutan: Menambahkan database PostgreSQL ke layanan RESTful di Spring Boot. Bagian 2 UPD Terima kasih kepada moderator yang telah mengoreksi format gambar dan teks saya!
GO TO FULL VERSION