Artikel ini adalah artikel cermin dari terjemahan mesin, silakan klik di sini untuk melompat ke artikel aslinya.

Melihat: 16672|Jawab: 0

[Sumber] Penggunaan terperinci createCriteria adalah kueri QBC di Hibernate

[Salin tautan]
Diposting pada 09/08/2017 14.26.13 | | |

Sekarang katakanlah ada kelas Siswa dengan atribut id, nama, usia
String hql = "dari Siswa s";
Seperti yang biasa kita lakukan, kita biasanya melakukannya
Kueri kueri = session.createQuery(hql);
Atau jika Anda ingin mencari sesuai dengan ketentuan.
String hql = "dari Siswa di mana s.name seperti 'King%'"
Kueri kueri = session.createQuery(hql);
Jika Anda menggunakan QBC alih-alih HQL, maka kodenya adalah:
Kriteria kriteria =session.createCriteria(Student.class);
Kriteria kriteria = Ekspresi.seperti("nama","raja%");
Saya tidak bisa melihatnya seperti ini. Kemudian kita tambahkan kondisi pencarian ke usia 22 tahun.
HQL:
String hql = "dari Siswa s di mana s.name seperti 'Wang%' dan s.age= 22 ";
Kueri kueri = session.createQuery(hql);
Daftar daftar = query.list();
QBC:
Kriteria kriteria =session.createCriteria(Student.class);
Kriteria kriteria1 = Ekspresi.seperti("nama","raja%");
Kriteria kriteria2 = Ekspresi.eq("age",newInteger(22));
kriteria.tambahkan(kriteria1).tambahkan(kriteria2);
Daftar daftar = criteria.list();


Kelihatannya jauh lebih rumit. Tetapi siapa pun yang telah melakukan proyek tahu bahwa ketika logika bisnis modul berubah, seringkali harus menulis ulang SQL, dan hal yang paling menjengkelkan dan menjengkelkan adalah mengambil HQL atau SQL orang lain.
Jika Anda menggunakan QBC, itu sangat meningkatkan keterbacaan dan pemeliharaan kode.
Penting untuk dicatat bahwa nilai null adalah nilai
Misalnya, ketika kita ingin menemukan objek Student dengan nama null, kita harus menulisnya seperti ini
Kriteria kriteria =session.createCriteria(Student.class);
Kriteria kriteria = Expression.isNull("nama");
criteria.add(kriteria).daftar();
dan menggunakan antara... dan waktu
Kriteria kriteria =session.createCriteria(Student.class);
Kriteria kriteria1 = Expression.ge("usia",bilangan bulat baru(20)); Batas bawah
Kriteria kriteria2 = Ekspresi.le("age",new Integer(25)); Langit-langit
//这里也可以把上述两个条件添加到第三个条件里
Kriteria kriterian3 =Ekspresi.dan(kriteria1,kriteria2);
kriteria.tambah(kriteria3).daftar();
Setara dengan dari Siswa di mana usia antara 20 dan 25 tahun
Setara dengan dari Siswa di mana s.age >= 20 dan s.age <=25


Berikut ini adalah perbandingan kondisi kueri HQL dan QBC yang umum digunakan
Ekspresi yang berarti HQL QBC
lebih besar dari atau sama dengan > = Expression.ge()
Lebih besar dari > Expression.gt()
Kurang dari atau sama dengan < = Expression.le()
Kurang dari < Expression.lt()
sama dengan = Ekspresi.eq()
tidak sama dengan <>atau!= Expression.ne()

Null adalah null Expression.isNull()
is notnull Expression.isNotNull()
Dalam rentang yang ditentukan antaradan Expression.between()
Tidak dalam rentang yang ditentukan, bukan antaradan Ekspresi.tidak(Ekspresi.antara())
Milik koleksi di Expression.in()
Bukan bagian dari koleksi notin Expression.not(Expression.in())
dan ekspresi.dan()
atau Ekspresi.atau()
Bukan Ekspresi.not()
Kueri kabur seperti Expression.like



1. Membuat instance Criteria net.sf.hibernate.Criteria Antarmuka ini mewakili kueri untuk kelas persistensi tertentu. Sesi adalah pabrik yang digunakan untuk memproduksi instance Criteria.



Kriteria kritis = sess.createCriteria(Cat.class);


crit.setMaxResults(50);


Daftar kucing = crit.list();


2. Mempersempit cakupan kumpulan hasil Kondisi kueri (Kriteria) adalah instans antarmuka net.sf.hibernate.expression.Criterion. Kelas net.sf.hibernate.expression.Expression didefinisikan untuk mendapatkan beberapa jenis Kriteria bawaan.


Daftar kucing = sess.createCriteria(Cat.class)


                .add( Expression.like("nama", "Fritz%") )


                .add( Expression.between("weight", minWeight, maxWeight))


                .daftar();
Ekspresi dapat dikelompokkan secara logis.

Daftar kucing = sess.createCriteria(Cat.class)



                .add( Expression.like("nama", "Fritz%") )


                .add( Expression.or( Expression.eq( "age", new Integer(0) ), Expression.isNull("age")))


                .daftar();


Daftar kucing = sess.createCriteria(Cat.class)


                .add( Expression.in( "name",new string[]{"Fritz","Izi","Pk"}))


                .add( Ekspresi.disjunction()


                .add( Expression.isNull("age") )


                .add( Expression.eq("age", Bilangan Bulat baru(0) ) )


                .add( Expression.eq("age", Bilangan Bulat baru(1) ) )


                .add( Expression.eq("age", Bilangan Bulat baru(2) ) ) ) )


                 .daftar();
