Monday, October 26, 2009

Searching Menggunakan Limit Dengan Hibernate



Post ini melanjutkan catatan sebelumnya tentang membuat google wannabe paging.

Terdapat banyak cara untuk mendapatkan qury limit di hibernate, terdapat HQL (Hibernate Query Language), Criterion, atau native sql. Saya akan memberi tahu bagaimana caranya dengan menggunakan HQL. Bagi saya HQL itu sederhananya SQL menggunakan POJO (Plain Old Java Objetct) hibernate, Object yang merepresentaiskan tabel2. Misalnya jika tabel dengan nama LOG_ACIVITY maka POJO bisa berupa class dengan nama LogActivity. Jika SQL seperti : "SELECT * FROM LOG_ACTIVITY", maka HQL-nya cukup berupa: "FROM LogActivity", dan HQL memiliki banyak fungsi.

Dalam catatan ini saya tidak hanya memberitahu bagaimana mendapatkan record2 mulai 1 sampai 100, tapi juga pencarian yang menggunakan parameter, seperti mendapatkan record mulai kemarin sampai sekarang untuk seratus record yang pertama.
1. Dapatkan kriteria pencarian. Nilai defaultnya '*'. Misalnya field username, jika ada nilai dari input seperti "imam" maka username = "imam", selain itu username="*"
2. Hitung total record berdasarkan kriteria tadi
3. Miliki konstanta berapa record yang ditampilkan di tiap halaman, misalnya 10, dan jumlah record itu juga bisa disimpan dalam parameter.
4. Saya bagi total record dengan konstanta tadi sehingga saya dapatkan total halaman buat paging.
Saya lakukan query dengan sintaks yang samaketika saya mencari jumlah total record (sintaks itu saya jadikan menjadi method tersendiri), namun kali ini untuk mendapatkan record bukan jumlah record.
6. Saya lempar seluruh variable (page, totalPages, listPages, perPage, totRecord, recordList, qName, qDate, etc etc), dimana
- page = page yang diminta, misalnya page 13
- totalPage misalnya 5
- listPage misalnya 5
- perPage, berapa record yang ditampilkan di tiap page
- totRecord, karena akan dimunculkan di aplikasi
- recordList
- qName, qDate, dan variable lain sebagai parameter pencarian yang disimpan dalam session.

Berikut code snippednya, yang pertama metgod untuk mendapatkan jumlah record, yang kedua untuk mendapatkan record yang sebenarnya, sedangkan buildQueryString adalah methodd yang menghasilkan sintaks Hql dengan parameter criteria=nam dari field2 pencarian seperti username, dateFrom, dateTo, dan parameter kedua adalah nilai question dari field2 pencarian, saya set "*" jika null atau empty.

public Long getLogActivitiesSearchingPagingCount(String criteria, String
question) {
String queryString = "select count(*) " + buildQueryString(criteria, question);
Long total = (Long) getSession().createQuery(queryString).uniqueResult();

return total;
}

public List getLogActivitiesSearchingPaging(int start, int length, String
criteria, String question) {
List logActivities = getSession().createQuery(buildQueryString(criteria, question))
.setFirstResult(start)
.setMaxResults(length).list();
return logActivities;
}

1 comment:

JesperBlog said...

Sir, I already add link to your site in my blog and give a comment to your blog for adding link into my blog as you interested

Regards,
Imam