Memakai Grails’ Object Relation Mapping (GORM)


Grails’ Object Relation Mapping (GORM) pada dasarnya adalah Hibernate 3 yang di-akses melalui Groovy.  Karena Groovy adalah bahasa dinamis, GORM menawarkan cara berbeda dalam memakai Hibernate sehingga rasanya unik bagi pengguna Hibernate di Java seperti saya.   Seperti apa?

Saya akan mulai dengan membuat sebuah proyek Grails di STS yang saya beri nama latihan.  Setelah itu, saya memberikan perintah untuk membuat sebuah domain object Mahasiswa:

create-domain-class mahasiswa

Kemudian, saya mengubah class Mahasiswa.groovy yang dihasilkan menjadi seperti berikut ini:

package latihan

class Mahasiswa {

  String nim
  String nama
  Integer usia
  Date tanggalDaftar

  static constraints = {
    nim maxSize: 10, blank: false, unique: true
    nama size: 5..45, blank: false
    usia range: 10..50
    tanggalDaftar max: new Date()
  }
}

Pada kode program di atas, terlihat bahwa saya melakukan pengaturan domain class yang akan dikelola oleh Hibernate melalui DSL GORM, bukan melalui annotation seperti di Java.  Selain itu, GORM secara otomatis akan menambahkan atribut id dengan tipe Long sebagai primary key (yang akan di-auto increment secara otomatis oleh Hibernate) dan version untuk optimistic locking.  Dengan demikian, nim disini adalah surrogate primary key atau primary key ‘palsu’.

Berikutnya, saya ingin Grails membuat scaffolding.  Pada konstruksi bangunan, scaffolding adalah struktur sementara yang berfungsi sebagai pembantu/pendukung dalam membuat struktur yang lebih rumit.  Sebagai contoh, scaffolding bisa ditemukan dalam bentuk bambu-bambu yang disatukan yang memungkinkan para pekerja bangunan menjangkau bagian sulit.  Dalam bidang pengembangan software, terutama di Grails, scaffolding yang dimaksud adalah membuat view atau controller secara otomatis berdasarkan isi domain object.  View dan controller hasil scaffolding ini umumnya bersifat sementara sebagai prototype dan perlu dikembangkan lebih lanjut.  Untuk menghasilkan scaffolding, saya memberikan perintah:

generate-all latihan.Mahasiswa

Grails akan menghasilkan controller dengan nama MahasiswaController.groovy dan view untuk operasi CRUD di folder mahasiswa.  Salah satu contoh view  adalah list.gsp  yang akan menampilkan seluruh mahasiswa yang ada di database.  Untuk merasakan pengalaman coding Groovy dan GORM,  saya akan mencoba menambahkan sebuah fitur filtering di halaman tersebut.  Btw, view di Grails memakai teknologi Groovy Server Page (GSP) yang mirip seperti JSP.   Saya menambahkan bagian berikut ini tepat sebelum <table> di list.gsp:

<g:form>
  <g:select name="kataKunci" from="${['NIM', 'Nama', 'Usia', 'Tanggal Daftar']}"
     keys="${['nim','nama', 'usia', 'tanggalDaftar']}" />
  <g:textField name="nilaiDicari" />
  <g:actionSubmit value="Cari" action="list" />
</g:form>

Tag GSP di atas akan membuat sebuah drop-down berisi field yang akan dicari, sebuah textbox untuk mengetik nilai yang dicari, dan sebuah tombol submit.  Bila tombol submit ini di-klik, maka method list (nilai dari atribut action di tag <g:actionSubmit>) yang ada di-controller yang menampilkan halaman ini akan dikerjakan.

Dengan kata lain, bila tombol submit di-klik, maka method list yang ada di file MahasiswaController.groovy akan dikerjakan.  Oleh sebab itu, saya mengubah method tersebut agar berisi kode program yang melakukan penyaringan seperti yang terlihat berikut ini:

def list(Integer max) {
  params.max = Math.min(max ?: 10, 100)

  def results
  if (params.kataKunci && params.nilaiDicari) {
    switch (params.kataKunci) {
       case "nim":
          results = Mahasiswa.where {
             nim =~ "%${params.nilaiDicari}%"
          }.list(params)
          break
       case "nama":
          results = Mahasiswa.where {
             nama =~ "%${params.nilaiDicari}%"
          }.list(params)
          break
       case "usia":
          results = Mahasiswa.where {
             usia == params.nilaiDicari as Integer
          }.list(params)
          break
       case "tanggalDaftar":
          results = Mahasiswa.where {
             tanggalDaftar == new java.text.SimpleDateFormat("dd/MM/yyyy").parse(params.nilaiDicari)
          }.list(params)
          break
    }
  } else {
     results = Mahasiswa.list(params)
  }

  [mahasiswaInstanceList: results, mahasiswaInstanceTotal: Mahasiswa.count()]
}

Pada kode program di atas, saya memakai fitur where queries yang telah ada sejak Grails 2.  Pada perbandingan untuk String, saya menggunakan operator =~ yang akan melakukan pencarian like secara case-insensitive (misalnya pencarian “SOLID SNAKE” dan “solid snake” akan mengembalikan hasil yang sama).

Sekarang, saya akan menjalankan aplikasi latihan ini dengan memberikan perintah:

run-app

Saya segera membuka url “localhost:8080/latihan/mahasiswa/list“.  Saya bisa menambahkan data mahasiswa dengan men-klik tombol New Mahasiswa.  Setelah menambahkan beberapa data, tampilan akan terlihat seperti pada gambar berikut ini:

Tampilan View Hasil Scaffolding Grails

Tampilan View Hasil Scaffolding Grails

Kode program di halaman ini masih singkat, tetapi saya sudah memperoleh sebuah situs dengan fitur CRUD lengkap dengan fungsi pencarian.  Grails sepertinya berhasil menyederhanakan proses pengembangan untuk web yang sederhana sehingga terasa cepat dan agile.

Perihal Solid Snake
I'm nothing...

One Response to Memakai Grails’ Object Relation Mapping (GORM)

  1. Ping-balik: Memakai Spring Security Di Grails « The Solid Snake

Apa komentar Anda?

Please log in using one of these methods to post your comment:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout / Ubah )

Gambar Twitter

You are commenting using your Twitter account. Logout / Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout / Ubah )

Foto Google+

You are commenting using your Google+ account. Logout / Ubah )

Connecting to %s

%d blogger menyukai ini: