งานวิจัยหลักในบทความนี้คือ
แนวคิดเรื่องขี้เกียจ : โหลดวัตถุเฉพาะเมื่อใช้งานจริง
กลยุทธ์ขี้เกียจของไฮเบอร์เนตสามารถใช้ใน:
1. บนแท็ก <class> สามารถใช้ค่าได้: จริง/เท็จ
2. บนแท็ก <property> สามารถใช้ค่าได้: จริง/เท็จและเครื่องมือเพิ่มประสิทธิภาพของคลาสจะต้องปรับเปลี่ยนไบต์ (สิ่งนี้ไม่สมเหตุสมผล)
3. บนแท็ก <set> และ <list> <list> ค่าสามารถใช้: true/talse/extra
4. บนแท็กการเชื่อมโยงปลายเดี่ยวของ <หลายต่อหนึ่ง> และ <หนึ่งต่อหนึ่ง> คุณสามารถรับค่า: เท็จ/พร็อกซี/nophy
มาดูความขี้เกียจบนแท็กคลาส:
user.java:
ผู้ใช้คลาสสาธารณะ {/ * id */ID INT ส่วนตัว;/ * ชื่อผู้ใช้ */ชื่อสตริงส่วนตัว;/ * รหัสผ่านผู้ใช้ */รหัสผ่านสตริงส่วนตัว;/ * เวลาการสร้าง */วันที่ส่วนตัว createTime; // omit setter และวิธีการ getter}user.hbm.xml:
<? xml เวอร์ชัน = "1.0"?> <! Doctype hibernate-mapping สาธารณะ "-// hibernate/hibernate mapping dtd 3.0 // en" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" package = "com.lixue.bean"> <!-ชื่อของโหนดคลาสแสดงชื่อคลาสของเอนทิตีและตารางแสดงชื่อของเอนทิตีที่แมปไปยังตารางในฐานข้อมูล-> <class name = "user" table = "t_user" lazy = "true true"> <id name = "id" name = "password" /> <property name = "createTime" /> < /class> < /hibernate-mapping>
วิธีทดสอบ:
โมฆะสาธารณะ testload1 () {/*รับผู้ใช้โหลดตัวเองรองรับการโหลดขี้เกียจ (แท็กคลาสขี้เกียจใช้ได้สำหรับคุณสมบัติทั่วไป)*/ผู้ใช้ผู้ใช้ = (ผู้ใช้) hibernateutils.getSession () โหลด (user.class, 1); user.getId ());/* จะออก SQL เนื่องจากแอตทริบิวต์ที่จำเป็นจริงๆในเวลานี้คำสั่ง SQL จะออกและคำสั่งที่ออกจะค้นหาคุณลักษณะทั้งหมดและแอตทริบิวต์ที่ตามมาจะไม่ออกคำสั่ง*/system.out.println ("user.name =" + ผู้ใช้ ชื่อ)*/system.out.println ("user.password =" + user.getPassword ());/*จะไม่ออก SQL (พบเมื่อตรวจสอบชื่อ)*/system.out.println ("user.createTime =" + user.getCreateTime (); ลองจุดพักที่ User user = (User) HibernateUtils.getSession().load(User.class, 1); สำหรับการทดสอบ!
วัตถุจะปรากฏในผู้ใช้วัตถุ-> ตัวจัดการ ---> โหนดเป้าหมายดังแสดงในรูป:
1. ที่จุดเริ่มต้นเป้าหมายเป็นโมฆะ เมื่อ user.getId() ถูกดำเนินการมันยังคงเป็นโมฆะเนื่องจาก ID ถูกระบุไว้แล้วเมื่อเราสอบถามดังนั้นจึงไม่มีความหมายที่จะสอบถามในเวลานี้
2. เมื่อดำเนินการ user.getName() คำสั่งจะออกดังแสดงในรูป:
จากรูปเราจะเห็นว่าเมื่อสอบถามรหัสไม่มีคำสั่ง ดังที่เราเพิ่งพูดถึงเมื่อเราสอบถามแอตทริบิวต์ชื่อเราออกคำสั่งและฟังก์ชั่นของคำสั่งนี้คือการสอบถามแอตทริบิวต์ทั้งหมด
3. เมื่อ user.getPassword() และ user.getCreateTime() ถูกดำเนินการคำสั่งจะไม่ถูกออกอีกต่อไปเนื่องจากค่าแอตทริบิวต์ได้รับการสอบถามมาก่อน
หมายเหตุ: ขี้เกียจบนแท็ก <class> รองรับแอตทริบิวต์ปกติเท่านั้นและจะไม่ส่งผลกระทบต่อการโหลดคอลเลกชันในชั้นเรียน
ข้างต้นเป็นเรื่องเกี่ยวกับขี้เกียจบนแท็ก <class> ของการโหลดที่ขี้เกียจของไฮเบอร์เนตฉันหวังว่ามันจะเป็นประโยชน์กับทุกคน เพื่อนที่สนใจสามารถอ้างถึงหัวข้ออื่น ๆ ที่เกี่ยวข้องในเว็บไซต์นี้ต่อไป หากมีข้อบกพร่องใด ๆ โปรดฝากข้อความไว้เพื่อชี้ให้เห็น ขอบคุณเพื่อนที่ให้การสนับสนุนเว็บไซต์นี้!