Penelitian utama dalam artikel ini adalah
Konsep Lazy : Hanya memuat objek saat benar -benar digunakan.
Strategi malas Hibernate dapat digunakan dalam:
1. Pada tag <slass>, nilainya dapat diambil: Benar/Salah.
2. Pada tag <property>, nilainya dapat diambil: Benar/Salah, dan alat Peningkatan Kelas diperlukan untuk memodifikasi bytecode (ini tidak masuk akal).
3. Pada tag <ist> dan <list>, nilainya dapat diambil: Benar/Salah/Ekstra.
4. Pada tag asosiasi tunggal <-many-to-one> dan <-one-to-one>, Anda bisa mendapatkan nilainya: false/proxy/nophy
Mari kita lihat malas pada tag kelas:
User.java:
Pengguna kelas publik {/ * id */private int id;/ * nama pengguna */nama string privat;/ * kata sandi pengguna */kata sandi string pribadi;/ * waktu pembuatan */tanggal private createTime; // hilangkan setter dan metode pengambil}}User.hbm.xml:
<? XML Versi = "1.0"?> <! Doctype Hibernate-Mapping Public "-// Hibernate/Hibernate Mapping DTD 3.0 // EN" "http://hibernate.sourceForge.net/hibernate-papping-3.0.dtd"> <!-Paket nama paket dari paket dari paket dari paket classion- 3.0.dtd "> <! package = "com.lixue.bean"> <!-Nama node kelas mewakili nama kelas entitas, dan tabel mewakili nama entitas yang dipetakan ke tabel dalam database-> <class name = "user" tabel = "t_user" lazy = "true"> <id name = "id"> <generator " /ID < /id name = mapies norm name ="> <Generator "< /Id" < /id name = Maping normal "> <id name =" id "> <generator /ID /ID < /id name = Maping norm normal =" ID "> <Generator /ID /ID < /ID" Properti norm norm NORMAL = "> <Generator / /ID < /ID /ID =" MAPPING "NOXION-MAPING ="> <GENERATOR /ID < /ID /ID < /ID /ID < /ID! name = "password" /> <properti name = "createTime" /> < /class> </hibernate-mapping>
Metode Uji:
public void testLoad1(){/*get User, load itself supports lazy loading (the class tag lazy is valid for ordinary properties)*/User user = (User) HibernateUtils.getSession().load(User.class, 1);/* won't issue sql (because the ID is specified when you query, there is no need to check it again)*/System.out.println("user.id=" + user.getId ());/* akan mengeluarkan SQL, karena atributnya benar -benar diperlukan pada saat ini, pernyataan SQL akan dikeluarkan, dan pernyataan yang dikeluarkan akan menemukan semua atribut, dan atribut berikutnya tidak akan mengeluarkan pernyataan*/System.out.println ("user.name =" + user.getName ());//* edisi ("user.name =" + user.getName ());//* edisi nama)*/System.out.println ("user.password =" + user.getPassword ());/*tidak akan mengeluarkan sql (itu ditemukan saat memeriksa nama)*/system.out.println ("user.createTime =" + user.getCreateTime ());} Coba breakpoint di User user = (User) HibernateUtils.getSession().load(User.class, 1); untuk pengujian!
Objek akan muncul di pengguna objek-> Handler ---> Target Node, seperti yang ditunjukkan pada gambar:
1. Pada awalnya, targetnya adalah nol. Ketika user.getId() dieksekusi, itu masih nol, karena ID sudah ditentukan saat kita bertanya, jadi tidak ada artinya untuk meminta saat ini.
2. Saat mengeksekusi user.getName() , pernyataan dikeluarkan, seperti yang ditunjukkan pada gambar:
Dari gambar tersebut, kita dapat melihat bahwa ketika menanyakan ID, tidak ada pernyataan yang dikeluarkan. Seperti yang baru saja kami sebutkan, ketika kami menanyakan atribut nama, kami mengeluarkan pernyataan, dan fungsi pernyataan ini adalah untuk menanyakan semua atribut.
3. Ketika user.getPassword() dan user.getCreateTime() dijalankan, pernyataan tidak akan lagi dikeluarkan karena nilai atribut telah diminta sebelumnya.
Catatan: Malas pada tag <slass> hanya mendukung atribut normal dan tidak akan mempengaruhi pemuatan koleksi di kelas.
Di atas adalah semua tentang malas pada tag <sclass> Hibernate Lazy Loading, saya harap ini akan membantu semua orang. Teman yang tertarik dapat terus merujuk ke topik terkait lainnya di situs ini. Jika ada kekurangan, silakan tinggalkan pesan untuk menunjukkannya. Terima kasih teman atas dukungan Anda untuk situs ini!