Pengantar Grails 3 dan GORM

Ketekunan teratas

Saya baru saja mengumumkan kursus Learn Spring baru , yang berfokus pada dasar-dasar Spring 5 dan Spring Boot 2:

>> LIHAT KURSUSnya

1. Ikhtisar

Ini adalah pengantar singkat untuk Grails 3 dan GORM.

Kita tentu saja akan menggunakan Groovy dan - secara implisit - framework juga menggunakan Hibernate untuk ORM, Spring Framework for Dependency Injection, SiteMash untuk layout dan tema, dll.

2. Konfigurasi Sumber Data

Kita bisa mulai tanpa harus menentukan konfigurasi sumber data eksplisit - secara default Grails menggunakan database HSQLDB untuk lingkungan pengembangan dan pengujian.

Tetapi jika Anda ingin mengubah default ini, Anda dapat menentukan sumber data yang Anda pilih di application.yml :

environments: development: dataSource: driverClassName : "com.mysql.jdbc.Driver" url : "jdbc:mysql://localhost:8080/test" dialect : org.hibernate.dialect.MySQL5InnoDBDialect 

Demikian pula kita dapat membuat banyak lingkungan di sini, di samping pengembangan jika perlu.

3. Domain

Grails mampu membuat struktur database untuk kelas domain kita, berdasarkan properti dbCreate dalam konfigurasi database.

Mari tentukan salah satu kelas domain ini di sini:

Class User { String userName String password String email String age static constraints = { userName blank: false, unique: true password size: 5..10, blank: false email email: true, blank: true } }

Perhatikan bagaimana kami menentukan batasan validasi kami tepat di model , yang membuat semuanya bagus dan bersih, dan bebas anotasi.

Batasan ini akan diperiksa oleh Grails secara otomatis saat entitas dipertahankan dan kerangka kerja akan mengeluarkan pengecualian validasi yang sesuai jika salah satu dari batasan ini rusak.

Kami juga dapat menentukan pemetaan GORM dalam properti pemetaan model:

static mapping = { sort "userName" }

Sekarang jika kita memanggil User.list () - kita akan mendapatkan kembali hasil yang diurutkan berdasarkan nama pengguna .

Kami tentu saja dapat mencapai hasil yang sama dengan meneruskan sortir ke API daftar:

User.list(sort: "userName")

4. Operasi CRUD

Ketika kita melihat operasi API, scaffolding memainkan peran yang sangat menarik di awal; itu memungkinkan Anda menghasilkan CRUD API dasar untuk kelas domain, termasuk:

  • Pandangan yang diperlukan
  • Tindakan pengontrol untuk operasi CRUD standar
  • Dua jenis: Dinamis dan Statis

Inilah cara kerjanya dengan perancah dinamis:

class UserController { static scaffold = true }

Dengan hanya menulis baris tunggal ini, kerangka kerja akan menghasilkan 7 metode saat runtime: tampilkan, edit, hapus, buat, simpan, dan perbarui. Ini akan dipublikasikan sebagai API untuk entitas domain tersebut.

Contoh perancah Statis:

  • Untuk membuat tampilan dengan scaffolding gunakan: " grails generate-views User "
  • Untuk membuat controller dan view dengan scaffolding gunakan: “ grails generate-controller User
  • Untuk membuat semuanya dalam satu perintah, gunakan: " grails generate-all User "

Perintah ini akan membuat pipa ledeng yang diperlukan secara otomatis untuk objek domain tersebut.

Sekarang mari kita lihat sekilas penggunaan operasi ini - misalnya, untuk objek domain User kita .

Untuk membuat catatan "pengguna" baru :

def user = new User(username: "test", password: "test123", email: "[email protected]", age: 14) user.save()

Untuk mengambil satu catatan :

def user = User.get(1) 

Ini get API akan mengambil objek domain dalam modus diedit. Untuk mode hanya-baca, kita dapat menggunakan API baca :

def user = User.read(1)

Untuk memperbarui catatan yang ada :

def user = User.get(1) user.userName = "testUpdate" user.age = 20 user.save() 

Dan operasi penghapusan sederhana untuk rekaman yang ada:

def user = User.get(1) user.delete()

5. Pertanyaan GORM

5.1. Temukan

Mari kita mulai dengan find API:

def user = User.find("from User as u where u.username = 'test' ")

Kita juga dapat menggunakan sintaks yang berbeda untuk memasukkan parameter:

def user = User.find("from User as u where u.username?", ['test'])

Kita juga bisa menggunakan parameter bernama:

def user = User.find("from User as u where u.username=?", [username: 'test'])

5.2. findBy

Grails menyediakan fasilitas pencari dinamis yang menggunakan properti domain untuk mengeksekusi kueri saat runtime dan mengembalikan catatan pertama yang cocok:

def user = User.findByUsername("test") user = User.findByUsernameAndAge("test", 20) user = User.findByUsernameLike("tes") user = User.findByUsernameAndAgeNotEquals("test", "100")

Anda dapat menemukan lebih banyak ekspresi di sini.

5.3. Kriteria

Kami juga dapat mengambil data menggunakan beberapa kriteria fleksibel:

def user = User.find { username == "test"} def user = User.createCriteria() def results = user.list { like ("userName", "te%") and { between("age", 10, 20) } order("userName", "desc") }

Catatan singkat di sini - saat menggunakan kueri kriteria, gunakan "{}" alih-alih "()".

5.4. Jalankan Query / Update

GORM juga mendukung sintaks kueri HQL - untuk operasi baca:

def user = User.executeQuery( "select u.userName from User u where u.userName = ?", ['test'])

Serta operasi tulis:

def user = User.executeUpdate("delete User u where u.username =?", ['test'])

6. Conclusion

This has been a very quick intro to Grails and GORM – to be used as a guide to getting started with the framework.

Persistence bottom

I just announced the new Learn Spring course, focused on the fundamentals of Spring 5 and Spring Boot 2:

>> CHECK OUT THE COURSE