Pengetahuan terkait kueri hibernasi Waktu: 04-10-2009 07:14:25 Sumber: Internet Penulis: Tidak Diketahui Klik: 146 kali Pertama-tama perkenalkan perbedaan antara metode get() dan load():
Perbedaan antara metode get() dan metode load() terutama terletak pada penggunaan cache tingkat kedua.
Metode load() akan menggunakan cache tingkat kedua, dan metode get() akan langsung menanyakan database jika tidak ditemukan di cache tingkat pertama, dan tidak akan mencari di cache tingkat kedua.
get(): Jika Anda pertama kali memperkenalkan perbedaan antara metode get() dan load() dalam database:
Perbedaan antara metode get() dan metode load() terutama terletak pada penggunaan cache tingkat kedua.
Metode load() akan menggunakan cache tingkat kedua, dan metode get() akan langsung menanyakan database jika tidak ditemukan di cache tingkat pertama, dan tidak akan mencari di cache tingkat kedua.
get(): Jika tidak ada catatan dalam database, ia akan mengembalikan null. get() akan tetap mengembalikan data.
load(): Jika tidak ada catatan dalam database, pengecualian akan dilempar. Jika ada data, objek proxy akan dikembalikan.
Perbedaan antara metode daftar dan iterator(): (N+1?)
Saat metode list() dijalankan, metode ini langsung menjalankan pernyataan kueri yang diperlukan untuk hasil kueri.
Metode iterator() pertama-tama mengeksekusi kueri untuk mendapatkan ID objek, lalu memperoleh objek yang akan dikueri berdasarkan setiap nilai ID.
Oleh karena itu: Untuk kueri yang menggunakan metode list(), biasanya hanya satu pernyataan SQL yang dijalankan, sedangkan untuk kueri yang menggunakan metode iterator(), N+1 pernyataan SQL mungkin perlu dijalankan (N adalah jumlah rekaman dalam kumpulan hasil ).
Kumpulan hasil diproses secara berbeda:
Metode list() akan mengaktifkan semua objek kumpulan hasil sekaligus, dan akan menginisialisasi semua objek kumpulan hasil berdasarkan hasil kueri. Jika hasil yang ditetapkan sangat besar, maka akan memakan banyak memori dan bahkan menyebabkan memori meluap.
Metode iterator() tidak menginisialisasi semua objek sekaligus selama eksekusi, namun menginisialisasi objek berdasarkan akses ke kumpulan hasil. Anda dapat mengontrol jumlah objek dalam cache selama satu akses untuk menghindari penggunaan cache terlalu banyak dan menyebabkan memori meluap.
HQL: HQL adalah bahasa kueri berorientasi objek. Objek operasi HQL adalah kelas, instance, atribut, dll.
SQL: Objek operasi sql adalah objek data seperti tabel dan kolom data.
Hql adalah bahasa kueri yang sepenuhnya berorientasi objek, sehingga dapat mendukung fitur seperti pewarisan dan banyak item.
Kueri HQL bergantung pada kelas Query, dan setiap instance Query berhubungan dengan objek kueri.
Fungsi pengaturan parameter, antarmuka Query adalah antarmuka kueri HQL yang sebenarnya.
//Buat objek Kueri
Kueri kueri = session.createQuery ("dari Pelanggan sebagai c di mana c.name=:customerName dan c.age=:customerAge");
//Parameter pengikatan dinamis
query.setString("Nama Pelanggan","Tom");
query.setInteger("Umur Pelanggan",21);
//Jalankan pernyataan kueri dan kembalikan hasilnya
Hasil daftar = query.list();
Langkah-langkah kueri HQL:
1: Dapatkan objek Sesi Hibernasi.
2: Tulis pernyataan HQL.
3: Gunakan pernyataan HQL sebagai parameter untuk memanggil metode createQuery Sesi untuk membuat objek kueri.
4: Jika pernyataan HQL berisi parameter, panggil metode Query setXXX() untuk menetapkan nilai ke parameter.
5: Panggil daftar dan metode lain dari objek Kueri untuk menelusuri hasil kueri.
Kueri juga berisi dua metode:
setFirstResult(int firstResult): Mengatur rekaman dari mana kumpulan hasil yang dikembalikan dimulai.
setMaxResults(int maxResults): Tetapkan jumlah hasil yang dikembalikan oleh kueri ini.
Penghapusan dan pembaruan entitas.
Kueri proyeksi: hanya menanyakan sebagian atribut.
Meminta atribut akan mengembalikan string
Mengkueri dua bidang akan mengembalikan array
Kueri yang dibangun secara dinamis: terutama digunakan untuk lusinan kueri tabel;
Untuk membuat objek baru, tambahkan konstruktor;
Saat membuat objek baru, tambahkan nama paket
Jangan gunakan hitungan(*), gunakan hitungan(objek persisten)
Pengelompokan dan penyortiran:
Urutan berdasarkan klausa dapat diurutkan berdasarkan kata kunci asc atau desc
Misalnya: formulir Pengguna u Pesan berdasarkan u.name asc,u.age desc;
Kelompokkan berdasarkan klausa dan kueri statistik:
Misalnya: String hql = "pilih count(u),u.age dari grup Pengguna u berdasarkan u.age yang memiliki count(u)>10";
Daftar daftar = session.createQuery(hql).list();
Fungsi agregat SQL standar dapat digunakan dalam pernyataan HQL, seperti: count(), sum(), max(), min(), age(), dll.
Permintaan koneksi:
Gabungan dalam: gabungan dalam
Gabungan luar kiri: gabungan luar kiri
Gabungan luar kanan: Gabungan luar kanan
Gabung penuh: gabung penuh (tidak umum digunakan)
Gabungan luar yang mendesak: ambilan gabung luar kiri, gabung kiri
ambil: digunakan untuk mendapatkan data koneksi dalam satu waktu, terutama data pengumpulan. Kurangi jumlah interaksi dengan database.
left out join: Gunakan gabungan luar untuk melakukan gabungan luar. Semua catatan di tabel kiri dan informasi catatan terkait dari kelas pesanan akan ditampilkan.
right out join: Kebalikan dari left out join, right out join mengembalikan semua catatan di tabel kanan HQL dan informasi catatan objek Pelanggan yang sesuai.
Empat cara untuk mendapatkan pengumpulan data:
1:Hibernate.initialize(user.getOrder());
2:pengguna.getOrder().size();
3: Koneksi mendesak kiri dan kanan
4: Filter lanjutan
Kueri Kriteria: Gunakan objek untuk melakukan kueri objek.
Antarmuka utamanya adalah: kelas Kriteria, Kriteria, ekspresi_r, dan Pembatasan. Kemampuan untuk mendukung pembuatan pernyataan SQL dinamis saat runtime.
Langkah-langkah kueri bersyarat:
1: Buat objek Kriteria melalui metode CreateCriteria() seesion
2: Tetapkan objek kueri, nama mengacu pada atribut objek
3: Tambahkan kondisi kueri ke objek Kriteria
4: Jalankan kueri list() untuk mengembalikan hasilnya.
Kueri bersyarat diselesaikan melalui tiga kelas:
Kriteria: mewakili kueri.
Kriteria: mewakili kondisi kueri.
Batasan: Kelas alat untuk menghasilkan kondisi kueri.
Artikel ini berasal dari blog CSDN. Harap sebutkan sumbernya saat mencetak ulang: http://blog.csdn.net/jzaccp_xiaoxiong/archive/2009/12/31/5111135.aspx