JavaRush /Blog Java /Random-MS /Menambah pangkalan data PostgreSQL pada perkhidmatan REST...
Artur
Tahap
Tallinn

Menambah pangkalan data PostgreSQL pada perkhidmatan RESTful pada Spring Boot. Bahagian 1

Diterbitkan dalam kumpulan
Biar saya mulakan dengan mengatakan bahawa saya sangat menikmati siri artikel oleh Elleanor Kerry yang dipanggil "REST Overview." Berikut adalah pautan ke artikel ini: Menambah pangkalan data PostgreSQL pada perkhidmatan RESTful pada Spring Boot.  Bahagian 1 - 1Secara umum, saya memutuskan untuk mengambil kebebasan dan menambah sedikit kepada mereka. Iaitu, beritahu cara membuat pangkalan data dan menyambungkannya ke aplikasi ini. Di mana untuk bermula? Mungkin dari pangkalan data itu sendiri. Saya memutuskan untuk menggunakan PostgreSQL kerana saya suka antara muka pentadbir mesra penggunanya. Pertama, kita perlu memuat turun pemasang PostgreSQL, contohnya dari sini: Muat Turun Pangkalan Data PostgreSQL Saya tidak akan menerangkan proses pemasangan yang lengkap, kerana ia mungkin berbeza bergantung pada OS anda. Walau bagaimanapun, saya perhatikan bahawa dalam proses itu anda perlu menghasilkan kata laluan pentadbir untuk peranan postgres lalai (akaun) dan masukkannya 2 kali. Untuk memudahkan, saya menetapkan kata laluan kepada 123 . Sudah tentu, dalam projek sebenar adalah perlu untuk menghasilkan sesuatu yang lebih rumit. Menambah pangkalan data PostgreSQL pada perkhidmatan RESTful pada Spring Boot.  Bahagian 1 - 2Seterusnya, program pemasangan menggesa anda untuk memilih port; Saya meninggalkannya pada nilai lalainya. Menambah pangkalan data PostgreSQL pada perkhidmatan RESTful pada Spring Boot.  Bahagian 1 - 3Tempatan juga dibiarkan sebagai lalai. Menambah pangkalan data PostgreSQL pada perkhidmatan RESTful pada Spring Boot.  Bahagian 1 - 4Dipasang, kemudian buka antara muka pentadbir pgAdmin . Penyemak imbas akan dibuka dengan tetingkap pop timbul di mana kami akan diminta untuk memasukkan kata laluan yang dibuat sebelum ini. Menambah pangkalan data PostgreSQL pada perkhidmatan RESTful pada Spring Boot.  Bahagian 1 - 5Sekarang kita perlu menetapkan bahasa antara muka. Untuk melakukan ini, klik Konfigurasikan pgAdmin --> Pelbagai --> Bahasa Pengguna , pilih bahasa yang dikehendaki --> Simpan dan muat semula halaman penyemak imbas . Menambah pangkalan data PostgreSQL pada perkhidmatan RESTful pada Spring Boot.  Bahagian 1 - 6Di penjuru kiri sebelah atas halaman, klik Pelayan , tetingkap " Sambung ke pelayan " muncul . Masukkan kata laluan kami sekali lagi dan tandakan kotak Simpan Kata Laluan supaya tidak memasukkannya setiap kali. Menambah pangkalan data PostgreSQL pada perkhidmatan RESTful pada Spring Boot.  Bahagian 1 - 7Kami boleh terus menggunakan peranan pentadbir untuk semua pangkalan data, tetapi adalah lebih baik untuk mencipta peranan baharu, kerana kami mungkin mempunyai banyak pangkalan data dan banyak program yang menggunakannya. Untuk melakukan ini, di sudut kiri atas, klik pada PostgreSQL 12 -> RMB pada Log Masuk/Peranan Kumpulan -> Buat -> Log Masuk/Peranan Kumpulan Menambah pangkalan data PostgreSQL pada perkhidmatan RESTful pada Spring Boot.  Bahagian 1 - 8 Dalam tetingkap pop timbul, pada tab “ Umum ”, masukkan nama peranan. Saya menamakan akar peranan . Menambah pangkalan data PostgreSQL pada perkhidmatan RESTful pada Spring Boot.  Bahagian 1 - 9Pada tab " Definisi " kami mencipta kata laluan baharu, saya tinggalkan 123 supaya tidak keliru. Menambah pangkalan data PostgreSQL pada perkhidmatan RESTful pada Spring Boot.  Bahagian 1 - 10Pergi ke tab " Hak " dan tandai semua item yang diperlukan. Saya telah menetapkan semua item kepada " YA ". Klik " Simpan " Menambah pangkalan data PostgreSQL pada perkhidmatan RESTful pada Spring Boot.  Bahagian 1 - 11Kami meneruskan untuk mencipta pangkalan data. Klik kanan pada "Pangkalan Data" --> Cipta --> Pangkalan Data Menambah pangkalan data PostgreSQL pada perkhidmatan RESTful pada Spring Boot.  Bahagian 1 - 12 Pada tab " Umum ", cipta nama pangkalan data. Biarlah, sebagai contoh, pelanggan . Kami menetapkan pemilik kepada root , yang kami buat pada langkah sebelumnya. Menambah pangkalan data PostgreSQL pada perkhidmatan RESTful pada Spring Boot.  Bahagian 1 - 13Pada "Definisi » semak bahawa kami mempunyai pengekodan yang ditetapkan kepada UTF8 . Klik “ Simpan ”. Itu sahaja, pangkalan data kami telah dibuat (kosong buat masa ini). Menambah pangkalan data PostgreSQL pada perkhidmatan RESTful pada Spring Boot.  Bahagian 1 - 14Pada ketika ini kita boleh berakhir dengan pgAdmin, kerana... Kami akan membuat jadual secara pemrograman, tetapi, sekiranya berlaku, saya akan menunjukkan kepada anda cara membuat jadual secara manual. Kembangkan pelanggan --> Skema --> pokok awam . Klik kanan Jadual --> Buat --> Jadual . Menambah pangkalan data PostgreSQL pada perkhidmatan RESTful pada Spring Boot.  Bahagian 1 - 15Tetingkap pop timbul akan dibuka. Pada tab " Umum ", kami menetapkan nama pada jadual kami, contohnya test_table , dan menetapkan akar sebagai pemilik . Menambah pangkalan data PostgreSQL pada perkhidmatan RESTful pada Spring Boot.  Bahagian 1 - 16Pergi ke tab " Lajur ", klik pada " + " untuk membuat lajur baharu. Masukkan nama “ id ” dan jenis data bigserial , yang bersamaan dengan jenis Long di Jawa, tetapi dengan kenaikan automatik (apabila menambah rekod baharu, id akan meningkat secara automatik sebanyak satu). Kami menandakan bukan NULL sebagai " Ya ", kunci utama juga ialah " Ya ". Kami mencipta lajur " nama ", " e-mel " dan " telefonMenambah pangkalan data PostgreSQL pada perkhidmatan RESTful pada Spring Boot.  Bahagian 1 - 17 " dengan cara yang sama . Kami memilih aksara jenis data yang berbeza-beza , ini sepadan dengan jenis String , tetapi membolehkan anda menetapkan panjang maksimum. Kami menetapkan panjang nama maksimum kepada 200 aksara untuk mengisi nama penuh. dalam satu lajur. Kami menetapkan panjang e-mel maksimum kepada 254 aksara. Mengapa e-mel mempunyai panjang maksimum sedemikian boleh didapati di sini . Untuk nombor telefon, pilih 20 aksara, ini sepatutnya mencukupi. Sedikit tentang nombor telefon: Salah tanggapan pengaturcara tentang nombor telefon (Habr) Kami menandai bukan NULL dalam semua lajur sebagai " Ya " jika kami mahu data ini wajib. Klik “ Simpan ”. Itu sahaja, jadual telah dibuat. Untuk memadamkan jadual ujian kami, klik kanan padanya (dalam pokok) dan " padam ", kerana Kami tidak lagi memerlukannya, kerana kami akan membuat jadual daripada program kami. Tutup pgAdmin dan pergi ke program kami. Mari buka IDEA dengan projek kami. Klik Pangkalan Data di lajur kanan antara muka, klik pada " + " untuk menambah pangkalan data kami. Sumber Data Seterusnya --> PostgreSQL . Dalam tetingkap pop timbul, masukkan dalam medan Pengguna peranan akar yang kami buat sebelum ini, dan kata laluan kamiMenambah pangkalan data PostgreSQL pada perkhidmatan RESTful pada Spring Boot.  Bahagian 1 - 18Menambah pangkalan data PostgreSQL pada perkhidmatan RESTful pada Spring Boot.  Bahagian 1 - 19123 dalam medan kata laluan . Dalam medan Pangkalan Data kami menulis nama pangkalan data pelanggan kami . Kami menekan butang Sambungan Uji , dan jika kami melihat tanda semak hijau di bawahnya, maka semuanya teratur, dan kami menekan butang OK . Menambah pangkalan data PostgreSQL pada perkhidmatan RESTful pada Spring Boot.  Bahagian 1 - 20Itu sahaja, kami telah menyambung ke pangkalan data, sekarang mari pergi ke fail pom.xml dan tambah kebergantungan. Untuk bekerja dengan pangkalan data ORM :
<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 Menambah pangkalan data PostgreSQL pada perkhidmatan RESTful pada Spring Boot.  Bahagian 1 - 21 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!
Komen
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION