บทความนี้ก่อนหน้านี้ขึ้นอยู่กับการสร้าง SQLSessionFactoryBean ใหม่ดังนั้นฉันจะตรวจสอบสั้น ๆ ว่าฉันทำอะไร:
สร้าง SQLSessionFactoryBean ใหม่และรหัสเริ่มต้นเหมือนกับ MyBatis-Spring;
refactor วิธีการ buildsqlsessionfactory () แยกจำนวนมากถ้าคำสั่งเป็นชุดของวิธีการขนาดเล็ก, วิธีการสำรองการกำหนดค่าที่กำหนดเองและเพิ่มแอตทริบิวต์ทั่วไปวิธีการ getter;
แยกอินเทอร์เฟซส่วนประกอบของโรงงานและจัดเตรียมเครื่องมือการสร้างส่วนประกอบคลาส SQLSessionComponetFactorys ซึ่งเป็นศูนย์กลางการจัดการ XXX () ใหม่ที่กระจัดกระจายในสถานที่ต่าง ๆ เพื่ออำนวยความสะดวกในการเปลี่ยนส่วนประกอบ
ทีนี้มาดูวิธีการขยาย ก่อนอื่นสร้าง schemasqlsessionfactorybean สืบทอด sqlsessionfactorybean refactored และซิงโครไนซ์กับคลาสที่สร้างขึ้นใหม่ในการกำหนดค่า XML:
schemasqlsessionfactorybean ขยายระดับ SQLSessionFactoryBean {}สำหรับส่วนขยายฟังก์ชั่นง่าย ๆ บางอย่างเช่นการตั้งค่าประเภทผลลัพธ์เริ่มต้นและการสแกนตัวย่อประเภทที่ระบุฉันจะไม่พูดคุยกันมากที่นี่ ที่นี่ฉันจะมุ่งเน้นไปที่วิธีการขยายเพื่อตรวจสอบการกำหนดค่าของ SQLMapper โดยใช้ XSD
1. เขียนทับวิธี Doparsesqlmapperresource () ใน SQLSessionFactoryBean ฟังก์ชั่นของวิธีนี้คือการแยกวิเคราะห์ไฟล์การกำหนดค่า SQLMapper
แน่นอนสำหรับความเข้ากันได้คุณต้องพิจารณาก่อนว่าเป็น DTD หรือไม่ หากเป็น DTD ให้วิเคราะห์ตามวิธีดั้งเดิมมิฉะนั้นจะวิเคราะห์ตามวิธีที่กำหนดเอง:
แพ็คเกจ org.dysd.dao.mybatis.schema; นำเข้า org.apache.ibatis.executor.errorContext; นำเข้า org.apache.ibatis.session.configuration; นำเข้า org.springframework.core.nestedioexception; org.springframework.util.xml.xmlvalidationmodedetector; schemasqlsessionfactorybean ขยายระดับสาธารณะ == xmlvalidationModeDetector.validation_dtd) {// ถ้าเป็น dtd ให้ใช้ mybatis อย่างเป็นทางการการแยกวิเคราะห์ super.doparsesqlmapperresource (การกำหนดค่า mapperlocation);} {ลอง {// ใช้ schema {โยน nestedioexception ใหม่ ("ล้มเหลวในการแยกวิเคราะห์ทรัพยากรการแมป: '" + mapperlocation + "'", e);} ในที่สุด {errorContext.instance (). รีเซ็ต ();}}} การป้องกันโมฆะ doparsqlmapperresourceWithSchema (การกำหนดค่าการกำหนดค่า nestedioException {int mode = -1; ลอง {xmlvalidationModeDetector detector = ใหม่ xmlvalidationModeDetector (); mode = detector.detectValidationMode (mapperlocation.getInputStream ()} catch (ข้อยกเว้น e) e);} ในที่สุด {errorContext.Instance (). รีเซ็ต ();} โหมดส่งคืน;}}ที่นี่เรายืม XMLValidationModeDetector ในฤดูใบไม้ผลิเพื่อตรวจจับโหมดการตรวจสอบของไฟล์การกำหนดค่า XML มันเป็นเรื่องง่ายเพียงแค่อ่านหนึ่งบรรทัดโดยหนึ่งบรรทัด ก่อนที่ข้อความจะเริ่มขึ้นหากคุณพบว่ามีคำจำกัดความ DTD คุณจะส่งคืนโหมด DTD มิฉะนั้นคุณจะส่งคืนโหมด XSD (อันที่จริงไม่เพียง แต่โหมดการตรวจจับยืมสปริง แต่ยังรวมถึงเนมสเปซที่กำหนดเองด้านหลังยังยืมสปริง)
ณ จุดนี้การแยกวิเคราะห์ของไฟล์การกำหนดค่า SQLMapper ได้ถูกแบ่งออกเป็นสองสาขาซึ่งเข้ากันได้กับการแยกวิเคราะห์อย่างเป็นทางการของ mybatis และการแยกวิเคราะห์ในโหมด XSD นั้นนำทางไปยังวิธีการ DoparsesqlmapperresourceWithSchema ()
2. เขียนไฟล์ XSD เพื่อตรวจสอบ SQLMapper (ต้องการความรู้พื้นฐานของ XSD โปรดดูบันทึกการศึกษาในส่วน XML ในบล็อกนี้)
1. ก่อนอื่นใช้เครื่องมือ XML เพื่อแปลงไฟล์ DTD ของ MyBatis เป็นไฟล์ XSD ดั้งเดิม มีเครื่องมือ XML มากมายที่มีฟังก์ชั่นนี้ คุณสามารถค้นหาออนไลน์
นี่คือสามระดับ:
(1) องค์ประกอบรูท (องค์ประกอบ MAPPER): สอดคล้องกับไฟล์ SQLMAPPER มีแอตทริบิวต์เนมสเปซซึ่งแสดงถึงการจำแนกประเภทเชิงตรรกะขององค์ประกอบลูก ควรสังเกตว่าแอตทริบิวต์เนมสเปซที่นี่แตกต่างจากเนมสเปซ XML อดีตคือการจำแนกแบบตรรกะของ mybatis เองและหลังใช้เพื่อกำหนดองค์ประกอบ XML และข้อ จำกัด แอตทริบิวต์ที่สามารถปรากฏในไฟล์ XML
(2) องค์ประกอบเด็กระดับแรก (แคช | แคช-รีฟ | ผลลัพธ์ MAP | PARAMETERMAP | SQL | แทรก | UPDATE | ลบ | เลือก): องค์ประกอบลูกระดับแรกของ MAPPER เนื่องจากกรอบ MyBatis มีการประมวลผลองค์ประกอบเด็กระดับแรกที่แตกต่างกันจึงใช้เป็นระดับแยกต่างหาก เนื่องจากส่วนใหญ่จะเพิ่มลบและการเปลี่ยนแปลงเพื่อตรวจสอบคำสั่งจึงเรียกว่าองค์ประกอบคำสั่งระดับคำสั่ง
(3) องค์ประกอบอื่น ๆ (ข้อความการกำหนดค่า SQL รวมถึง | Trim | โดยที่ | Set | foreach | เลือก | ถ้า): ข้อความที่ใช้ในการกำหนดค่าสคริปต์ SQL เช่นเดียวกับองค์ประกอบสคริปต์แบบไดนามิกที่เรียกว่าองค์ประกอบสคริปต์ระดับสคริปต์
2. ทำการแก้ไขต่อไปนี้ตามการสร้างไฟล์ XSD
(1) เพิ่มเนมสเปซเช่น:
<? xml version = "1.0" encoding = "utf-8" standalone = "ไม่"?> <xsd: schema xmlns = "http://dysd.org/schema/sqlmapper" targetNamespace = "http://dysd.org/schema/sqlmapper" xmlns: xsd = "http://ww.w3.org/2001/2001/2001/2001/2001/2001/2001/2001/2001
(2) แพ็คเกจองค์ประกอบระดับแรกลงในกลุ่มคำสั่งกลุ่มองค์ประกอบ
(3) แก้ไของค์ประกอบ Mapper เพื่อให้องค์ประกอบในเนมสเปซอื่น ๆ ปรากฏขึ้น
(4) การห่อองค์ประกอบสคริปต์แบบไดนามิกลงในกลุ่มองค์ประกอบ dynaScriptGroup และอนุญาตให้องค์ประกอบที่มีชื่ออื่น ๆ ปรากฏขึ้น
(5) ใช้ dynascriptgroup เพื่อแทนที่ที่องค์ประกอบสคริปต์แบบไดนามิกปรากฏขึ้นเช่น <elect> องค์ประกอบ
(6) การปรับให้เหมาะสมอื่น ๆ เช่นการกำหนดคำสั่งสามค่าที่เตรียมไว้และ callable ที่สามารถนำมาใช้โดยการระบุประเภทเป็นประเภทการแจงนับ:
<xsd: simpleType name = "stementType"> <xsd: ข้อ จำกัด ฐาน = "xsd: โทเค็น"> <xsd: ค่าการแจงนับ = "คำสั่ง" /> <xsd: ค่าการแจงนับ = "เตรียม" /> <xsd: การแจงนับ
สิ่งที่คล้ายกันรวมถึง parametermode, jdbctype, javatype ฯลฯ
ข้างต้นเป็นบทสรุปของไฟล์กำหนดค่า SQLMapper ที่ใช้โดย XSD เพื่อตรวจสอบ MyBatis ฉันหวังว่ามันจะเป็นประโยชน์กับทุกคน หากคุณมีคำถามใด ๆ โปรดฝากข้อความถึงฉันและบรรณาธิการจะตอบกลับทุกคนในเวลา ขอบคุณมากสำหรับการสนับสนุนเว็บไซต์ Wulin.com!