Membuat kelas Domain
Sekarang mari kita bahas kelas Domain yang telah kita buat pada pembahasan sebelumnya. Kode yang kita buat seperti tampak di bawah ini:
Listing 4.1
class DaftarTeman {
String nama
String alamat
String nomorHP
String nomorTelpon
Date tanggalLahir
static constraints = {
nama(size:0..40, nullable: false)
alamat(size:0..80, nullable: true)
nomorHP(size:0..20, nullable: true)
nomorTelpon(size:0..20, nullable: true)
tanggalLahir()
}
String toString() {
"$nama"
}
}
- baris 01
nama kelas yang akan menjadi nama tabel di database. - baris 02 - 06
nama-nama field dan tipe datanya. - baris 09 - 13
digunakan untuk validasi dan menentukan atribut dari field di database. - baris 16 - 18
method yang akan mengembalikan nilai string.
Tipe Data
Tipe data yang akan digunakan untuk membuat sebuah domain adalah tipe data yang di dukung oleh Groovy (jika anda tidak sempat mempelajari Groovy, asumsikan saja tipe data yang akan dipergunakan dengan tipe data yang biasa anda gunakan pada pemrograman Java). Seperti terlihat pada potongan kode diatas. Jika anda berasumsi bahwa Groovy adalah sebuah perluasan bahasa Java, maka asumsi itu tidak seluruhnya salah. Untuk mudahnya, asumsi diatas dapat di terima. Sebaiknya anda pelajari Groovy lebih mendalam untuk mengetahui lebih dalam bahasa yang dipergunakan oleh Grails.
Constraint
Constraint digunakan untuk beberapa hal. Diantaranya adalah membuat validasi pada data yang akan di masukkan oleh pengguna, juga digunakan oleh Grails untuk mendefinisikan field-field pada tabel di database yang akan dibuat dan digunakan nantinya.
Di bawah ini akan di tampilkan tabel macam-macam constraint yang di dukung oleh Grails.
| Constraint | Contoh | Keterangan |
|---|---|---|
| blank | login(blank:false) | Set ke false jika nilai string tidak boleh kosong |
| email(email:true) | Set ke true jika nilai harus berupa alamat email | |
| inList | login(inList:["Joe", "Fred"] ) | Nilai yang dimasukkan harus sesuai dengan nilai di dalam list |
| length | login(length:5..15) | Digunakan untuk membatasi panjang dari string atau array |
| min | age(min:new Date()) | Untuk menentukan nilai minimum |
| minLength | login(minLength:5) | Untuk menentukan panjang minimum string atau array |
| minSize | children(minSize:5) | Untuk menentukan ukuran minimum collection atau angka |
| matches | login(matches:/[a-zA-Z]/) | Untuk diperiksa apakah sesuai dengan regular expression yang di berikan |
| max | age(max:new Date()) | Untuk menentukan nilai maksimum |
| maxLength | login(maxLength:5) | Untuk menentukan panjang maksimum string atau array |
| maxSize | children(maxSize:25) | Untuk menentukan panjang maksimum collection atau angka |
| notEqual | login(notEqual:"Bob") | Nilai yang dimasukkan tidak boleh sama dengan nilai yang ditentukan |
| nullable | age(nullable:false) | Set ke false jika nilai tidak boleh berupa null |
| range | age(range:minAge..maxAge) | Nilai yang dimasukkan harus berada dalam range yang ditentukan |
| size | children(size:5..15) | Untuk membatasi ukuran dari collection atau angka sesuai range yang ditentukan |
| unique | login(unique:true) | Set ke true jika properti harus unik |
| url | url(url:true) | Set ke true jika nilai string adalah alamat URL |
Relasi antar Tabel
Grails (via GORM -> Grails Object-Relational Mapping) menyediakan beberapa cara dalam mendefinisikan relasi antar tabel. Misalnya kita mempunyai dua buah tabel yang akan di buat relasi antar tabel seperti tampak pada tabel di bawah ini:
| Pengarang | Buku |
|---|---|
| namaPengarang | judulBuku |
Dan kode untuk kelas domain yang kita buat tampak seperti berikut:
Listing 4.2
class Pengarang {
String namaPengarang
static constraints = {
namaPengarang(size:0..40, nullable: false)
}
String toString() {
"$namaPengarang"
}
}
class Buku {
String judulBuku
static constraints = {
judulBuku(size:0..40, nullable: false)
}
String toString() {
"$judulBuku"
}
}
- Relasi one-to-one
- Satu arah (Unidirectional)
Kita ingin menambahkan relasi dimana setiap buku punya seorang pengarang. Maka kode yang akan kita buat menjadi seperti dibawah ini:
Listing 4.3
class Pengarang { String namaPengarang static constraints = { namaPengarang(size:0..40, nullable: false) } String toString() { "$namaPengarang" } }
class Buku { String judulBuku Pengarang pengarang static constraints = { judulBuku(size:0..40, nullable: false) } String toString() { "$judulBuku" } }
- Dua arah (Bi Directional)
Jika kita ingin membuat relasi dimana seorang pengarang juga mempunyai buku, maka kode yang dibuat menjadi seperti dibawah ini:
Listing 4.4
class Pengarang { String namaPengarang Buku buku static constraints = { namaPengarang(size:0..40, nullable: false) } String toString() { "$namaPengarang" } }
class Buku { String judulBuku Pengarang pengarang static constraints = { judulBuku(size:0..40, nullable: false) } String toString() { "$judulBuku" } }
Jika anda menginginkan relasi antar tabel saling mempengaruhi pada saat insert/update ke database maka kode yang dibuat menjadi:
Listing 4.5
class Pengarang { String namaPengarang Buku buku static constraints = { namaPengarang(size:0..40, nullable: false) } String toString() { "$namaPengarang" } }
class Buku { static belongsTo = [pengarang:Pengarang] String judulBuku static constraints = { judulBuku(size:0..40, nullable: false) } String toString() { "$judulBuku" } }
Kata kunci belongsTo pada kode diatas menunjukkan bahwa tabel Buku dimiliki oleh tabel Pengarang. Namun harap di perhatikan, jika anda menghapus satu data Pengarang maka Buku yang berkaitan juga ikut dihapus dari database.
- Satu arah (Unidirectional)
- Relasi one-to-many/many-to-one
- Satu arah (Unidirectional)
Jika anda ingin membuat sebuah relasi dimana seorang Pengarang mempunyai banyak Buku, maka kode yang dibuat menjadi seperti berikut:
Listing 4.6
class Pengarang { static hasMany = [buku:Buku] String namaPengarang static constraints = { namaPengarang(size:0..40, nullable: false) } String toString() { "$namaPengarang" } }
class Buku { String judulBuku static constraints = { judulBuku(size:0..40, nullable: false) } String toString() { "$judulBuku" } }
- Dua arah (Bi Directional)
Listing 4.7
class Pengarang { static hasMany = [buku:Buku] String namaPengarang static constraints = { namaPengarang(size:0..40, nullable: false) } String toString() { "$namaPengarang" } }
class Buku { static belongsTo = [pengarang:Pengarang] String judulBuku static constraints = { judulBuku(size:0..40, nullable: false) } String toString() { "$judulBuku" } }
- Satu arah (Unidirectional)
blh neh grails, kebetulan lg belajar, btw bs tanya2 ga tentang grails? hehehe
BalasHapus@Aswin: Boleh aja. Tapi mohon maaf sebelumnya, saya mungkin tidak segera menjawab pertanyaan-pertanyaan yang masuk. Soalnya saya tidak selalu online.
BalasHapus