ให้ฉันแนะนำสั้น ๆ เกี่ยวกับ mybatis
MyBatis เป็นเฟรมเวิร์กเลเยอร์การคงอยู่ที่ยอดเยี่ยมที่รองรับการสืบค้น SQL แบบธรรมดาขั้นตอนที่เก็บไว้และการทำแผนที่ขั้นสูง MyBatis กำจัดการตั้งค่าด้วยตนเองของรหัส JDBC เกือบทั้งหมดและพารามิเตอร์และการค้นหาการห่อหุ้มของชุดผลลัพธ์ MyBatis สามารถใช้ XML อย่างง่ายหรือคำอธิบายประกอบสำหรับการกำหนดค่าและการแมปดั้งเดิมการแมปอินเทอร์เฟซและ pojos ของ Java (วัตถุ Java เก่าธรรมดา) ลงในบันทึกในฐานข้อมูล
บทความนี้เป็นบทสรุปของการดำเนินการ Java Oracle Type XMLType Summary 2: การใช้ mybatis
MyBatis ใช้เครื่องแปลงที่กำหนดเองซึ่งง่ายมาก ขั้นตอนหลักของมันแบ่งออกเป็นสามขั้นตอน ที่นี่เราใช้ประเภท XMLTYPE เป็นตัวอย่าง
ขั้นตอนแรก
สร้างคลาสการแปลงใหม่เพื่อใช้อินเทอร์เฟซ TypeHandler ทั่วไปของอินเตอร์เฟสระบุประเภทพารามิเตอร์และหากไม่ได้ระบุไว้จะเป็นวัตถุ:
คลาสสาธารณะ XMLTYPETYPEHANDLER ใช้ TypeHandler <string>
อินเทอร์เฟซนี้มี 4 วิธีต่อไปนี้:
โมฆะสาธารณะ SetParameter (PreparedStatement PS, Int I, พารามิเตอร์สตริง, JDBCTYPE JDBCTYPE) สตริงสาธารณะ getResult (ผลลัพธ์ RS, คอลัมน์สตริง) พ่น SQLExceptionPublic String GetResult
ฟังก์ชั่นของวิธีการควรเข้าใจด้วยชื่อ SetParameter เป็นการดำเนินการเมื่อผ่านพารามิเตอร์ รหัสที่ต้องประมวลผลก่อนที่พารามิเตอร์จะถูกส่งผ่านไปยังฐานข้อมูลสามารถเขียนได้ในวิธีนี้ อีกสามวิธีเป็นวิธีการรับผลการสอบถาม หลังจากได้รับผลลัพธ์การสืบค้นของ JDBC แล้วมันสามารถแปลงเป็นประเภทใดก็ได้ที่คุณต้องการ
ขั้นตอนที่ 2
ใน Mapper-Config ให้ลงทะเบียนคลาส Converter ที่คุณใช้งานซึ่งประเภทที่ JDBCType สามารถระบุได้ถูกกำหนดไว้อย่างชัดเจนในคลาสการแจงนับของ MyBatis org.apache.ibatis.type.jdbctype ไม่สามารถเป็นค่าอื่นนอกเหนือจาก enum มิฉะนั้นจะเกิดข้อผิดพลาด ที่นี่เนื่องจาก enum ไม่มีประเภท xmltype ที่เราต้องการจึงถูกระบุว่าไม่ได้กำหนด (คุณไม่สามารถระบุประเภทเฉพาะได้คุณสามารถใช้ TypeHandler เพื่อระบุคลาสเฉพาะเมื่อใช้):
<typeHandlers> <typeHandler javatype = "String" jdbcType = "undefined" handler = "com.tyyd.dw.context.xmltypetypepehandler"/> </typehandlers>
ขั้นตอนที่ 3
ใช้ตัวแปลงประเภทในไฟล์แม็พ Mapper ของคุณ:
แทรกลงในค่า t_content (<รวม refid = "fullColumns"/>) ค่า (#{controlId, jdbcType = bigint},#{xmlfile, javatype = string, jdbctype = undefined, typeHandler = com.tyyd.dw.context.xmltypetypehandler},#{drmfileให้ความสนใจกับพารามิเตอร์ XMLFile ที่เข้ามาโดยระบุ Javatype, JDBCType และ TypeHandler ซึ่งระบุประเภทของโปรเซสเซอร์ที่เราต้องการใช้ แน่นอนคุณสามารถระบุหนึ่งในนั้นได้ แต่การมีอยู่ของรายการนี้จะต้องไม่ซ้ำกัน หากหลายรายการเหมือนกันและข้อกำหนดไม่ชัดเจน mybatis จะทำให้เกิดข้อผิดพลาดเพราะไม่สามารถแยกแยะได้
ณ จุดนี้ตัวแปลงประเภทที่กำหนดเองสำหรับ mybatis ได้ถูกนำไปใช้ ควรสังเกตว่าโปรเซสเซอร์ประเภทที่ระบุข้างต้นใช้งานได้เฉพาะเมื่อแทรกข้อมูล หากคุณต้องการใช้โปรเซสเซอร์ประเภทที่กำหนดเองในระหว่างการสืบค้นคุณต้องระบุไว้ในแท็กของแอตทริบิวต์ในผลลัพธ์ ชื่อและวิธีการใช้งานของแท็ก Javatype, JDBCType และ TypeHandler เหมือนกันดังนั้นฉันจะไม่ทำซ้ำที่นี่
แนบรหัสแปลงประเภทที่สมบูรณ์ เนื่องจากเมื่อประเภท XMLTYPE ถูกสืบค้นคุณสามารถใช้ XMLTYPE.GETCLOBVAL () ของฐานข้อมูลเพื่อส่งคืนโดยตรงเป็นสตริงเพื่อทำงานดังนั้นวิธีการส่งคืนจึงไม่ได้ดำเนินการเป็นพิเศษ (คุณยังสามารถใช้ฟังก์ชัน XMLTYPE.GETSTRINGVAL () เพื่อส่งคืนสตริง แต่ในระหว่างการใช้งานจริงพบว่าเมื่อฟิลด์เป็นค่า null, getStringVal () จะมีข้อผิดพลาดของ ORA-06502: ข้อผิดพลาดตัวเลขหรือค่าสตริงอักขระ
/*** oracle sys.xmltype โปรเซสเซอร์ที่กำหนดเอง** ผู้ใช้: liyd* วันที่: 13-12-27* เวลา: 4:53 PM*/คลาสสาธารณะ XMLTYPETYPEHANDLER ใช้ TypeHandler <String> {@OverridePublic Void Setparameter ข้อผิดพลาดจากการสร้าง xmlType เมื่อต้องการ null ถ้า (stringutils.isnotblank (พารามิเตอร์)) {มอบหมายการเชื่อมต่อการเชื่อมต่อ = (มอบหมายการเชื่อมต่อ) ps.getConnection (). getMetadata () getConnection (); พารามิเตอร์); ps.setObject (i, xmltype);} else {ps.setstring (i, null);}}@verridepublic สตริง getResult (ผลลัพธ์ rs, คอลัมน์สตริง) โยน sqlexception rs.getString (columnName);}@overridepublic String getResult (Resultset rs, int columnindex) พ่น sqlexception {return rs.getString (columnindex);}@overridepublic String getResultด้านบนเป็นวิธีการใช้ TypeHandler สำหรับ MyBatis เพื่อใช้ตัวแปลงประเภทที่กำหนดเองโดย TypeHandler ฉันหวังว่ามันจะเป็นประโยชน์กับทุกคน หากคุณมีคำถามใด ๆ โปรดฝากข้อความถึงฉันและบรรณาธิการจะตอบกลับทุกคนในเวลา ขอบคุณมากสำหรับการสนับสนุนเว็บไซต์ Wulin.com!