1. Pendahuluan
(1) MySQL adalah sistem basis data relasional, database yang paling umum digunakan dan luas untuk perusahaan internet saat ini. Ini adalah basis data sisi server yang dapat menahan kunjungan bersamaan yang tinggi.
(2) Spring-Data-JPA adalah implementasi dari lapisan repositori yang disediakan di bawah spesifikasi JPA. Ini dapat dikembangkan dengan menggunakan kerangka kerja implementasi yang berbeda seperti Hibernate, OpenJPA dan kerangka kerja lainnya. Ini dapat membuat repositori menjadi sederhana dan menyelesaikan koplingnya dengan lapisan bisnis.
Dalam studi ini, kami menggunakan MySQL + Spring-Data-JPA untuk membangunnya. Metode implementasi JPA menggunakan Hibernate. Kumpulan koneksi database menggunakan DBCP untuk koneksi.
2. Konstruksi Proyek
1. Memperkenalkan dependensi yang berhubungan dengan MySQL dan JPA:
<!-Dependensi terkait Spring-JDBC-> <dependency> <GroupId> org.springframework </groupid> <ArtifactId> Spring-jdbc </artifactid> </dependency> <!-Ketergantungan terkait untuk menghubungkan ke mySQL-> <groundency> <groupid> mySQL </Groupl> <ArtifactId> mysql-connector-java </artifactid> </gandendency> <!-dependensi terkait JPA termasuk spring-data-jpa, spring-anc dan hibernate untuk mendukung JPA-> <dependency> <groupid> org.springframework.boot </groupid> <ArTifactId> Spring-boot-starter-data-jpa </artifactid> </gantage>
Tiga dependensi perlu diperkenalkan. JDBC adalah ketergantungan yang diperlukan oleh Spring Integrating MySQL. Yang kedua adalah ketergantungan driver database MySQL, dan yang ketiga adalah ketergantungan terkait-data-jpa:
Ini termasuk ketergantungan seperti AOP, JDBC, Spring-Ac, Transaction Transaction-API dan Hibernate untuk mendukungnya. Jadi JPA default untuk mengimplementasikannya menggunakan Hibernate.
2. Konfigurasi File Konfigurasi:
Kami memilih file format .yml untuk file konfigurasi dan menggunakan dpcp2 untuk mengonfigurasi parameter kumpulan koneksi:
1) Konfigurasi Terkait Proyek:
Server: #Configuration Port Number Port: 8088Spring: Aplikasi: #Configuration Nama Layanan Nama: CMS-Dept
Berikut adalah informasi yang relevan tentang mengonfigurasi pembukaan server, terutama mengonfigurasi nama dan port server
2) Konfigurasi Terkait MySQL
Spring: #Data Sumber dan Konfigurasi JPA DataSource: #Konfigurasi Terkait Database URL -SSL Koneksi disetel ke URL false: JDBC: MySQL: // LocalHost: 3306/CRM? Karakterenkoding = UTF8 & USESSL = FALSE #Configuration USERNAME: *** #Configuration Sumber
Berikut adalah beberapa konfigurasi terkait database, terutama mengonfigurasi URL database, akun, dan kata sandi. Informasi konfigurasi setelah URL adalah format pengkodean MySQL yang terhubung dan apakah enkripsi SSL diaktifkan.
3) Konfigurasi Terkait DBCP
Musim semi: #berikut adalah konfigurasi dbcp2 untuk kumpulan koneksi yang terkait: #initialize kumpulan koneksi ukuran awal: 10 #-titching jumlah minimum kumpulan koneksi min-idle: 10 #konfigurasi jumlah maksimum koneksi kumpulan max-idle: 30 #konfigurasi waktu tunggu untuk deteksi deteksi max-wait-millis: 30000 #konfigurasi berapa lama. Time-Between-Eviction-Runs-Millis: 200000 #Konfigurasikan Waktu Kelangsungan Hidup Minimum Koneksi Dalam Koneksi Kolam Remaja Lepaskan-Di atas Pemenuhan: 200000
Ini terutama dikonfigurasi sebagai beberapa informasi kumpulan koneksi, dan detail konfigurasi ditampilkan dalam komentar di atas.
4) Spring-Data-JPA didasarkan pada konfigurasi terkait Ihibernata
Spring: JPA: #Configure Database Tipe Basis Data: mysql #configure apakah akan mencetak SQL show-sql: true #hibernate terkait konfigurasi hibernate: #configure cascade level ddl-auto: perbarui penamaan: #nibernate hibnate: org. org.hibernate.dialect.mysql5dialect
Konfigurasi adalah jenis database koneksi, dan apakah akan mencetak kaskade SQL dan hibernate, ada beberapa jenis:
1) Validasi- Saat Hibernate dimuat, verifikasi pembuatan struktur tabel basis data.
2) Buat- Buatlah setiap kali hibernate dimuat, struktur tabel basis data diciptakan kembali, yang merupakan alasan hilangnya data tabel basis data.
3) Buat drop yang dibuat saat hibernate dimuat, dan keluar untuk menghapus struktur tabel.
4) UPDATE-CASCADE UPDATE LOAD Hibernate secara otomatis memperbarui struktur basis data.
Di sini kami memilih pembaruan cascading dan mengulangi pada tabel asli.
Ada dua jenis strategi penamaan:
1), org.springframework.boot.orm.jpa.hibernate.springphysicalnamingsstrategy bertemu dengan huruf kapital plus "_".
2), org.hibernate.cfg.
3. Konfigurasikan kelas terkait:
Kelas konfigurasi perlu dikonfigurasi dalam direktori horizontal atau subdirektori dengan kelas pneumatik sebelum dapat dikonfigurasi dengan sukses. Di sini kami menggunakan konfigurasi kelas Java alih -alih metode XML untuk konfigurasi:
/*** @function Deskripsi: Kelas untuk konfigurasi terkait MySQL* @Author Administrator* /// Baris berikut digunakan untuk mengurutkan antarmuka anotasi untuk menangani masalah prioritas beban. Ini memiliki dua variabel enumerasi @order (ordered.highest_precedence) // Baris berikut mewakili kelas ini sebagai kelas konfigurasi @configuration // baris berikut mewakili kelas ini untuk mengaktifkan manajemen transaksi @Enabletransaction Management (proxytargetclass = true) // Ini juga dapat didefinisikan sebagai kelas seperti deprepClass = true) // Ini juga dapat didefinisikan sebagai kelas seperti deprepClass. @Componentscan.filter (type = filtertype.annotation, value = service.class)} @EnableJparepositories (BasePackages = "com.hzt. **. Repositori") Kelas Publik MySQLConfig {@Bean PersistenceExceptanclationPostPransexeprosororslation (possepessoryprosorypionorslationPranscepioncy (@bean) PersistenceExceptionTranslationPostProcessor (); }} 1) @order anotasi, digunakan untuk mengonfigurasi prioritas pemuatan kelas, ia memiliki dua variabel enumerasi:
Ordered.highest_precedence- integer.min_value - nilai minimum, dengan prioritas tertinggi
Ordered.lowest_precedence -integer.max_value -Maximal nilai, dengan prioritas terendah
2) Anotasi @configuration, yang berarti kelas ini adalah kelas konfigurasi
3) @enabletransactionManagement Transaction Management untuk MySQL ProxyTargetClass = True Means untuk Mengaktifkan Manajemen Transaksi Kelas
4) @EnableJparepositories digunakan untuk mengonfigurasi transaksi. Di sini jalur diwakili oleh ekspresi CGNL, dan juga dapat didefinisikan sebagai kelas tertentu, seperti Deptrepository.class
Elemen anak -anaknya termasukfilters dapat mendefinisikan pencegat transaksi, seperti includeFilters = { @componentscan.filter (type = filtertype.annotation, value = service.class)}
4. ORM Pemetaan Kode Terkait Kelas Java:
1) Struktur Tabel Basis Data
2) Pemetaan Kelas Entitas
@Entity // mewakili jenis kelas entitas pemetaan ini untuk tabel @table (name = "tbl_dept") // Atur nama tabel yang sesuai dengan Departemen Public Class Implementsable { /*** Fungsi Deskripsi: Keunikan selama serialisasi, Metode Get dan Set yang sesuai telah dihilangkan. */ private static final long serialversionuid = 1l; /** primary key -id uuid */ @Id //This note means that the field is the primary key of the class @GeneratedValue(generator="system-uuid") @GenericGenerator(name="system-uuid",strategy = "uuid") //name - Specify the name of the corresponding column, length - Maximum length @Column(name="id",length=32) // private String id; /** angka, unik*/// nullable - bisakah itu null, default ke true unik - apakah unik, default ke false @column (name = "no", nullable = false, unik = true) integer private integer no; / ** Nama departemen*/ @column (name = "name", unik = true, nullable = false) nama string pribadi; / ** Kunci utama manajemen departemen -ID uuid*/ @column (name = "manager", unik = true, nullable = false) private string manager; / ** Deskripsi departemen*/ @column (name = "description") Private String Description; / ** Telepon departemen*/ @column (name = "phone") Private String Phone; / ** Telepon departemen*/ @column (name = "phone") Private String Phone; / ** Waktu penciptaan departemen*/ @column (name = "createTime") @DateTimEformat (pola = "yyyy-mm-dd hh: mm: ss") tanggal createTime tanggal pribadi; / ** Waktu modifikasi departemen*/ @column (name = "editTime") @dateTimeformat (pola = "yyyy-mm-dd hh: mm: ss") edittime tanggal pribadi;} (1), @entity mewakili struktur tabel dari jenis pemetaan ini sebagai database
(2), @table (name = "tbl_dept") Anotasi ini digunakan untuk mengonfigurasi hubungan antara kelas entitas dan pemetaan tabel. Nama mewakili nama tabel yang dipetakan.
(3) Anotasi @ID berarti bahwa kelas ini adalah kunci utama
(4), anotasi @GeneratedValue digunakan untuk mengonfigurasi informasi kunci terkait utama, dan atribut generator digunakan untuk mengonfigurasi strategi pembuatan. Ada nilai enumerasi berikut:
1.Auto - Kunci utama dikendalikan oleh program.
2. Identitas - secara otomatis dihasilkan oleh database.
3. Enerator - Menentukan generator yang digunakan untuk menghasilkan kunci utama.
4. Urutan - Hasilkan kunci primer berdasarkan urutan database yang mendasarinya.
5. Tabel - Gunakan tabel basis data tertentu untuk menyimpan kunci utama.
6. Sistem-UUID mewakili penggunaan UUID yang dihasilkan oleh sistem untuk pencocokan.
(5) Anotasi @Column untuk mengonfigurasi informasi terkait kolom 1. Bidang nama digunakan untuk menentukan bidang pemetaan yang dipetakan ke struktur tabel.
2. Panjang mewakili kendala panjang bidang ini dan dapat dihilangkan.
3. Atribut unik mewakili apakah bidang ini memiliki kendala unik yang diaktifkan. Standarnya salah, dan uniknya benar.
4. Nullable berarti apakah bidang ini bisa kosong, dan standarnya benar. Salah berarti itu tidak bisa kosong.
(6) @DateTimEFormat digunakan untuk memetakan waktu tabel basis data.
Metode GET dan Set yang sesuai telah dihilangkan.
3) Implementasi Lapisan Deptrepositori
Seperti yang ditunjukkan pada gambar, respositori adalah spesifikasi antarmuka, dengan pewarisan sub-antarmuka yang berbeda. Selain mewarisi semua fungsi antarmuka induk, setiap sub-antarmuka juga akan menambahkan metode tambahan untuk implementasi yang berbeda. Kelas crudrepository mendefinisikan metode dasar dan subkelasnya diperluas secara terpisah.
Misalnya, selain mewarisi semua metode crudrepository, kelas pagingandsortingRepository juga memperluasnya, menambahkan metode yang relevan untuk pencarian paging:
Iterable <t> findAll (sort sort); page <t> findAll (pagable pagable);
JParePository diperluas berdasarkan pagingandsorttingrepository.
1. Lapisan Repositori:
@Repository menyatakan bahwa kelas ini dikelola oleh Spring, dan itu adalah lapisan DAO
/*** @Function Deskripsi: Antarmuka lapisan DAO untuk operasi tabel departemen* @Author Administrator*/ @Repositori // Repositori Ini adalah DAO Lapisan Implementasi Public Interface Deptrepository memperluas jParepository <Dept, String> {}Bergantung pada kelas implementasi, ia memiliki metode yang berbeda untuk dihubungi. Secara umum, semua orang dapat mengetahui penggunaan metode ini dengan mengetahui nama dan artinya. Dalam tipe generik, parameter pertama mewakili kelas entitas peta tabel, dan parameter kedua mewakili jenis kunci utama.
2. Implementasi Lapisan Layanan:
/*** @Function Deskripsi: Kelas Implementasi untuk Operasi Layanan Departemen* Administrator @Author*/ @ServicePublic DeptserviceImpl mengimplementasikan deptService {/** kelas pemrosesan log*/private final Logger log = loggerFactory.getLogger (getSclass ()); @Autowired Private Deptrepository Repository; @Override public dept queryById (string id) melempar Exception {try {dept result = repository.findOne (id); log.info (result.toString ()); hasil pengembalian; } catch (Exception e) {log.info (e.toString (), e); Lemparkan Layanan Baru ("Pengecualian terjadi saat bertanya menurut ID!"); }}}Di mana findOne adalah metode yang diimplementasikan oleh jParepository.
3. Implementasi Lapisan Pengontrol:
@Restcontroller@requestMapping ("/API/V1/DEPT") Public Class DeptController {/** Kelas logging*/Log Logger Privat = LoggerFactory.GetLogger (getClass ()); / ** Layanan saya sendiri*/ @Autowired Private Deptservice Service; /*** @function Deskripsi: Metode untuk permintaan departemen Konten berdasarkan ID* @Return Dept*/@getMapping ("/id/get") hasil publik getById (ID String) melempar pengecualian {verify (verifyparam baru ("id departemen", id)); mengembalikan hasil baru ("berhasil diperoleh melalui id!", service.querybyid (id)); }}Di mana RestController mewakili pengontrol yang mengembalikan format JSON, @RequestMapping mendefinisikan URL peta kelasnya. Data yang kami terima di sini adalah jenis string normal. Jika Anda perlu menerima jenis JSON, Anda memerlukan ID String @RequestBody untuk mengonfigurasi parameter permintaan untuk diterima.
4. Tes:
Simulasikan mengirim permintaan GET untuk menyelesaikan integrasi dan konfigurasi Spring-Data-JPA dan MySQL.
Di atas adalah semua konten artikel ini. Saya berharap ini akan membantu untuk pembelajaran semua orang dan saya harap semua orang akan lebih mendukung wulin.com.