grails domain classes
TRANSCRIPT
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 [email protected]
https://github.com/hitenpratap