Kamus Perintah Hibernate Criteria Query – MySQL

23 01 2009

English Version

Untuk rekan – rekan yang sudah terbiasa dengan Java Platform mungkin sudah tidak aneh dengan Hibernate, begitu pula untuk rekan – rekan yang sudah terbiasa dengan Hibernate kemungkinan juga sudah tidak aneh dengan istilah Hibernate Criteria Query. Pada kesempatan ini kita akan coba bahas mengenai persamaan fungsi antara Criteria Query dengan MySQL, dengan tujuan membantu rekan – rekan yang baru mempelajari tentang Hibernate dan bagaimana kesamaan fungsi nya dengan perintah – perintah standar yang sudah ada dalam MySQL.

Berikut akan kita mulai pembahasan mengenai hal tersebut diatas, pertama kita akan ambil contoh sebuah table dalam MySQL yang kemudian akan di konversikan kedalam sebuah model java class mengikuti kaidah yang sudah ditetapkan Hibernate. Dalam hal ini kita akan menggunakan Hibernate Annotation sehingga tidak menggunakan file *.xml untuk mapping field table terhadap field class. Untuk contoh sederhana kita akan coba sebuah table dengan nama “karyawan” begitu pula kita akan menggunakan model class dengan nama yang sama.

Nama Field Type Field Primary Key
id Integer / Numeric Yes
nama Varchar(30)
tgl_masuk Date
upah Decimal(20,10)

Dengan perintah membuat table di MySQL sebagai berikut:

CREATE TABLE `karyawan` (                                  
  `id` int(11) NOT NULL auto_increment,                    
  `nama` varchar(30) default NULL,                         
  `tgl_masuk` date NOT NULL default '1970-01-01',          
  `upah` decimal(20,10) default NULL,                      
  PRIMARY KEY (`id`)                                      
) ENGINE=InnoDB DEFAULT CHARSET=latin1 ROW_FORMAT=DYNAMIC  

Kemudian class model Karyawan dibuat dengan syntax seperti berikut:

@Entity
@Table(name="karyawan")
public class Karyawan implements Serializable {
    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    private Long id;
    
    @Column(name="nama")
    private String nama;
    
    @Temporal(TemporalType.DATE)
    @Column(name="tgl_masuk",nullable=false,columnDefinition="date")
    private Date tglMasuk;
    
    @Column(name="upah")
    @Type(type="big_decimal")
    private BigDecimal upah;
    
    public Karyawan() {}

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getNama() {
        return nama;
    }

    public void setNama(String nama) {
        this.nama = nama;
    }

    public Date getTglMasuk() {
        return tglMasuk;
    }

    public void setTglMasuk(Date tglMasuk) {
        this.tglMasuk = tglMasuk;
    }

    public BigDecimal getUpah() {
        return upah;
    }

    public void setUpah(BigDecimal upah) {
        this.upah = upah;
    }
}

Dengan mengasumsikan Hibernate sudah dikuasai sesuai dengan referensi artikel Proses CRUD Dengan Hibernate Annotations Menggunakan Netbean 6.0, maka kita akan langsung membahas mengenai penggunaan Criteria Query, adapun class yang bisa digunakan adalah “Criteria” dari “org.hibernate.Criteria”, “DetachedCriteria” dari “org.hibernate.criterion.DetachedCriteria” juga harus diikuti dengan class “Expression” dari “org.hibernate.criterion.Expression”, “Restriction” dari “org.hibernate.criterion.Restriction”, kemudian dengan asumsi jika kita akan mengambil seluruh data dari table “Karyawan” maka kita akan menggunakan perintah SQL sebagai berikut:

select * from Karyawan;

sedangkan jika menggunakan Criteria Query baik itu “Criteria” ataupun “DetachedCriteria” akan mengembalikan nilai dari baris perintah seperti berikut:

getSession().createCriteria(Karyawan.class).list();

Berikut kita akan menampilkan beberapa contoh perintah Criteria Query dan persamaan perintah dengan Query MySQL:

