Biar saya mulakan dengan mengatakan bahawa saya sangat menikmati siri artikel oleh Elleanor Kerry yang dipanggil "REST Overview." Berikut adalah pautan ke artikel ini:
- Gambaran keseluruhan REST. Bahagian 1: Apa itu REHAT
- Gambaran keseluruhan REST. Bahagian 2: Komunikasi antara pelanggan dan pelayan
- Gambaran keseluruhan REST. Bahagian 3: Mencipta Perkhidmatan RESTful dalam But Spring
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
Untuk membuat pengawal REST:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-rest</artifactId>
</dependency>
Untuk pelayan 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 setelah kita menyelesaikan pom.xml, mari pergi ke folder sumber dan isikan fail application.properties seperti 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 pangkalan data kami, memberikan log masuk dan kata laluan untuknya, mendaftarkan pemacu untuk PostgreSQL, menunjukkan bahawa kami akan menggunakan jenis data PostgreSQL, dan menentukan dialek untuk Hibernate. Seterusnya, mari buat direktori baharu yang dipanggil pangkalan data dalam folder sumber yang sama . Dalam direktori ini kami akan mencipta 2 fail: initDB.sql dan populateDB.sql . Yang pertama akan bertanggungjawab untuk membuat jadual, yang kedua akan bertanggungjawab untuk mengisinya pada mulanya. Mari buka initDB.sql dan lihat bar hijau di bahagian atas yang menyatakan dialek SQL tidak dikonfigurasikan . Ini bermakna kami tidak memilih dialek SQL untuk projek kami (dan terdapat beberapa daripadanya). Klik pada sebelah kanan jalur yang sama pada tulisan Tukar dialek kepada… . Dalam tetingkap timbul, klik Project SQL Dialect , dan memandangkan pangkalan data kami ialah PostgreSQL , kami memilih dialek dengan nama yang sama. Klik OK Mari kita teruskan untuk mengisi fail .sql kami . Mari kita isikan fail initDB.sql dahulu :
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, selepas mengisi fail, beberapa perkataan selain pelanggan ditulis dalam fon putih, kemudian klik kanan di dalam teks dan pilih Tukar Dialek -> PostgreSQL sekali lagi . Seperti yang anda mungkin sudah faham, ini adalah data yang sama yang kami isi semasa membuat jadual ujian secara manual. Di sini mereka diformatkan dalam dialek PostgreSQL bahasa SQL. Sekarang mari kita isi fail 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 jadual pelanggan anda ditulis dalam huruf merah, maka tidak mengapa. Maksudnya ialah kami belum mencipta jadual ini lagi dan IDEA belum mengenalinya lagi. Untuk mencipta dan mengisi jadual, kita perlu kembali ke fail application.properties dan tambahkan tiga baris berikut di sana:
spring.datasource.initialization-mode=ALWAYS
spring.datasource.schema=classpath*:database/initDB.sql
spring.datasource.data=classpath*:database/populateDB.sql
Dalam baris ini kami mengatakan bahawa kami ingin memulakan pangkalan data secara pengaturcaraan dan menunjukkan fail mana yang perlu digunakan untuk ini. Seterusnya, pergi ke kaedah utama aplikasi kami dan lancarkannya . Selepas itu, pergi ke pgAdmin --> Servers --> PostgreSQL 12 --> Databases --> customers --> Schemas --> public , klik kanan pada " Tables ", " Update ". Jika semuanya berjalan lancar, maka kami melihat jadual pelanggan yang kami buat . Selepas itu, kembali ke fail application.properties dan ulas baris tersebut.
spring.datasource.data=classpath*:database/populateDB.sql
seperti di bawah:
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 kami tidak melakukan ini, maka pada kali seterusnya kami menjalankan program kami akan menerima ralat berikut: org.postgresql.util.PSQLException: ERROR: Nilai kunci pendua melanggar kekangan unik "clients_pkey" . Ini berlaku kerana kami telah mengisi medan dengan id 1 dan 2 dalam jadual (walaupun semasa pelancaran pertama). Dalam jadual yang kami buat, medan id ditentukan sebagai bigserial , yang sepadan dengan jenis Long di Jawa. Walau bagaimanapun, dalam program kami jenis untuk medan ini ialah Integer . Saya memutuskan untuk menunjukkan cara menggunakan Long (BIGSERIAL) kerana ia mempunyai julat yang lebih besar daripada Integer. Hakikatnya ialah dalam jadual, medan yang ditetapkan sebagai Kunci Utama boleh digunakan bukan sahaja untuk menyimpan id pengguna , tetapi juga untuk menyimpan indeks pelbagai jenis data, dan bilangan rekod sedemikian boleh melebihi nilai Integer maksimum. Sebagai contoh, jika program kami mengambil beberapa ukuran setiap saat dan menulis data pada jadual. Untuk menulis semula kelas kami untuk menggunakan jenis data Long, kami perlu menukar jenis daripada Integer kepada Long dalam semua kelas dan kaedah yang menggunakan medan id . Kami tidak akan melakukan ini, kerana program ini pada asalnya ditulis oleh pengarang untuk jenis Integer id , yang bermaksud ini masuk akal. Untuk meneruskan, mari kita sekali lagi mengalih keluar jadual pelanggan yang kami cipta daripada pangkalan data kami, tetapi sekarang kami akan cuba melakukannya secara pemrograman dan bukannya secara manual. Untuk melakukan ini, ulas kod kami dalam fail initDB.sql dan tambah 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 lancarkan program, pergi ke pgAdmin , klik kanan pada " Jadual " (dalam pangkalan data pelanggan kami ) - -> " Kemas kini ", dan kami akan melihat bahawa jadual kami telah hilang. NB! Berhati-hati apabila menggunakan arahan ini, jika tidak, anda berisiko kehilangan semua data yang anda ada dalam jadual anda! Mari kembali ke fail initDB.sql dan tulis semula seperti 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 kami telah menukar jenis id kepada SERIAL , yang sepadan dengan jenis Integer yang kami gunakan untuk medan id dalam program kami. Di samping itu, panjang maksimum medan telefon telah ditingkatkan supaya kita bebas menggunakan ruang dan aksara khas (tanda kurung, sempang, dsb.) dalam penulisannya. Bilangan maksimum digit dalam nombor telefon pada masa ini ialah 18 digit (jika ingatan saya berfungsi dengan betul). Saya menetapkan saiz kepada 50 aksara untuk memastikan. Mari pergi ke fail application.properties dan nyahkomen baris:
spring.datasource.data=classpath*:database/populateDB.sql
Mari jalankan program kami, pergi ke pgAdmin, semak sama ada jadual kami telah dibuat, dan ulas baris ini kembali.
#spring.datasource.data=classpath*:database/populateDB.sql
Di sinilah saya mungkin akan menyelesaikan bahagian pertama artikel. Saya harap anda menyukainya, tulis komen (walaupun anda tidak menyukainya). Dalam bahagian dua, kami akan menulis semula kelas kami supaya mereka boleh berfungsi dengan pangkalan data sebenar. Sambungan: Menambah pangkalan data PostgreSQL kepada perkhidmatan RESTful pada Spring Boot. Bahagian 2 UPD Terima kasih kepada moderator kerana membetulkan gambar dan pemformatan teks saya!
GO TO FULL VERSION