Artikel ini sebelumnya didasarkan pada rekonstruksi SQLSessionFactoryBean, jadi saya akan meninjau secara singkat operasi apa yang saya lakukan:
Buat SQLSessionFactoryBean baru, dan kode awalnya sama dengan mybatis-spring;
Refactor Metode BuildSQLSessionFactory (), mengekstrak banyak pernyataan IF ke dalam satu set metode kecil, cadangan metode konfigurasi khusus, dan menambahkan metode pengambil atribut umum;
Ekstrak Antarmuka Pabrik Komponen dan Menyediakan Kelas Pembuatan Komponen Kelas SQLSessionComponetFactorys, yang secara terpusat mengelola xxx baru () yang tersebar di berbagai tempat untuk memfasilitasi penggantian komponen.
Sekarang mari kita lihat cara memperluas. Pertama, buat SchemasqlSessionFactoryBean, mewarisi SQLSessionFactoryBean yang direfaktor, dan menyinkronkannya ke kelas yang baru dibuat dalam konfigurasi XML:
SCHEMASQLSESSIONFACTORYBEAN KELAS PUBLIK EXTENDS SQLSESSIONFACTORYBEAN {}Untuk beberapa ekstensi fungsi sederhana, seperti mengatur jenis hasil default dan memindai singkatan tipe yang ditentukan, saya tidak akan membahasnya banyak di sini. Di sini saya akan fokus pada cara memperluas untuk memverifikasi konfigurasi SQLMapper menggunakan XSD.
1. Menimpa metode doparsesqlmapperresource () di sqlsessionfactorybean. Fungsi metode ini adalah untuk menguraikan file konfigurasi SQLMapper.
Tentu saja, untuk kompatibilitas, Anda harus terlebih dahulu menentukan apakah itu DTD. Jika itu adalah DTD, analisislah sesuai dengan metode asli, sebaliknya analisis sesuai dengan metode kustom:
Paket org.dysd.dao.mybatis.schema; impor org.apache.ibatis.executor.ErrorContext; impor org.apache.ibatis.session.configuration; impor org.springframework.core.nestedoException; impor org.springframork.coreo.nestedeo; org.springframework.util.xml.xmlvalidationModedetector; skema kelas publik schemasqlsessionfactorybean memperluas sqlsessionfactorybean {@overrideprotected void doparsesqlmapperReSource (konfigurasi konfigurasi, sumber daya mapperlocation) nowrowsEcceptEcceptEcceptEccepte (konfigurasi sumber daya, sumber daya mapperlocation) detectValidationMode (mapperlocation); if (mode == xmlvalidationModedetector.validation_dtd) {// Jika itu dtd, gunakan mybatis parsing super.doparsesqlmapperResource (konfigurasi, mapperlocation);} lain {cobalah {cobalah {{cobalah {cobalah {{cobalah {{cobalah {{cobalah {{{cobalah {{{Use {{{Use {{{{Use {{{{{{{{{{{{{{{/{ this.doparsesqlMapperResourceWithSchema (konfigurasi, mapperlocation);} catch (exception e) {lempar new NesDioException ("Gagal Parse Mapping Resource: '" + MapperLocation + "'", e);} akhirnya {errorContext.instance (). or reset ();}} {errorcontext.instance (). o); {{errorcontext.instance (). or reset ();}} {errorContext.instance (). ee reset ();}} {errorContext.instance (). Reset (); DOPARSESQLMApperReSourceWithSCHEMA (Konfigurasi Konfigurasi, Sumber Daya Mapperlocation) {} private int detectValidationMode (sumber daya mapperlocation) melempar nestedioException {int mode = -1; coba {xmlvalidationModedetector Detector = new XmlvalModedationModectore (New XmlvalidationDationDation (XMLETEDETEDICETECECTECTECTECTECTECTECTECTECTECTECTECTECTECTECTECTE Detector.DetectValidationMode (mapperlocation.getInputStream ());} catch (Exception e) {throw new NestedioException ("Gagal Parse Mapping Resource: '" + Mappperlocation + "'", e);} akhirnya {errorContext.instance (). Reset ();Di sini kami meminjam XMLValidationModedetector di Spring untuk mendeteksi mode verifikasi file konfigurasi XML. Secara logis sederhana, baca saja satu baris demi satu. Sebelum teks dimulai, jika Anda menemukan bahwa ada definisi DTD, Anda akan mengembalikan mode DTD, jika tidak, Anda akan mengembalikan mode XSD (pada kenyataannya, tidak hanya mode deteksi meminjam pegas, tetapi juga namespace khusus di belakangnya juga meminjam pegas).
Pada titik ini, penguraian file konfigurasi SQLMapper telah dibagi menjadi dua cabang, yang kompatibel dengan penguraian resmi mybatis, dan penguraian dalam mode XSD dinavigasi dengan metode doparsesqlmapperresourcewithschema ().
2. Tulis file XSD untuk verifikasi SQLMapper (memerlukan beberapa pengetahuan dasar XSD, silakan merujuk ke catatan studi tentang bagian XML di blog ini)
1. Pertama gunakan alat XML untuk mengonversi file DTD MyBatis menjadi file XSD asli. Ada banyak alat XML yang memiliki fungsi ini. Anda dapat mencari secara online.
Berikut tiga level:
(1) Elemen root (elemen mapper): Sesuai dengan file SQLMapper, ada atribut namespace, mewakili klasifikasi logis elemen anaknya. Perlu dicatat bahwa atribut namespace di sini berbeda dari namespace XML. Yang pertama adalah klasifikasi logis mybatis itu sendiri, dan yang terakhir digunakan untuk mendefinisikan elemen XML dan kendala atribut yang dapat muncul dalam file XML.
(2) Elemen Anak Tingkat Pertama (Cache | Cache-Ref | ResultMap | Parametermap | SQL | Sisipkan | Pembaruan | Hapus | Pilih): Elemen anak tingkat pertama dari Mapper. Karena kerangka kerja Mybatis memiliki pemrosesan elemen anak tingkat pertama yang berbeda, digunakan sebagai tingkat yang terpisah. Karena itu terutama menambah, menghapus, dan perubahan untuk memeriksa pernyataan, itu disebut elemen pernyataan tingkat pernyataan.
(3) Elemen lain (Teks Konfigurasi SQL, Sertakan | Trim | Where | Set | Foreach | Pilih | if): Teks yang digunakan untuk mengonfigurasi skrip SQL, serta elemen skrip dinamis, yang disebut elemen skrip level skrip skrip
2. Buat modifikasi berikut berdasarkan generasi file XSD
(1) Tambahkan namespace, seperti:
<? Xml Version = "1.0" encoding = "UTF-8" mandiri = "no"?> <xsd: skema xmlns = "http://dysd.org/schema/sqlmapper" targetnamespace = "http://dysd.org/schema/sqlmapper" xmlns: xsd = "http://www.w3.org/2001/xmault."
(2) Kemas elemen tingkat pertama ke dalam kelompok pernyataan grup elemen
(3) Ubah elemen mapper untuk memungkinkan elemen di ruang nama lainnya muncul
(4) Membungkus elemen skrip dinamis ke dalam grup elemen Dynascriptgroup dan memungkinkan elemen bernama lainnya muncul
(5) Gunakan DynascriptGroup untuk menggantikan di mana elemen skrip dinamis muncul, seperti elemen <filih>
(6) Beberapa optimisasi lainnya, seperti mendefinisikan pernyataan tiga nilai, disiapkan, dan dapat dipanggil yang dapat diambil dengan pernyataan sebagai jenis enumerasi:
<xsd:simpleType name="statementType"><xsd:restriction base="xsd:token"><xsd:enumeration value="STATEMENT" /><xsd:enumeration value="PREPARED" /><xsd:enumeration value="CALLABLE" /></xsd:restriction></xsd:simpleType>
Yang serupa termasuk parametermode, jdbctype, javatype, dll.
Di atas adalah ringkasan file konfigurasi SQLMapper yang digunakan oleh XSD untuk memverifikasi mybatis. Saya harap ini akan membantu semua orang. Jika Anda memiliki pertanyaan, silakan tinggalkan saya pesan dan editor akan membalas semua orang tepat waktu. Terima kasih banyak atas dukungan Anda ke situs web Wulin.com!