คำนำ
ในการพัฒนา Javaweb สิ่งที่คลาสสิกที่สุดคือการรวมกันของ SSH Framework และการรวมกันของ SSM Framework ตอนนี้ บริษัท ไอทีหลายแห่งยินดีที่จะใช้ SSM สำหรับ H และ M ที่นี่ไฮเบอร์เนตและ mybatis ให้ฉันพูดสั้น ๆ เกี่ยวกับเรื่องนี้ในวันนี้
เล่นขวานที่ประตู
ในระหว่างชั้นเรียนฉันมักจะบอกนักเรียนว่าคุณต้องเข้าใจเทคนิคใด ๆ :
คำอธิบายความรู้
Hibernate และ MyBatis เป็นทั้ง ORM ที่ได้รับความนิยมอย่างมาก ในสาระสำคัญมันยังคงถูกห่อหุ้ม JDBC เพื่ออำนวยความสะดวกในการใช้งานของเราและทำให้การพัฒนาของเราง่ายขึ้น มาหาปัญหาเล็กน้อยก่อน:
เหตุใดการแนะนำเลเยอร์การคงอยู่จะแก้ปัญหานี้ได้? การวิเคราะห์: กลไกสามารถนำมาใช้ในเลเยอร์การคงอยู่ซึ่งสามารถใช้เป็นคำแปลได้ สำหรับฐานข้อมูลที่แตกต่างกันที่ด้านล่างคำสั่ง HQL และคำสั่งแบบสอบถามแบบไดนามิกจะถูกแปลเป็นคำสั่ง SQL ที่แตกต่างกัน สิ่งนี้แก้ปัญหาที่ไม่จำเป็นต้องเปลี่ยนคำสั่ง SQL หลังจากเปลี่ยนฐานข้อมูลและจำนวนรหัสจะลดลงอย่างมาก
มันดีมากดังนั้น Hibernate และ Mybatis ใช้วิธีการแก้ปัญหาข้างต้นนั่นคือ ORM ของพวกเขาถูกนำไปใช้อย่างไร
โภชนาการ
ในไฮเบอร์เนตกลไกนี้เป็นไฟล์กำหนดค่า hibernate.cfg.xml (วางไว้ในไดเรกทอรี SRC)
<hibernate-configuration> <session-factory> <property name = "connection.url"> jdbc: mysql: // localhost/hibernate </property> <property name = "connection.username"> root </property> <property name = "Passion.password"> <property name = "Dialect"> org.hibernate.dialect.mysqldialect </property> <!-ddl คำสั่งสร้างตารางโดยอัตโนมัติ-> <property name = "HBM2ddl.auto"> None </คุณสมบัติ> <property name = "show_sql"> True </ name = "hibernate.connection.provider_class"> org.hibernate.service.jdbc.connections.internal.c3p0connectionprovider </คุณสมบัติ> <!- จำนวนการเชื่อมต่อ JDBC ขั้นต่ำในกลุ่มการเชื่อมต่อ ค่าเริ่มต้นของไฮเบอร์เนตถึง 1-> <property name = "hibernate.c3p0.min_size"> 5 </porement> <!-จำนวนสูงสุดของการเชื่อมต่อ JDBC ในพูลเชื่อมต่อ ค่าเริ่มต้นของไฮเบอร์เนตถึง 100-> <property name = "hibernate.c3p0.max_size"> 20 </porement> <!-เมื่อใดที่จะลบการเชื่อมต่อที่ไม่ได้ใช้งานในวินาทีจากพูลเชื่อมต่อ ค่าเริ่มต้นคือ 0, ไม่เคยหมดอายุ-> <property name = "hibernate.c3p0.timeout"> 300 </porement> <!-จำนวนคำสั่ง cached precompiled ใช้เพื่อปรับปรุงประสิทธิภาพ ค่าเริ่มต้นของไฮเบอร์เนตถึง 0 แคชไม่สามารถใช้ได้-> <property name = "hibernate.c3p0.max_statements"> 100 </porement> <!-เวลาว่าง (ในวินาที) ก่อนที่การเชื่อมต่อจะได้รับการตรวจสอบโดยอัตโนมัติ ค่าเริ่มต้นของไฮเบอร์เนตถึง 0-> <property name = "hibernate.c3p0.idle_test_period"> 3000 </porement> <!-ทำงานอย่างอิสระ หากคุณได้รับเซสชันผ่าน getCurrentSession () คุณจะต้องตั้งค่าดังนี้-> <property name = "current_session_context_class"> เธรด </คุณสมบัติ> <!-สองวิธีในการทำแผนที่คลาสถาวร-> <การแมป/> <mapping resource = "com/serup/model/model.hbm.xml"/>
เมื่อโครงการเปลี่ยนฐานข้อมูลสิ่งที่ต้องแก้ไขคือคุณลักษณะหลายอย่างในไฟล์นี้และรหัสลอจิกของเลเยอร์ธุรกิจไม่จำเป็นต้องแก้ไข
แนะนำให้ใช้ไฮเบอร์เนตเพื่อการพัฒนา:
** วัตถุโดเมน ---> การแมป ---> ฐานข้อมูลในคำอื่น ๆ วัตถุและตารางต้องมีการแมปและการแมปนี้มีวิธีการกำหนดค่าสองวิธีในไฮเบอร์เนต **
1. วิธี XML (class name.hbm.xml)
สร้างความสัมพันธ์การแมประหว่างตารางและคลาสผ่านไฟล์ HBM
2. วิธีการเพิ่มความคิดเห็น
ต่อมาด้วยวิศวกรรมย้อนกลับมันก็ง่ายขึ้นมากและคุณสามารถสร้างไฟล์ที่เกี่ยวข้องโดยตรงผ่านตารางฐานข้อมูล
mybatis
ใน mybatis กลไกนี้ยังต้องอาศัยไฟล์กำหนดค่า mybatis-config.xml (วางไว้ในไดเรกทอรี SRC)
<การกำหนดค่า> <properties resource = "sqlserverinfo.properties"/> <!-ไฟล์การกำหนดค่าของฐานข้อมูล-> <peryealiases> <package name = "com.demo.domain"/> <! type = "jdbc"/> <dataSource type = "pooled"> <property name = "driver" value = "$ {driver}"/> <property name = "url" value = "$ {url}"/> <property name = "username" value = "$ {username}" </environments> <mappers> <!-การแมปไฟล์เพื่อดำเนินการ CRUD เฉพาะให้เสร็จสิ้น-> <mapper resource = "com/demo/domain/usermapper.xml"/> </mappers> </configuration> ด้วยวิธีนี้ทุกครั้งที่คุณเปลี่ยนฐานข้อมูลคุณจะต้องแก้ไขไฟล์การกำหนดค่าเท่านั้น
การใช้ mybatis เพื่อการพัฒนาแนะนำสิ่งนี้:
** สร้างฐานข้อมูลและสร้างตารางต่าง ๆ ---> Reverse Engineering สร้างรหัสที่จำเป็นสำหรับการดำเนินการ mybatis (mapper.java, mapper.xml, po .. ) ---> เขียนเลเยอร์ควบคุมและชั้นบริการตามตรรกะทางธุรกิจ -
ความแตกต่าง
มีการเปรียบเทียบหลายอย่างบนอินเทอร์เน็ตและฉันพูดถึงจุดต่าง ๆ ที่ฉันคิด
1. ไฮเบอร์เนตมีภาษาสืบค้นเชิงวัตถุที่เรียกว่า HQL นี่คือพลังมาก ช่วยให้ลิงที่ไม่ทราบว่าคำสั่ง SQL จะเพิ่มลบแก้ไขและค้นหาฐานข้อมูล แต่นี่ก็เป็นจุดอ่อนเช่นกัน คำสั่ง SQL ไม่สามารถปรับให้เหมาะสมได้
2. MyBatis ต้องการการกำหนดค่าคำสั่ง SQL ซึ่งหมายความว่ามันยังต้องการความรู้พื้นฐานของฐานข้อมูลเพื่อเริ่มต้น ยิ่งกว่านั้นผู้เริ่มต้นจะต้องพบกับข้อผิดพลาดมากมายในการทำแผนที่ผลลัพธ์
3. ฉันไม่เคยทำโครงการขนาดใหญ่เป็นพิเศษ หากไม่มีข้อกำหนดด้านประสิทธิภาพพิเศษ Hibernate ก็ยังง่ายต่อการใช้งานฟังก์ชั่น
การปรับแต่งระบบ
โซลูชันการปรับแต่งของ Hibernate
วิธีแก้ปัญหาการปรับแต่ง mybatis
สรุป
ข้างต้นเป็นเนื้อหาทั้งหมดของบทความนี้ ฉันหวังว่าเนื้อหาของบทความนี้จะมีค่าอ้างอิงบางอย่างสำหรับการศึกษาหรือที่ทำงานของทุกคน หากคุณมีคำถามใด ๆ คุณสามารถฝากข้อความไว้เพื่อสื่อสาร ขอบคุณสำหรับการสนับสนุน Wulin.com