MySQL Hibernate Criteria Query
select * from Karyawan where id = 1; getSession().createCriteria(Karyawan.class) .add(Expression.eq(“id”, Long.valueOf(1)))
.list();
select * from Karyawan where id != 1; getSession().createCriteria(Karyawan.class) .add(Expression.ne(“id”, Long.valueOf(1)))
.list();
select * from Karyawan where id <> 1; getSession().createCriteria(Karyawan.class) .add(Expression.ne(“id”, Long.valueOf(1)))
.list();
select * from Karyawan where nama = “sesuatu”; getSession().createCriteria(Karyawan.class)
.add(Expression.eq(“nama”, “sesuatu”))
.list();
select * from Karyawan where tgl_masuk = “1900-01-01”; getSession().createCriteria(Karyawan.class)
.add(Expression.eq(“tglMasuk”, new java
.util.Date(java.sql.Date
.valueOf(“1900-01-01”))))
.list();
select * from Karyawan where upah = 10000; getSession().createCriteria(Karyawan.class)
.add(Expression.eq(“upah”, BigDecimal
.valueOf(10000)))
.list();
select * from Karyawan where id > 10; getSession().createCriteria(Karyawan.class)
.add(Expression.gt(“id”, Long.valueOf(10)))
.list();
select * from Karyawan where id < 10 and id > 30; getSession().createCriteria(Karyawan.class)
.add(Expression.lt(“id”, Long.valueOf(10)))
.add(Expression.gt(“id”, Long.valueOf(30)))
.list();
select * from Karyawan where id < 10 or id > 30; getSession().createCriteria(Karyawan.class)
.add(Expression.or(Expression.lt(“id”, Long.valueOf(10)), Expression.gt(“id”, Long.valueOf(30))))
.list();
select * from Karyawan where id <= 10; getSession().createCriteria(Karyawan.class)
.add(Expression.le(“id”, Long.valueOf(10)))
.list();
select * from Karyawan where id >= 10; getSession().createCriteria(Karyawan.class)
.add(Expression.ge(“id”, Long.valueOf(10)))
.list();
select * from Karyawan where nama like ‘sesu%’; getSession().createCriteria(Karyawan.class)
.add(Expression.like(“nama”, “sesu”, MatchMode.END))
.list();
select * from Karyawan where nama like ‘%sua%’; getSession().createCriteria(Karyawan.class)
.add(Expression.like(“nama”, “sua”, MatchMode.ANYWHERE))
.list();
select * from Karyawan where nama like ‘%atu’; getSession().createCriteria(Karyawan.class)
.add(Expression.like(“nama”, “atu”, MatchMode.START))
.list();
select * from Karyawan where nama like ‘sesuatu’; getSession().createCriteria(Karyawan.class)
.add(Expression.like(“nama”, “sesuatu”, MatchMode.EXACT))
.list();
select * from Karyawan where id between 0 and 100; getSession().createCriteria(Karyawan.class)
.add(Expression.between(“id”, Long.valueOf(0), Long.valueOf(100)))
.list();
select * from Karyawan where nama = ‘’; getSession().createCriteria(Karyawan.class)
.add(Expression.isEmpty(“nama”))
.list();
select * from Karyawan where nama <> ‘’; getSession().createCriteria(Karyawan.class)
.add(Expression.isNotEmpty(“nama”))
.list();
select * from Karyawan where nama is null; getSession().createCriteria(Karyawan.class)
.add(Expression.isNull(“nama”))
.list();
select * from Karyawan where nama is not null; getSession().createCriteria(Karyawan.class)
.add(Expression.isNotNull(“nama”))
.list();
select * from Karyawan where id in (1,3,5,7); List<Long> idlist = new ArrayList<Long>();
idlist.add(1);
idlist.add(3);
idlist.add(5);
idlist.add(7);
getSession().createCriteria(Karyawan.class)
.add(Expression.in(“id”, idlist))
.list();
select * from Karyawan where id not in (1,3,5,7); List<Long> idlist = new ArrayList<Long>();
idlist.add(1);
idlist.add(3);
idlist.add(5);
idlist.add(7);
getSession().createCriteria(Karyawan.class)
.add(Expression.not(Expression.in(“id”, idlist)))
.list();
select * from Karyawan where id > 1 order by id ASC; getSession().createCriteria(Karyawan.class)
.addOrder(Order.asc(“id”))
.add(Expression.ge(“id”, Long.valueOf(1)))
.list();
select * from Karyawan where id > 1 order by id DESC; getSession().createCriteria(Karyawan.class)
.addOrder(Order.desc(“id”))
.add(Expression.ge(“id”, Long.valueOf(1)))
.list();

