ความแตกต่างระหว่าง mybatis และ ibatis:
1. MyBatis ใช้การเชื่อมต่ออินเทอร์เฟซทำให้สะดวกยิ่งขึ้นในการใช้ <br /> ใน ibatis2.x เราจำเป็นต้องระบุไฟล์การแมป XML ที่สอดคล้องกับในคลาสการใช้งาน DAO
MyBatis ใช้การเชื่อมโยงของอินเทอร์เฟซ DAO และไฟล์การแมป XML และสร้างการใช้งานเฉพาะของอินเทอร์เฟซโดยอัตโนมัติสำหรับเราทำให้ใช้งานได้ง่ายขึ้นและสะดวกยิ่งขึ้น
สิ่งนี้สามารถกล่าวได้ว่าเป็นการปรับปรุงที่สำคัญที่สุดของ mybatis
สังเกต:
แม้ว่า MyBatis รองรับการใช้การกำหนดค่าคำอธิบายประกอบโดยตรงในอินเทอร์เฟซเพื่อทำให้การกำหนดค่าง่ายขึ้น
อย่างไรก็ตามขอแนะนำอย่างยิ่งให้ใช้วิธีการกำหนดค่า XML ท้ายที่สุดวิธีการกำหนดค่าของคำอธิบายประกอบนั้นมี จำกัด และรหัสนั้นมีการรุกรานเกินไป โดยใช้วิธีการกำหนดค่า XML เท่านั้นที่จะได้รับข้อดีของ mybatis
2. การปรับปรุงการทำแผนที่ความสัมพันธ์ของวัตถุนั้นมีประสิทธิภาพมากขึ้น <br /> ฉันเชื่อว่าเพื่อนหลายคนที่ใช้ ibatis2.x ไม่ตระหนักถึงการแมปความสัมพันธ์ระหว่างวัตถุผ่านไฟล์การแมป XML ของ Ibatis ในความเป็นจริงไม่จำเป็นต้องทำเช่นนั้นเพราะ Ibatis2.x ใช้ "การสืบค้นคอ" เพื่อตระหนักถึงความสัมพันธ์ระหว่างวัตถุผ่านการชุมนุมโดยตรงของคำสั่งแบบสอบถามและผลกระทบของมันเหมือนกับการห่อหุ้มใน DAO หรือบริการ
อย่างไรก็ตามวิธีนี้มี "ปัญหาการสืบค้น N+1"
โดยสรุปปัญหาการสืบค้น N+1 อาจเกิดขึ้นได้เช่นนี้:
- คุณเรียกใช้คำสั่ง SQL แยกต่างหากเพื่อรับรายการผลลัพธ์ (นั่นคือ +1)
- สำหรับแต่ละระเบียนที่ส่งคืนคุณเรียกใช้คำสั่งค้นหาเพื่อโหลดรายละเอียดสำหรับการโหลดแต่ละครั้ง (นั่นคือ n)
ปัญหานี้อาจทำให้คำสั่ง SQL หลายร้อยคำสั่งดำเนินการ โดยปกติจะไม่คาดหวัง
ใน mybatis นอกเหนือจากการเข้ากันได้กับวิธี "คิวรีคอ" ใน iBatis2.x แล้วมันยังให้วิธีการ "ผลลัพธ์คอ" โดยตรงซึ่งเทียบเท่ากับการห่อหุ้มวัตถุ DTO แบบสอบถามโดยอัตโนมัติลงในวัตถุที่ต้องการผ่านประโยคของ SQL
สำหรับวิธีการใช้งานเฉพาะโปรดดูคู่มือผู้ใช้อย่างเป็นทางการของ MyBatis ด้วยตัวเองและไม่ได้อธิบายที่นี่
อย่างไรก็ตามในความเป็นจริงประโยชน์ที่เกิดจากการปรับปรุงนี้มี จำกัด มาก เพราะวิธีนี้ไม่ทำงานเมื่อใช้การเพจหรือชุดผลลัพธ์ของวัตถุซ้อนกันไม่ได้รับอนุญาตให้เพจ สิ่งนี้ได้รับการ จำกัด อย่างชัดเจนใน MyBatis Framework (34 บรรทัดใน org.apache.ibatis.executor.resultset.nestedresultsethandler) และมีหลายกรณีที่จำเป็นต้องมีการเพจในโครงการจริง ...
หากคุณคิดอย่างรอบคอบการแมปแบบหนึ่งต่อหลายคนไม่สามารถเพจผ่านไฟล์การกำหนดค่าได้เนื่องจากจำนวนบันทึกที่สอบถามในเวลานี้ไม่เท่ากับขนาดของวัตถุส่งคืนจริง แต่ฉันไม่เข้าใจว่าทำไมไม่อนุญาตให้ทำการแมปแบบหนึ่งต่อหนึ่ง อาจเป็นเพราะแบบตัวต่อตัวเป็นกรณีพิเศษแบบหนึ่งต่อหลายคนและเมื่อออกแบบกรอบงานมันไม่ได้พิจารณาหรือยากที่จะจัดการกับกรณีพิเศษนี้
3. MyBatis ใช้การแสดงออกที่ใช้ OGNL ที่ทรงพลังเพื่อกำจัดองค์ประกอบอื่น ๆ <br /> ผู้ที่คุ้นเคยกับ struts2 ไม่ควรไม่คุ้นเคยกับการแสดงออกของ OGNL
MyBatis ใช้นิพจน์ OGNL เพื่อทำให้ความซับซ้อนของไฟล์การกำหนดค่าง่ายขึ้นและใช้งานง่ายกว่า
อาจจะกังวลมากขึ้น
MyBatis ใช้การเชื่อมต่อส่วนต่อประสานทำให้สะดวกในการใช้งานมากขึ้น
Ibatis/MyBatis 3 มีคุณสมบัติใหม่: คำอธิบายประกอบ