Ada banyak jenis kondisi yang telah dibuat sebelumnya (subkelas Ekspresi). Ada yang sangat berguna yang memungkinkan Anda untuk menyematkan SQL secara langsung.

Daftar kucing = sess.createCriteria(Cat.class)



                .add( Expression.sql("lower($alias.name) seperti lower(?)", "Fritz%", Hibernate.STRING))


                .daftar();  
di mana {alias} adalah placeholder, itu akan diganti dengan alias baris entitas yang dikueri. (Asli: Tempat penampung {alias} dengan diganti dengan alias baris entitas yang dikueri.)


3. Mengurutkan hasilnya Anda dapat menggunakan net.sf.hibernate.expression.Order untuk mengurutkan kumpulan hasil.


Daftar kucing = sess.createCriteria(Cat.class)



                .add( Expression.like("nama", "F%")


                .addOrder( Order.asc("nama"))


                .addOrder( Order.desc("age"))


                .setHasilMaks(50)


                .daftar();


4. Asosiasi Anda dapat menggunakan createCriteria() antara asosiasi untuk menentukan batasan antara entitas dengan mudah dengan relasi.

Daftar kucing = sess.createCriteria(Cat.class)



                 .add( Expression.like("nama", "F%")


                 .createCriteria("anak kucing")


                 .add( Expression.like("nama","F%")


                 .daftar();


Perhatikan bahwa createCriteria() kedua mengembalikan instance baru Criteria, menunjuk ke elemen kelas koleksi anak kucing. Bentuk alternatif berikut berguna dalam situasi tertentu.


Daftar kucing = sess.createCriteria(Cat.class)


                .createAlias("anak kucing", "kt")


                .createAlias("mate", "mt")


                .add(Expression.eqProperty("kt.name", "mt.name"))


                .daftar();


(createAlias()) tidak membuat instans baru dari Kriteria. Perhatikan bahwa kelas koleksi anak kucing yang dipegang oleh instance Cat dalam dua kueri sebelumnya tidak difilter sebelumnya berdasarkan kriteria! Jika Anda hanya ingin mengembalikan anak kucing yang memenuhi kriteria, Anda harus menggunakan returnMaps().


Daftar kucing = sess.createCriteria(Cat.class)


.createCriteria("anak kucing", "kt")


.add( Expression.eq("nama", "F%") )


.returnMaps()


.daftar();


Iterator iter = cats.iterator();


while ( iter.hasNext())


{  


Peta peta = (Peta) iter.next();


Kucing kucing = (Kucing) map.get(Criteria.ROOT_ALIAS);


Anak kucing = (Kucing) map.get("kt");


}


5. Pengambilan asosiasi dinamis Anda dapat mengubah kebijakan pengambilan otomatis objek asosiasi dengan mengatur FetchMode() saat runtime.



Daftar kucing = sess.createCriteria(Cat.class)


                .add( Expression.like("nama", "Fritz%") )


                .setFetchMode("mate", FetchMode.EAGER)


                .daftar();


Kueri ini akan mendapatkan pasangan dan anak kucing melalui gabungan luar.


6. Menurut class Example query net.sf.hibernate.expression.Example, Anda dapat membuat kondisi kueri dari instance yang ditentukan.


Kucing kucing = kucing baru ();


cat.setSex('F');


cat.setColor(Color.BLACK);


Daftar hasil = session.createCriteria(Cat.class)


                    .add( Contoh.buat(kucing) )


                    .daftar();
Properti versi, properti representasi, dan asosiasi semuanya diabaikan. Secara default, atribut null juga dikecualikan. Anda dapat menyesuaikan cara Contoh diterapkan. Kamu bisa
untuk menyesuaikan cara contoh diterapkan. Contoh contoh = Example.create(cat) .excludeZeroes() //exclude properti bernilai nol


.excludeProperty("color") //mengecualikan properti bernama "color" .ignoreCase() //melakukan perbandingan string yang tidak peka huruf besar/kecil


.enableLike(); Gunakan seperti untuk perbandingan string


Daftar hasil = session.createCriteria(Cat.class)


                      .add (contoh)


                      .daftar();
Anda bahkan dapat menggunakan contoh untuk menetapkan kriteria untuk objek terkait. Daftar hasil = session.createCriteria(Cat.class) .add(Example.create(cat) )


.createCriteria("mate") .add(Contoh.create(cat.getMate())) .list();


Kode referensi adalah sebagai berikut:






Mantan:Koneksi kiri, kanan, dan dalam LINQ
Depan:Perbedaan antara variabel definisi let dan var dalam js
Sanggahan:
Semua perangkat lunak, materi pemrograman, atau artikel yang diterbitkan oleh Code Farmer Network hanya untuk tujuan pembelajaran dan penelitian; Konten di atas tidak boleh digunakan untuk tujuan komersial atau ilegal, jika tidak, pengguna akan menanggung semua konsekuensi. Informasi di situs ini berasal dari Internet, dan sengketa hak cipta tidak ada hubungannya dengan situs ini. Anda harus sepenuhnya menghapus konten di atas dari komputer Anda dalam waktu 24 jam setelah pengunduhan. Jika Anda menyukai program ini, harap dukung perangkat lunak asli, pembelian pendaftaran, dan dapatkan layanan asli yang lebih baik. Jika ada pelanggaran, silakan hubungi kami melalui email.

Mail To:help@itsvse.com