grails domain classes

Post on 17-Jan-2017

186 Views

Category:

Technology

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Grails - Domain Classes

Hiten Pratap Singhhiten@nexthoughts.com

https://github.com/hitenpratap

Domain Classes

• Object oriented (OO) applications involve a domain model representing the business entities that the application deals with.• Domain classes has properties associated with them which map

to a database in order to persist instances of those classes.• Domain class create : grails create -domain- class

<<class_name>>

Persisting Fields to the Database

• All the fields in a domain class are persisted to the database.• Each field in the class will map to a column in the database.

Validations

• Grails allows you to apply constraints to a domain class that can then be used to validate a domain class instance.• Constraints are applied using a "constraints" closure.• To validate a domain class you can call the "validate()"

method on an instance.

Exampleclass User { String login String password String email Date age

static constraints={ login(size:5..15,blank:false,unique:true) password(size:5..15,blank:false) email(email:true,blank:false) age(min:new Date(),nullable:false)

}}

Validating Constraints

def user = new User(params) if(user.validate()){ //do something }else{ user.errors.allErrors.each{ Println it } }

Custom Validators

class User { static constraints = { password(unique:true, length:5..15, validator{val, obj > if(val?.equalsIgnoreCase(obj.firstName)){ return false } })}}

Transient Properties

• Transient properties are never written to the database.• Every property in a domain class is persistent and required.• They don't have a corresponding column in the database.

Example

• class Company { BigDecimal cash BigDecimal receivables BigDecimal getNetWorth() { cash + receivables } static transients = ['netWorth'] }

Custom Mappingclass Person { String firstName String lastName Integer age static mapping = { id column:'person_id' firstName column:'person_first_name' lastName column:'person_last_name' age column:'person_age' version false }}

Relationships

• Every table should have at least one relationship to another table.• The types of relationships that Grails supports are:

• One- to- one• One -to -many• Many -to -one• Many -to- many

One-to-One Relationship

class Car { Engine engine}

class Engine { static belongsTo = [car:Car]}

One-to-many relationships

class Artist {

String name

static hasMany = [albums:Album]

}

Many-to-many relationships

class Book { static belongsTo = Author static hasMany = [authors:Author]}

class Author { static hasMany = [books:Book]}

Questions?

Hiten Pratap Singhhiten@nexthoughts.com

https://github.com/hitenpratap

top related