ฉันไม่เคยใช้ mybatis มาก่อนฉันรู้แค่ว่ามันเป็นกรอบฐานข้อมูล ORM เช่นไฮเบอร์เนต เนื่องจากความสามารถของการใช้การเพิ่มขึ้นฉันพบว่ามันแตกต่างจากไฮเบอร์เนตมาก เพื่อนที่สนใจสามารถเรียนรู้ผ่านบทความนี้
การใช้ประโยชน์จากสุดสัปดาห์นี้ฉันใช้เวลาในการจัดเรียงเทคโนโลยีที่ใช้กันทั่วไปและตัวแก้ไขจะอัปเดตเนื้อหาเป็นครั้งคราว
ก่อนอื่นมาแนะนำแนวคิดของทั้งสอง:
Hibernate: Hibernate เป็นกรอบ ORM ที่ได้รับความนิยมมากที่สุดในปัจจุบันและให้การห่อหุ้มโครงสร้างฐานข้อมูลที่ค่อนข้างสมบูรณ์
MyBatis: MyBatis ยังเป็นกรอบ ORM ที่ได้รับความนิยมอย่างมากโดยมุ่งเน้นที่ความสัมพันธ์การทำแผนที่ระหว่าง POJO และ SQL
ประการที่สองมาพูดถึงความแตกต่างระหว่างทั้งสองในหลาย ๆ ด้าน:
1. ความแตกต่างที่ใหญ่ที่สุดระหว่างสอง:
สำหรับตรรกะอย่างง่ายไฮเบอร์เนตและ mybatis มีเครื่องมือสร้างรหัสที่สอดคล้องกันซึ่งสามารถสร้างวิธีการเลเยอร์ DAO แบบง่ายและพื้นฐาน
สำหรับการสืบค้นขั้นสูง MyBatis ต้องใช้การเขียนด้วยตนเองของคำสั่ง SQL และ MAP ผลลัพธ์ Hibernate มีกลไกการทำแผนที่ที่ดีดังนั้นนักพัฒนาไม่จำเป็นต้องใส่ใจเกี่ยวกับการสร้าง SQL และการทำแผนที่ผลลัพธ์และสามารถมุ่งเน้นไปที่กระบวนการทางธุรกิจมากขึ้น
2. การเปรียบเทียบความยากลำบากในการพัฒนา
การพัฒนาไฮเบอร์เนตนั้นยากกว่า mybatis ส่วนใหญ่เป็นเพราะไฮเบอร์เนตมีความซับซ้อนและมีขนาดใหญ่และมีวงจรการเรียนรู้ที่ยาวนาน
MyBatis ค่อนข้างง่ายและ MyBatis ส่วนใหญ่อาศัยการเขียน SQL ทำให้นักพัฒนารู้สึกคุ้นเคยมากขึ้น
3. การเปรียบเทียบการเขียน SQL
MyBatis 'SQL เขียนด้วยตนเองดังนั้นคุณสามารถระบุฟิลด์สำหรับการสืบค้นได้ตามต้องการ อย่างไรก็ตามไม่มีสถิติบันทึกของคุณเองดังนั้นคุณต้องใช้ log4j เพื่อบันทึกบันทึก
Hibernate ยังสามารถเขียน SQL เองเพื่อระบุเขตข้อมูลที่ต้องสอบถาม แต่สิ่งนี้จะทำลายความเรียบง่ายของการพัฒนาไฮเบอร์เนต อย่างไรก็ตามไฮเบอร์เนตมีสถิติบันทึกของตัวเอง
4. การเปรียบเทียบความสามารถในการปรับขนาดฐานข้อมูล
เนื่องจาก SQL ทั้งหมดถูกเขียนบนฐานข้อมูล mybatis จึงมีความยืดหยุ่นและการย้ายถิ่นที่ไม่ดี
ความสัมพันธ์เฉพาะระหว่างไฮเบอร์เนตและฐานข้อมูลอยู่ใน XML ดังนั้น HQL จึงไม่กังวลมากเกี่ยวกับฐานข้อมูลที่ใช้
5. การเปรียบเทียบกลไกการแคช
ความคล้ายคลึงกัน: นอกเหนือจากการใช้กลไกการแคชเริ่มต้นของระบบแคชระดับที่สองของไฮเบอร์เนตและ mybatis สามารถเขียนทับพฤติกรรมแคชได้อย่างสมบูรณ์โดยการใช้แคชของคุณเองหรือสร้างอะแดปเตอร์สำหรับโซลูชั่นแคชบุคคลที่สามอื่น ๆ
ความแตกต่าง: การกำหนดค่าแคชทุติยภูมิของไฮเบอร์เนตได้รับการกำหนดค่าในรายละเอียดในไฟล์การกำหนดค่าที่สร้างขึ้นโดย SessionFactory จากนั้นจะถูกกำหนดค่าในแผนที่ตารางวัตถุเฉพาะที่กำหนดค่าแคช
การกำหนดค่าแคชทุติยภูมิของ MyBatis ได้รับการกำหนดค่าในรายละเอียดในแต่ละแผนที่ตารางเฉพาะแต่ละแผนที่เพื่อให้กลไกแคชที่แตกต่างกันสามารถปรับแต่งสำหรับตารางที่แตกต่างกัน และ MyBatis สามารถแชร์การกำหนดค่าแคชและอินสแตนซ์เดียวกันในเนมสเปซซึ่งนำไปใช้ผ่าน Cache-Ref
การเปรียบเทียบทั้งสอง: เนื่องจากไฮเบอร์เนตมีกลไกการจัดการที่ดีสำหรับวัตถุแบบสอบถามผู้ใช้ไม่จำเป็นต้องใส่ใจเกี่ยวกับ SQL ดังนั้นหากข้อมูลสกปรกปรากฏขึ้นเมื่อใช้แคชทุติยภูมิระบบจะรายงานข้อผิดพลาดและพรอมต์
ในเรื่องนี้ MyBatis ต้องการการดูแลเป็นพิเศษเมื่อใช้แคช L2 หากขอบเขตของการดำเนินการอัปเดตข้อมูลไม่สามารถกำหนดได้อย่างเต็มที่ให้หลีกเลี่ยงการใช้แคชตาบอด มิฉะนั้นการปรากฏตัวของข้อมูลสกปรกจะนำอันตรายที่ซ่อนอยู่อย่างมากไปสู่การทำงานปกติของระบบ
6. สรุป:
MyBatis: เล็ก, สะดวก, มีประสิทธิภาพ, เรียบง่าย, โดยตรง, กึ่งอัตโนมัติ
Hibernate: ทรงพลังสะดวกมีประสิทธิภาพซับซ้อนอัตโนมัติเต็มรูปแบบ
Hibernate และ MyBatis สามารถสร้าง SessionFactory จากไฟล์การกำหนดค่า XML ผ่าน SessionFactoryBuider จากนั้นสร้างเซสชันจาก SessionFactory และในที่สุดก็ดำเนินการธุรกรรมและคำสั่ง SQL
ข้อได้เปรียบของ mybatis คือ mybatis สามารถดำเนินการเพิ่มประสิทธิภาพ SQL โดยละเอียดมากขึ้นลดเขตข้อมูลการสืบค้นและง่ายต่อการควบคุม
ข้อได้เปรียบของไฮเบอร์เนตคือการพัฒนาเลเยอร์ DAO นั้นง่ายกว่า mybatis ซึ่งต้องมีการบำรุงรักษา SQL และการทำแผนที่ผลลัพธ์ ความสามารถในการพกพาฐานข้อมูลนั้นดีมากการพกพาฐานข้อมูล MyBatis ไม่ดีและฐานข้อมูลที่แตกต่างกันจำเป็นต้องเขียน SQL ที่แตกต่างกัน มีกลไกการแคชรองที่ดีกว่าและสามารถใช้แคชบุคคลที่สามได้ MyBatis นั้นมีกลไกการแคชที่ไม่ดี
MyBatis:
1. เป็นเรื่องง่ายที่จะเริ่มต้นเรียนรู้และใช้งานและให้ฟังก์ชั่นการเชื่อมโยงวัตถุอัตโนมัติสำหรับการสืบค้นฐานข้อมูลและยังคงมีประสบการณ์ที่ดีในการใช้ SQL มันค่อนข้างสมบูรณ์แบบสำหรับโครงการที่ไม่มีข้อกำหนดของโมเดลวัตถุสูงเช่นนี้
2. การเพิ่มประสิทธิภาพ SQL โดยละเอียดเพิ่มเติมสามารถทำได้ซึ่งสามารถลดฟิลด์แบบสอบถามได้
3. ข้อเสียคือเฟรมเวิร์กยังคงค่อนข้างง่ายและฟังก์ชั่นยังคงหายไป แม้ว่ารหัสการเชื่อมโยงข้อมูลจะง่ายขึ้น แต่การสืบค้นฐานข้อมูลพื้นฐานทั้งหมดจะต้องเขียนด้วยตัวเอง แต่ภาระงานมีขนาดค่อนข้างใหญ่และไม่ใช่เรื่องง่ายที่จะปรับให้เข้ากับการปรับเปลี่ยนฐานข้อมูลอย่างรวดเร็ว
4. กลไกการแคชรองไม่ดี
ไฮเบอร์เนต:
1. ฟังก์ชั่นที่ทรงพลังไม่เกี่ยวข้องกับฐานข้อมูลที่ดีและความสามารถในการแมป O/R ที่แข็งแกร่ง หากคุณค่อนข้างมีความเชี่ยวชาญในการจำศีลและไฮเบอร์เนตที่ห่อหุ้มอย่างถูกต้องรหัสเลเยอร์การคงอยู่ทั้งหมดของโครงการของคุณจะค่อนข้างง่ายมีรหัสน้อยมากที่จะเขียนความเร็วในการพัฒนาเร็วมากและเจ๋งมาก
2. มีกลไกการแคชรองที่ดีกว่าและสามารถใช้แคชบุคคลที่สามได้
3. ข้อเสียคือเกณฑ์การเรียนรู้ไม่ต่ำและคุณต้องมีความเชี่ยวชาญในเรื่องนี้ วิธีการออกแบบการทำแผนที่ O/R วิธีการสร้างสมดุลระหว่างโมเดลประสิทธิภาพและวัตถุและวิธีการใช้ Hibernate Well ต้องการประสบการณ์และความสามารถของคุณที่จะแข็งแกร่ง
ให้ฉันขอคำอุปมาที่สดใส:
MyBatis: เครื่องมือเชิงกลใช้งานง่ายและสามารถใช้งานได้โดยเร็วที่สุด แต่งานยังต้องทำด้วยตัวเอง แต่เครื่องมือยังมีชีวิตอยู่ดังนั้นวิธีการทำให้พวกเขาขึ้นอยู่กับฉัน
Hibernate: หุ่นยนต์อัจฉริยะ แต่มีราคาแพงมากในการพัฒนา (การเรียนรู้ความสามารถ) และการทำงานสามารถกำจัดมันได้ แต่มีเพียงสิ่งที่ทำได้