Pengenalan Grail 3 dan GORM

Ketekunan atas

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

>> SEMAK KURSUS

1. Gambaran keseluruhan

Ini adalah pengenalan pantas untuk Grails 3 dan GORM.

Kami tentu saja akan menggunakan Groovy dan - secara implisit - kerangka ini juga menggunakan Hibernate untuk ORM, Spring Framework for Dependency Injection, SiteMash untuk susun atur dan tema, dll.

2. Konfigurasi Sumber Data

Kita boleh memulakan tanpa perlu menentukan konfigurasi sumber data eksplisit - secara lalai Grails menggunakan pangkalan data HSQLDB untuk pengembangan dan pengujian persekitaran.

Tetapi jika anda ingin mengubah lalai ini, anda boleh menentukan sumber data yang anda pilih dalam aplikasi.yml :

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

Begitu juga kita dapat membuat pelbagai persekitaran di sini, di sebelah pembangunan jika kita perlu.

3. Domain

Grails mampu membuat struktur pangkalan data untuk kelas domain kami, berdasarkan sifat dbCreate dalam konfigurasi pangkalan data.

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 pengesahan kami tepat dalam model , yang menjadikan semuanya baik dan bersih, serta tanpa anotasi.

Kekangan ini akan diperiksa oleh Grails secara automatik ketika entiti tersebut dikekalkan dan kerangka kerja akan memberikan pengecualian pengesahan yang sesuai jika ada batasan ini dilanggar.

Kami juga dapat menentukan pemetaan GORM dalam pemetaan harta tanah model:

static mapping = { sort "userName" }

Sekarang jika kita memanggil User.list () - kita akan mendapat hasil yang disusun mengikut nama pengguna .

Sudah tentu kita dapat memperoleh hasil yang sama dengan memasukkan senarai ke API senarai:

User.list(sort: "userName")

4. Operasi CRUD

Apabila kita melihat operasi API, perancah memainkan peranan yang sangat menarik pada mulanya; ini membolehkan anda menghasilkan API CRUD asas untuk kelas domain, termasuk:

  • Pandangan yang diperlukan
  • Tindakan pengawal untuk operasi CRUD standard
  • Dua jenis: Dinamik dan Statik

Inilah cara kerjanya dengan perancah dinamik:

class UserController { static scaffold = true }

Dengan hanya menulis baris tunggal ini, kerangka kerja akan menghasilkan 7 kaedah pada waktu runtime: tunjukkan, edit, hapus, buat, simpan dan kemas kini. Ini akan diterbitkan sebagai API untuk entiti domain tertentu.

Contoh perancah Statik:

  • Untuk membuat pandangan dengan penggunaan perancah: " grails menghasilkan-pandangan Pengguna "
  • Untuk membuat pengawal dan melihat dengan perancah menggunakan: " grails menghasilkan-pengawal Pengguna "
  • Untuk membuat semuanya dalam satu perintah, gunakan: " grails menghasilkan-semua Pengguna "

Perintah ini akan menghasilkan paip yang diperlukan secara automatik untuk objek domain tertentu.

Sekarang mari kita melihat penggunaan operasi ini dengan cepat - sebagai contoh, untuk objek domain Pengguna kami .

Untuk membuat rekod "pengguna" baru :

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

Untuk mengambil satu rekod :

def user = User.get(1) 

Ini get API akan mendapatkan semula objek domain dalam mod disunting. Untuk mod baca sahaja, kita boleh menggunakan API baca :

def user = User.read(1)

Untuk mengemas kini rekod yang ada :

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

Dan operasi hapus mudah untuk rekod yang ada:

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

5. Pertanyaan GORM

5.1. cari

Mari mulakan dengan API cari :

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

Kita juga boleh menggunakan sintaks yang berbeza untuk meneruskan parameter:

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

Kita juga dapat menggunakan parameter bernama:

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

5.2. cari dengan

Grails menyediakan kemudahan pencari dinamik yang menggunakan sifat domain untuk melaksanakan pertanyaan pada waktu runtime dan mengembalikan rekod pencocokan pertama:

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

Anda boleh mendapatkan lebih banyak ungkapan 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 ringkas di sini - ketika menggunakan pertanyaan kriteria, gunakan "{}" dan bukan "()".

5.4. Jalankan Pertanyaan / Kemas kini

GORM juga menyokong sintaks pertanyaan 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