Sebagai catatan perintah “Expression.not” atau “Restriction.not” tidak dapat dipakai untuk perintah Query MySQL seperti berikut “Select * from Karyawan where id 1” atau “Select * from Karyawan where id != 1” meskipun dalam perintah tersebut memperlihatkan where kondisi “tidak sama dengan” atau “not equal” dikarenakan perintah ini sudah terwakili dengan perintah “Expression.ne” atau “Restriction.ne”. Sebagai contoh penulisan yang benar, jika Hibernate yang hendak kita tulis merupakan bagian dari web-app menggunakan Spring, maka contoh – contoh diatas harus ditulis didalam Class DAO Implementation, tetapi jika tidak terintegrasi dalam Spring maka ditulis dalam Class object biasa. Dengan contoh sebagai berikut:

@SuppressWarnings("unchecked")
public List<Karyawan> loadContohSatu() {
    List<Long> idlist = new ArrayList<Long>();
    idlist.add(1);
    idlist.add(3);
    idlist.add(5);
    idlist.add(7);
      
    return getSession().createCriteria(Karyawan.class)
    .add(Expression.not(Expression.in(“id”, idlist))).list();
}
@SuppressWarnings("unchecked")
public List<Karyawan> loadContohDua() {
    return getSession getSession().createCriteria(Karyawan.class)
    .addOrder(Order.asc(“id”))
    .add(Expression.ge(“id”, Long.valueOf(1))).list();
}

Untuk kesempatan ini baru beberapa contoh syntax yang simple seperti yang sudah tertulis diatas yang dapat ditampilkan, dan akan dilanjutkan pada artikel selanjut untuk pembahasan yang lebih kompleks dan Criteria Query yang melibatkan beberapa table sekaligus beserta relasi antar table dengan menggunakan Hibernate Criteria Query.

Mungkin saat ini hanya sekian ilmu yang bisa dibagi dengan pembaca semoga bermanfaat, jika ada kekurangan atau masukan yang dapat meningkatkan kemampuan jangan sungkan untuk memberikan komentar.

  View Pdf Version


Actions

Information

25 responses

27 01 2009
udin

maaf mas, sedikit koreksi
setahu saya, yang mas bahas disini adalah Hibernate Criteria Queries, yang ada di bab 15 dari reference manual-nya Hibernate.
sedangkan yg disebut HQL, atau Hibernate Query Language, adalah yg dibahas pada bab 14 dari referecen manual-nya Hibernate. HQL sendiri sebenarnya SANGAT MIRIP dengan SQL biasa.

23 12 2010
Muki

Mas udin punya manualnya hibernate ya?
mas aku bisa ndak mas? yang untuk pemula
aja mas ^_^ maklum masih OoN.
kalau ada PM ya ke mukimini@gmail.com

Terima kasih sebelumnya

27 01 2009
Bunda Tapin

Hatur nuhun bagi2 ilmu na Abah, untuk HQL yg expressionnya pake List belum pernah nyoba.

27 01 2009
agienthea

@udin
waw… makasih banget koreksi-nya… mohon maaf dan mohon di maklum… programmer langsung cemplung… jarang2 liat manual reference… yang penting program jalan… dan delivered ke client lancar… hehe…

semua kesalahan sudah di koreksi… makasih sekali lagi atas koreksi nya…

@bunda tapin
dikoreksi ya mbak… ternyata istilahnya Hibernate Criteria Query bukan Hibernate Query Language

23 02 2013
Rahman

mas pnya contoh program HQL ga yang di jsp???

8 03 2013
agienthea

kebetulan saya tdk pernah mencampurkan HQL dengan JSP, jadi ketika ada perintah Hibernate HQL selalu disimpen di Dao dan DaoImplement, nanti dari Dao, dipanggil ke service kemudian controller baru ke file jsp….

sebenarnya bisa juga langsung dicampurkan ke file jsp… tp tdk direkomendasikan….

24 03 2009
Zahra

Kang apakah perbedaan menggunakan Expression dengan Restriction, apakah keduanya sama?

24 03 2009
agienthea

@Zahra
Sebenarnya sama aza.. Tapi kalo liat di manual nya… Expression merupakan subclass dari Restriction… trus ada keterangan begini… “This class is semi-deprecated. Use Restrictions” dalam manual nya Expression.. kemungkinan jika hibernate mengeluarkan versi berikutnya, class ini sudah tidak dipakai lagi.. Tapi kalo untuk keperluan belajar mah oke2 aza… Tapi klo sudah terpakai di server produksi lumayan agak ngaruh nih…

