MyBatis เป็นกรอบเลเยอร์ที่ยั่งยืนมากในอุตสาหกรรม มันมีน้ำหนักเบาและใช้งานง่าย มันเป็นผู้นำอย่างสมบูรณ์ในด้านการเงินด้านไอที มันเป็นที่นิยมมากกว่าไฮเบอร์เนตมีข้อได้เปรียบมากมายและก็คุ้มค่าที่จะเรียนรู้ แต่ MyBatis ไม่สมบูรณ์แบบและการออกแบบและการเข้ารหัสของตัวเองยังคงมีข้อบกพร่องมากมายแม้กระทั่งข้อบกพร่อง บทความนี้กล่าวถึงข้อบกพร่องเหล่านี้สั้น ๆ :
1.MyBatis ใช้ DTD เป็นไฟล์การตรวจสอบสำหรับไฟล์การกำหนดค่า XML แต่เป็นที่ชัดเจนว่า DTD เกือบจะเป็นเทคโนโลยีที่ถูกลบ มันมีฟังก์ชั่นที่ จำกัด มากความสามารถในการปรับขนาดได้ไม่ดีความสามารถในการปรับขนาดได้ไม่ดีความสามารถในการปรับขนาดได้ไม่ดีและการอ่านไม่ดี ฤดูใบไม้ผลิสามารถเปลี่ยนจาก DTD เป็น XSD ได้อย่างงดงาม แต่ MyBatis ไม่เคยมีความกล้าหาญนี้
2. หากความเข้ากันได้ของเวอร์ชันทำได้ไม่ดีให้ใช้ 3.3.0―> 3.4.0 เป็นตัวอย่าง ตามข้อกำหนดทั่วไปของอุตสาหกรรมหมายเลขเวอร์ชันระดับที่สองสามารถอัพเกรดได้และสามารถเพิ่มฟังก์ชั่นได้ แต่ต้องมั่นใจในความเข้ากันได้แบบย้อนหลัง อย่างไรก็ตามวิธีการของ MyBatis ไม่เป็นเช่นนี้ ดูวิธีการสำคัญของ attementhandler เพื่อเตรียม:
// 3.3.0Statement เตรียม (การเชื่อมต่อการเชื่อมต่อ) พ่น sqlexception; // 3.4.0Statement เตรียม (การเชื่อมต่อการเชื่อมต่อ, transactiontimeout จำนวนเต็ม) โยน sqlexception;
ไม่มีวิธีเพิ่มที่นี่ แต่มีการเพิ่มพารามิเตอร์โดยตรงไปยังวิธีดั้งเดิม! มีตัวอย่างที่คล้ายกันมากมายดังนั้นฉันจะไม่แสดงรายการทีละรายการ
3. MyBatis Plug-in ใช้อินเทอร์เฟซ Interceptor ทั่วไปพร้อมด้วยคำอธิบายประกอบเช่น @Intercepts และ @Signature เพื่อใช้วิธีการสกัดกั้นหลายส่วนประกอบ ดูเหมือนว่ายืดหยุ่นมาก ในความคิดของฉันโครงสร้างไม่ชัดเจนพอ ในระหว่างการพัฒนาที่เกิดขึ้นจริงคุณจะทำการปรับปรุงการสกัดกั้นของ StatementHandler และ Resultsethandler ในชั้นเรียนเดียวหรือไม่? มันไม่ถูกต้อง (ใช่คุณเป็นหลักการความรับผิดชอบเดียวและหลักการเปิดและปิดทั้งหมดอึทั้งหมด?) ดังนั้นทำไมจึงจำเป็นต้องบังคับอินเทอร์เฟซเดียวกัน?
นอกจากนี้ให้ใช้คำอธิบายประกอบ @Signature เพื่อระบุวิธีการส่วนประกอบที่ต้องสกัดกั้น หากคำอธิบายประกอบผิดการรวบรวมจะไม่รายงานข้อผิดพลาด คุณสามารถรอได้จนกว่าจะวิ่งเพื่อค้นพบ มาดูตัวอย่างข้างต้น:
สมมติว่าฉันใช้ปลั๊กอินสำหรับเวอร์ชัน 3.3.0:
@Intercepts ({@signature (type = stementhandler.class, method = "เตรียม", args = {connect.class})}) คำแถลงคลาสสาธารณะ HandlerInterceptor ใช้ interceptor {@overridepublic object clusplic. สิ่งนี้);}@overridepublic void setProperties (คุณสมบัติคุณสมบัติ) {}}จากนั้นมันได้รับการอัพเกรดเป็น 3.4.0 เป็นผลให้การรวบรวมเป็นเรื่องปกติ แต่เมื่อมันถูกเรียกใช้ข้อยกเว้นก็ถูกโยนลงไป
4. แคชของ MyBatis นั้นไร้ประโยชน์และไม่ว่าจะมีการกำหนดค่าหรือไม่จำเป็นต้องใช้แคชหรืออัปเดตแคชมันเป็นสิ่งจำเป็นในการคำนวณ Cachekey หากไม่มีแคชหรืออัปเดตแคชการคำนวณนี้เป็นของเสีย
5. สำหรับการดำเนินการแบทช์ของ mybatis ดูตัวอย่าง JDBC ต่อไปนี้:
โมฆะสาธารณะ testjdbcbatch (Connection Conn) โยนข้อยกเว้น {ลอง {conn.setautocommit (เท็จ); batchupdate (conn); cleartestdata (conn); conn.commit (); conn.setautocommit (true); {PreparedStatement ps = null; ลอง {ps = conn.preparestatement ("ลบ table_name1 โดยที่ field_name1 =?"); ps.setstring (1, "ทดสอบ"); int d = ps.executeUpdate (); e) {}}} โมฆะส่วนตัว batchupdate (การเชื่อมต่อ Conn) พ่น sqlexception {preparedstatement ps = null; ลอง {string sql = "แทรกลงใน table_name2 (field_name1, field_name2, field_name2) ค่า (? i ++) {string random = randomstringutils.randomalphabetic (8); ps.setstring (1, "test"); // field_name1ps.setstring (2, "data" + สุ่ม); // field_name2ps.setstring (3, "parameter" ps.executeBatch ();} ในที่สุด {ลอง {ps.close ();} catch (Exception e) {}}}}รหัสไม่มีความรู้สึกที่ไม่สอดคล้องกันสามารถดำเนินการตามปกติและยังสามารถย้อนกลับได้ตามที่คาดไว้ กล่าวคือการเชื่อมต่อเดียวกันในการทำธุรกรรมเดียวกันสามารถเรียกใช้ SQL สามัญและแบทช์ในเวลาเดียวกัน แต่คุณลองใช้ใน SQLSession ของการทำธุรกรรมเดียวกันและสิ่งที่คุณตอบกลับคือคุณไม่สามารถเปลี่ยนวิธีการดำเนินการในการทำธุรกรรมเดียวกัน!
6. ความเข้ากันได้ของผลิตภัณฑ์ฐานข้อมูล: MyBatis มอบการควบคุม SQL ให้กับนักพัฒนาดังนั้นมันจึงใช้ความสูงของผู้บังคับบัญชาทางศีลธรรม - สิ่งที่คุณเขียนนั้นไม่เข้ากันนั่นคือระดับของคุณเอง! แต่นี่เป็นท่าทางที่เหมาะสมสำหรับกรอบที่ดีจริงๆหรือ? เหตุใดจึงไม่สามารถใช้งานร่วมกันได้บ้าง? ตัวอย่างเช่นหากฟังก์ชั่นการถอดรหัสซึ่งถือเป็นพระเจ้าใน Oracle จะสามารถให้แท็ก <decode> ใน SQLMapper และแก้ไขอย่างเงียบ ๆ ในกรณีเมื่อภายหลัง? กล่าวอีกนัยหนึ่งไม่สำคัญว่าเจ้าหน้าที่ไม่ได้ให้บริการหรือไม่ แต่คุณต้องให้วิธีการขยายตัวดังนั้นฉันจึงกลับมาที่: ความสามารถในการปรับขนาดแย่มากความสามารถในการปรับขนาดนั้นแย่มากและความยืดหยุ่นนั้นแย่มาก ฉันพูดสิ่งสำคัญสามครั้ง แต่ฉันได้พูดพวกเขาหกครั้ง
ข้างต้นคือข้อบกพร่องของ mybatis ที่แนะนำโดยบรรณาธิการ ฉันหวังว่ามันจะเป็นประโยชน์กับคุณ!