14 12 2009
feto

posting yang bagus mas jadi menambah pengetahuan saya nih…^_^

Terima kasih atas infonya, silakan berkunjung ke sini dan jika mau tahu
artikel yang menarik silakan kunjungi disini

31 03 2010
Jeff

Terima kasih mas… dengan shering ilmunya,,,,
berkat blog mas deadline jadi teratasi….
maklum programer pemula java jadi saya agak awam dengan hibernate

31 03 2010
agienthea

@Jeff: okeh mas… seneng dengernya klo dah bisa bantu orang lain… 😀

23 11 2010
Aji

Mas agienthea, minta reference manual-nya Hibernate dong. thx yaa

27 11 2010
agienthea

@Aji: mungkin link ini bisa membantu…

http://docs.jboss.org/hibernate/core/3.5/reference/en/html/

27 11 2010
Aji

Oke deh, terima kasih ya kang. mantap deh.

27 11 2010
agienthea

@Aji: sama – sama 😉

27 11 2010
Aji

kang, saya pernah baca2, ada istilah matisse. apa ya itu? 🙂

27 11 2010
agienthea

@Aji: Kalo ngak salah matisse itu technology 3 or 4 thn yg lalu mulai ada nya… gunanya utk mempermudah ngedesign tampilan GUI utk java desktop… ini link beritanya… http://www.developer.com/lang/article.php/3589961/Building-Java-GUIs-with-Matisse-A-Gentle-Introduction.htm

28 01 2011
hayyi

Postingan Mantap………

28 01 2011
agienthea

@hayyi: makasih…. mohon sarannya jika masih ada kekurangan2nya..

1 02 2011
hayyi

Mas agienthea ..mau tanya…??? kalo bedanya spring hibernet ma spring jdbc apa yah..???? masih bingung nih…..kepengen belajar nya yang mana……….

1 02 2011
agienthea

@hayyi: bedanya klo yg spring hibernate di application layernya menggunakan hibernate klo yg spring jdbc menggunakan jdbc.. 😀

bedanya hibernate dan jdbc itu sebenarnya hibernate adalah teknologi turunan dr jdbc.. jauh sblm ada hibernate… jdbc sudah dipakai utk keperluan transaction ke database.. karena kebutuhan transaction yg semakin tinggi dan mengharuskan kecepatan yg semakin cepat.. maka dibuatlah hibernate dengan keunggulan menggunakan persistence layer. yg berfungsi mengurangi waktu baca data yg dibutuhkan antara aplikasi dan database. dgn algoritma temporary storage yg dimiliki hibernate. hal ini memungkinkan aplikasi tdk selalu harus membaca data di database layer. tp dpt membacanya ke temporary storagenya hibernate. dan hibernate akan melakukan commit ke database in background.

saran sy, klo pengen kuat konsep belajar dulu jdbc baru ke hibernate. tp klo lg di kejar tayang. langsung nyemplung aza ke hibernate. 😀

2 02 2011
hayyi

Ooohhh……gitu ya mas agienthea……..kemaren saya dah coba
tutorial punya mas agienthea yaitu :https://gienvision.wordpress.com/2008/07/31/proses-crud-dengan-hibernate-annotations-menggunakan-netbean-60/ alhamdulillah lumayan dah bisa…….
tapi yang saya coba itu gak pake spring mas…kalo yang pake spring gimana ya…??? terus untuk membuat aplikasi desktop configurasi nya kok gak pake spring.. kenapa mas…..??? apakah spring itu untuk pembuatan web aja……..????

sblum nya saya banyak2 trmikasih mas atas tutorial nya ini, soalnya lumayan mas tutorialnya agak mudah di mengerti……….walaupun agak pusing dikit…!!!!!…..(:

3 02 2011
agienthea

@hayyi: waktu itu sy baru mencontohkan aplikasi desktop langsung nyambung ke hibernate, tetapi spring itu bisa koq di pake utk membuat aplikasi swing, ini contoh2 link nya… silakan di liat2..

http://www.ibm.com/developerworks/java/tutorials/j-springswing/

http://www.java-forums.org/spring-framework/7047-how-run-client-program-swing-awt-using-spring-framework.html

9 05 2013
vardana

gmna lo berelasi bro??

29 05 2013
agienthea

Maksud nya gimana mas..? Bikin relasi diantara 2 table..? Gitu ya..?

Leave a comment