SlideShare uma empresa Scribd logo
1 de 38
Baixar para ler offline
Groovy e Grails
  @lucas_aquiles
Roteiro
Groovy                              Grails
1.   O que é Groovy?                1.   O framework
2.   GroovyShell / Groovy Console   2.   Estrutura de um projeto Grails
3.   O mundo de objetos do Groovy   3.   O Model
     a. sobrescrevendo operadores         a. constraints
     b. Mixings                                 i. validator
4.   Sintaxe nativa                            ii. valiando um objeto
     a. Classes, atributos                b. relacionamentos
     b. List, Maps, Ranges                      i. hasMany
      c. GStrings                              ii. belongsTo
     d. Clousures                             iii. hasOne
5.   Elvis Operator                       c. static mapping
                                          d. GORM
                                                i. finders
                                               ii. criteria
                                    4.   o Controller
                                          a. scaffolding
                                          b. actions, params, renders, redirect
                                    5.   Services
                                          a. integrando um service a um controller
                                    6.   Views
                                          a. gsp taglib
                                          b. templates
Groovy
O que é groovy?

  ● linguagem dinâmica que roda na VM do Java

  ● totalmente OO

  ● compatibilidade com as libs Java

  ● recursos do java5 são nativos
    ○ annotatios, collections, enum static import
Groovy
é a alegria do desenvolvedor java!
Groovy
Quem programa em java é um dev Groovy?
Groovy
um código java
Groovy
um código groovy
Groovy
um código groovy do jeito groovy
Groovy
Console interativo
  Groovy shell       Groovy Console
Groovy
Tudo é um objeto

            3.times{
              println "opa!"
            }
Groovy
● Sobrescrevendo operadores
  ○ plus
  ○ minus



● Mixing
  ○
Groovy
Sintaxe:
● Classes:

  ○ tipagem dinâmica

  ○ get e set são injetados dinamicamente

  ○ return e ; em métodos é opcional
Groovy
● Lists
  ○ def lista = [1,2,3]



● Maps
  ○ def map = ['key':'value']


● Ranges
  ○ def rang = 1...3
Groovy
Sintaxe
● Datas
  ○ def hoje = new Date()


● GStrings
  ○ permite interploar string s entre aspas duplas
    ■ "${var}"


● Closure
  ○ são blocos de código que podem ser executados e
    passados como parametros em funções
Groovy
Sintaxe

● Closure

  ○ possui uma variável interna chamada "it"


  def c = {
     println it
  }
Groovy
Sintaxe

● Elvis Operator
  ○ "?." colocado antes da chamada de um atributo da
    classe
Grails
O Framework
Grails
O framework
   ● CoC

  ● Baseado no projeto Rails e Django

  ● Fácil integração com bibliotecas java

  ● Encapsula frameworks como: spring ioc,
    hibernate, sitemash, scaffolding
Grails
E quando o erro vinha no java ....
Grails
Instalação e configuração

  ○ define $GRAILS_HOME/bin na variável de ambiente

     ○ Run!
              grails run-app
Grails
O primeiro projeto


DataSource.groovy
BuildConfig.groovy
Config.groovy
URLMapping.groovy




                 web.xml
Grails
Cadê meus DAOS?
 O primeiro projeto
meus xml?

 DataSource.groovy
 BuildConfig.groovy
 Config.groovy
 URLMapping.groovy




                  web.xml
Grails

O Model

  ○ representa uma classe persistente no projeto grails
  ○ são POGOS
  ○ não é necessário mapear com annotations ou
    arquivos xml


  grails create-domain-class br.com.infowaypi.MinhaClasse
Grails

O Model
  ○ constraints
    ■ valida a entrada de dados de um atributo da
       classe
    ■ nullable, blank, size, max, min
    ■ validator: recebe uma validação específica
Grails

O Model
  ○ validando objetos

     ●   hasErrors() - verifica se existe algum erro de
         validação na classe seguido do validate() e do
         save()

     ●   validate() - verifica as validações das
         constraints
Grails

O Model
    ○ relacionamentos
      ■ hasMany
                team hasMany players
        ■ belongsTo

                player belongsTo team
        ■ hasOne
                player hasOne team
em relacionamentos many to many é necessário que um dos lados deve
assumir o belongsTo
Grails

O Model
  ○ métodos injetados dinamicamente

    ● list()
    ● get(id)
    ● findAll()
    ● save()
    ● delete()
Grails

O Model
  ○ finders dinâmicos
Grails

O Model
  ● HQL: Hibernate Query Language

     ○ produto.findAll("from Produto where
       preco < :preco", [preco:1.99])


  ● max, min, sort, order
Grails

O Model
  ● Comparadores
    ○    Like
         ■   produto.findAllByNomeLike('%vegan')
    ○    LessThan
         ■   produto.findAllByPrecoLessThan(1.99)
    ○    IsNotNull
         ■   produto.findAllByCategoriaIsNotNull()
    ○    NotEqual
         ■   produto.findAllByDescricaoNotEqual('carne')
Grails

O Model
  ● Criteria
     ○   NomeDaClass.createCriteria()



  def resultado = criteria.list(){
      categoria{eq(2)}
  }
Grails

O Controller
  ○ Responsável por receber uma requisição e executar
    uma action


  ○   actions: são closures que vão receber requisições e executar uma
      ação



  ○   params: variável do tipo map que carrega informações com os
      parametros da requisição
Grails

O Controller
  ○   render: responsável por enviar um tipo de resposta da requisição,
      ex: uma view, um template, um texto


      ■   view, template, model, text, var


  ○   redirect: redireciona a requisição de uma action
      ■   action, cotroller, uri, params
Grails

O Controller
  ○   scaffolding: permite montar uma estrutura de CRUD para uma
      classe de domínio


      ■   def scaffold = Produto;




grails create-controller
Grails

Services

  ○   services permitem centralizar uma lógica de negócio comum na
      aplição


  ○   um service é injetado dinamicamente em um controller seguindo a
      convenção: nameService




      grails create-service serviceName
Grails

A View
  ● arquivos *.gsp
  ● baseado em taglibs semelhante as do jsp
         ■ evita misturar código de programação com
           marcação

         ■ <%= %>
Grails

A View
  ● loops
      ○    <g:each in="${collectionName}" var="item"> </g:each>


  ○   if / else
      ■    <g:if test="${item > 2}"> </g:if><g:else></g:else>
Grails

A View
  ● templates
         templates por padrão começam com _ (underscore) antes
  do nome do arquivo


     ex: _templateName.gsp

     <g:render template="templateName" var="${collection}" />

Mais conteúdo relacionado

Mais procurados

Grails parte 1 - introdução
Grails   parte 1 - introduçãoGrails   parte 1 - introdução
Grails parte 1 - introduçãoJosino Rodrigues
 
TDC2015 Porto Alegre - Interfaces ricas com Rails e React.JS
TDC2015  Porto Alegre - Interfaces ricas com Rails e React.JSTDC2015  Porto Alegre - Interfaces ricas com Rails e React.JS
TDC2015 Porto Alegre - Interfaces ricas com Rails e React.JSRodrigo Urubatan
 
Interfaces ricas com Rails e React.JS @ Rubyconf 2015
Interfaces ricas com Rails e React.JS @ Rubyconf 2015Interfaces ricas com Rails e React.JS @ Rubyconf 2015
Interfaces ricas com Rails e React.JS @ Rubyconf 2015Rodrigo Urubatan
 
Começando com Zend Framework 2
Começando com Zend Framework 2Começando com Zend Framework 2
Começando com Zend Framework 2Cezar Souza
 
ZF2 básico : Desenvolvendo um Blog com o Zend Framework 2
ZF2 básico : Desenvolvendo um Blog com o Zend Framework 2ZF2 básico : Desenvolvendo um Blog com o Zend Framework 2
ZF2 básico : Desenvolvendo um Blog com o Zend Framework 2Cezar Souza
 
Esta começando a programar para a web? Então começe com Rails
Esta começando a programar para a web? Então começe com RailsEsta começando a programar para a web? Então começe com Rails
Esta começando a programar para a web? Então começe com Railsismaelstahelin
 
Palestra Desenvolvimento Ágil para Web com ROR UVA
Palestra Desenvolvimento Ágil para Web com ROR UVAPalestra Desenvolvimento Ágil para Web com ROR UVA
Palestra Desenvolvimento Ágil para Web com ROR UVAThiago Cifani
 
Desenvolvendo com Dojo Toolkit
Desenvolvendo com Dojo ToolkitDesenvolvendo com Dojo Toolkit
Desenvolvendo com Dojo ToolkitFlávio Lisboa
 
Testes com javascript
Testes com javascriptTestes com javascript
Testes com javascriptLaís Lima
 
Integração Contínua com Cruise Control e phpUnderControl
Integração Contínua com Cruise Control e phpUnderControlIntegração Contínua com Cruise Control e phpUnderControl
Integração Contínua com Cruise Control e phpUnderControlDiego Tremper
 
Integração Contínua com CruiseControl e phpUnderControl
Integração Contínua com CruiseControl e phpUnderControlIntegração Contínua com CruiseControl e phpUnderControl
Integração Contínua com CruiseControl e phpUnderControlDiego Tremper
 

Mais procurados (20)

Grails parte 1 - introdução
Grails   parte 1 - introduçãoGrails   parte 1 - introdução
Grails parte 1 - introdução
 
Grails
GrailsGrails
Grails
 
Minicurso groovy grails
Minicurso groovy grailsMinicurso groovy grails
Minicurso groovy grails
 
TDC2015 Porto Alegre - Interfaces ricas com Rails e React.JS
TDC2015  Porto Alegre - Interfaces ricas com Rails e React.JSTDC2015  Porto Alegre - Interfaces ricas com Rails e React.JS
TDC2015 Porto Alegre - Interfaces ricas com Rails e React.JS
 
Interfaces ricas com Rails e React.JS @ Rubyconf 2015
Interfaces ricas com Rails e React.JS @ Rubyconf 2015Interfaces ricas com Rails e React.JS @ Rubyconf 2015
Interfaces ricas com Rails e React.JS @ Rubyconf 2015
 
Mean Stack
Mean StackMean Stack
Mean Stack
 
Curso de ReactJS
Curso de ReactJSCurso de ReactJS
Curso de ReactJS
 
Começando com Zend Framework 2
Começando com Zend Framework 2Começando com Zend Framework 2
Começando com Zend Framework 2
 
Ruby On Rails Regis
Ruby On Rails RegisRuby On Rails Regis
Ruby On Rails Regis
 
ZF2 básico : Desenvolvendo um Blog com o Zend Framework 2
ZF2 básico : Desenvolvendo um Blog com o Zend Framework 2ZF2 básico : Desenvolvendo um Blog com o Zend Framework 2
ZF2 básico : Desenvolvendo um Blog com o Zend Framework 2
 
Esta começando a programar para a web? Então começe com Rails
Esta começando a programar para a web? Então começe com RailsEsta começando a programar para a web? Então começe com Rails
Esta começando a programar para a web? Então começe com Rails
 
Maven em 10 minutos
Maven em 10 minutosMaven em 10 minutos
Maven em 10 minutos
 
Palestra Desenvolvimento Ágil para Web com ROR UVA
Palestra Desenvolvimento Ágil para Web com ROR UVAPalestra Desenvolvimento Ágil para Web com ROR UVA
Palestra Desenvolvimento Ágil para Web com ROR UVA
 
Grails
GrailsGrails
Grails
 
Desenvolvendo com Dojo Toolkit
Desenvolvendo com Dojo ToolkitDesenvolvendo com Dojo Toolkit
Desenvolvendo com Dojo Toolkit
 
Testes com javascript
Testes com javascriptTestes com javascript
Testes com javascript
 
Precisamos falar sobre Gradle
Precisamos falar sobre GradlePrecisamos falar sobre Gradle
Precisamos falar sobre Gradle
 
Integração Contínua com Cruise Control e phpUnderControl
Integração Contínua com Cruise Control e phpUnderControlIntegração Contínua com Cruise Control e phpUnderControl
Integração Contínua com Cruise Control e phpUnderControl
 
Integração Contínua com CruiseControl e phpUnderControl
Integração Contínua com CruiseControl e phpUnderControlIntegração Contínua com CruiseControl e phpUnderControl
Integração Contínua com CruiseControl e phpUnderControl
 
Jclouds jug vale
Jclouds jug valeJclouds jug vale
Jclouds jug vale
 

Destaque

Destaque (7)

Grails
GrailsGrails
Grails
 
Grails 101
Grails 101Grails 101
Grails 101
 
Groovy & grails
Groovy & grailsGroovy & grails
Groovy & grails
 
JavaEE nos trilhos
JavaEE nos trilhosJavaEE nos trilhos
JavaEE nos trilhos
 
Produtividade em Java com Grails
Produtividade em Java com GrailsProdutividade em Java com Grails
Produtividade em Java com Grails
 
Desenvolvimento Ágil com Grails.
Desenvolvimento Ágil com Grails.Desenvolvimento Ágil com Grails.
Desenvolvimento Ágil com Grails.
 
Grails Simple Login
Grails Simple LoginGrails Simple Login
Grails Simple Login
 

Semelhante a Oficina groovy grails - infoway

Overview de Grails: O Java em alta produtividade
Overview de Grails: O Java em alta produtividadeOverview de Grails: O Java em alta produtividade
Overview de Grails: O Java em alta produtividadeCleórbete Santos
 
C Sharp - Gerenciamento de Memória
C Sharp - Gerenciamento de MemóriaC Sharp - Gerenciamento de Memória
C Sharp - Gerenciamento de MemóriaCDS
 
Minicurso javascript
Minicurso javascriptMinicurso javascript
Minicurso javascriptLucas Aquiles
 
Gerenciamento de Memória
Gerenciamento de MemóriaGerenciamento de Memória
Gerenciamento de MemóriaCDS
 
POO2-Pre-32-PadroesProjetos_.pdf
POO2-Pre-32-PadroesProjetos_.pdfPOO2-Pre-32-PadroesProjetos_.pdf
POO2-Pre-32-PadroesProjetos_.pdfAndreCosta502039
 
NodeJS Under the Hood - Concurrency and Multithreading
NodeJS Under the Hood - Concurrency and MultithreadingNodeJS Under the Hood - Concurrency and Multithreading
NodeJS Under the Hood - Concurrency and MultithreadingRhuan Karlus Silva
 
TDC2012: Apps RIA com Sencha GXT 3 e GWT
TDC2012: Apps RIA com Sencha GXT 3 e GWTTDC2012: Apps RIA com Sencha GXT 3 e GWT
TDC2012: Apps RIA com Sencha GXT 3 e GWTLoiane Groner
 
Django e MongoDB - Python Brasil 7
Django e MongoDB - Python Brasil 7Django e MongoDB - Python Brasil 7
Django e MongoDB - Python Brasil 7Christiano Anderson
 
JS FUNDAMENTOS - AULA 01.pdf
JS FUNDAMENTOS - AULA 01.pdfJS FUNDAMENTOS - AULA 01.pdf
JS FUNDAMENTOS - AULA 01.pdfAntonioSvio1
 
JavaScript Firme: Módulos com RequireJS e BDD com Jasmine
JavaScript Firme: Módulos com RequireJS e BDD com JasmineJavaScript Firme: Módulos com RequireJS e BDD com Jasmine
JavaScript Firme: Módulos com RequireJS e BDD com JasmineAndré Willik Valenti
 
Introdução a linguagem Python
Introdução a linguagem PythonIntrodução a linguagem Python
Introdução a linguagem PythonLuciano Ramalho
 
Django - Desenvolvimento web ágil com Python
Django - Desenvolvimento web ágil com PythonDjango - Desenvolvimento web ágil com Python
Django - Desenvolvimento web ágil com PythonIgor Sobreira
 
Groovy: graxa nas engrenagens de Java
Groovy: graxa nas engrenagens de JavaGroovy: graxa nas engrenagens de Java
Groovy: graxa nas engrenagens de JavaMarcos Pereira
 
performance em jQuery apps
performance em jQuery appsperformance em jQuery apps
performance em jQuery appsDavidson Fellipe
 

Semelhante a Oficina groovy grails - infoway (20)

Overview de Grails: O Java em alta produtividade
Overview de Grails: O Java em alta produtividadeOverview de Grails: O Java em alta produtividade
Overview de Grails: O Java em alta produtividade
 
Programando em Go
Programando em GoProgramando em Go
Programando em Go
 
Jsummit 2014
Jsummit 2014Jsummit 2014
Jsummit 2014
 
C Sharp - Gerenciamento de Memória
C Sharp - Gerenciamento de MemóriaC Sharp - Gerenciamento de Memória
C Sharp - Gerenciamento de Memória
 
Minicurso javascript
Minicurso javascriptMinicurso javascript
Minicurso javascript
 
Groovy stack
Groovy stackGroovy stack
Groovy stack
 
Gerenciamento de Memória
Gerenciamento de MemóriaGerenciamento de Memória
Gerenciamento de Memória
 
POO2-Pre-32-PadroesProjetos_.pdf
POO2-Pre-32-PadroesProjetos_.pdfPOO2-Pre-32-PadroesProjetos_.pdf
POO2-Pre-32-PadroesProjetos_.pdf
 
NodeJS Under the Hood - Concurrency and Multithreading
NodeJS Under the Hood - Concurrency and MultithreadingNodeJS Under the Hood - Concurrency and Multithreading
NodeJS Under the Hood - Concurrency and Multithreading
 
Grails
GrailsGrails
Grails
 
TDC2012: Apps RIA com Sencha GXT 3 e GWT
TDC2012: Apps RIA com Sencha GXT 3 e GWTTDC2012: Apps RIA com Sencha GXT 3 e GWT
TDC2012: Apps RIA com Sencha GXT 3 e GWT
 
Django e MongoDB - Python Brasil 7
Django e MongoDB - Python Brasil 7Django e MongoDB - Python Brasil 7
Django e MongoDB - Python Brasil 7
 
JS FUNDAMENTOS - AULA 01.pdf
JS FUNDAMENTOS - AULA 01.pdfJS FUNDAMENTOS - AULA 01.pdf
JS FUNDAMENTOS - AULA 01.pdf
 
JavaScript Firme: Módulos com RequireJS e BDD com Jasmine
JavaScript Firme: Módulos com RequireJS e BDD com JasmineJavaScript Firme: Módulos com RequireJS e BDD com Jasmine
JavaScript Firme: Módulos com RequireJS e BDD com Jasmine
 
Pgquarrel
PgquarrelPgquarrel
Pgquarrel
 
Introdução a linguagem Python
Introdução a linguagem PythonIntrodução a linguagem Python
Introdução a linguagem Python
 
Django - Desenvolvimento web ágil com Python
Django - Desenvolvimento web ágil com PythonDjango - Desenvolvimento web ágil com Python
Django - Desenvolvimento web ágil com Python
 
Groovy: graxa nas engrenagens de Java
Groovy: graxa nas engrenagens de JavaGroovy: graxa nas engrenagens de Java
Groovy: graxa nas engrenagens de Java
 
Design patterns de uma vez por todas
Design patterns de uma vez por todasDesign patterns de uma vez por todas
Design patterns de uma vez por todas
 
performance em jQuery apps
performance em jQuery appsperformance em jQuery apps
performance em jQuery apps
 

Mais de Lucas Aquiles

Best practices in pair programming
Best practices in pair programmingBest practices in pair programming
Best practices in pair programmingLucas Aquiles
 
Pocket Talk - Onde vivem os vegans?
Pocket Talk - Onde vivem os vegans?Pocket Talk - Onde vivem os vegans?
Pocket Talk - Onde vivem os vegans?Lucas Aquiles
 
Pocket Talk - Mob programming
Pocket Talk - Mob programmingPocket Talk - Mob programming
Pocket Talk - Mob programmingLucas Aquiles
 
google maps api - v1
 google maps api - v1 google maps api - v1
google maps api - v1Lucas Aquiles
 
Criando app mobile com Google Android - Software Freedom Day 2015
Criando app mobile com Google Android - Software Freedom Day 2015 Criando app mobile com Google Android - Software Freedom Day 2015
Criando app mobile com Google Android - Software Freedom Day 2015 Lucas Aquiles
 
Desenvolvimento de aplicações para a plataforma google android
Desenvolvimento de aplicações para a plataforma google androidDesenvolvimento de aplicações para a plataforma google android
Desenvolvimento de aplicações para a plataforma google androidLucas Aquiles
 

Mais de Lucas Aquiles (11)

Open talk micronaut
Open talk   micronautOpen talk   micronaut
Open talk micronaut
 
Best practices in pair programming
Best practices in pair programmingBest practices in pair programming
Best practices in pair programming
 
Pocket Talk - Onde vivem os vegans?
Pocket Talk - Onde vivem os vegans?Pocket Talk - Onde vivem os vegans?
Pocket Talk - Onde vivem os vegans?
 
Pocket Talk - Mob programming
Pocket Talk - Mob programmingPocket Talk - Mob programming
Pocket Talk - Mob programming
 
google maps api - v1
 google maps api - v1 google maps api - v1
google maps api - v1
 
Criando app mobile com Google Android - Software Freedom Day 2015
Criando app mobile com Google Android - Software Freedom Day 2015 Criando app mobile com Google Android - Software Freedom Day 2015
Criando app mobile com Google Android - Software Freedom Day 2015
 
Phonegap
PhonegapPhonegap
Phonegap
 
Groovy
GroovyGroovy
Groovy
 
Groovy
GroovyGroovy
Groovy
 
Desenvolvimento de aplicações para a plataforma google android
Desenvolvimento de aplicações para a plataforma google androidDesenvolvimento de aplicações para a plataforma google android
Desenvolvimento de aplicações para a plataforma google android
 
Orm android
Orm androidOrm android
Orm android
 

Oficina groovy grails - infoway

  • 1. Groovy e Grails @lucas_aquiles
  • 2. Roteiro Groovy Grails 1. O que é Groovy? 1. O framework 2. GroovyShell / Groovy Console 2. Estrutura de um projeto Grails 3. O mundo de objetos do Groovy 3. O Model a. sobrescrevendo operadores a. constraints b. Mixings i. validator 4. Sintaxe nativa ii. valiando um objeto a. Classes, atributos b. relacionamentos b. List, Maps, Ranges i. hasMany c. GStrings ii. belongsTo d. Clousures iii. hasOne 5. Elvis Operator c. static mapping d. GORM i. finders ii. criteria 4. o Controller a. scaffolding b. actions, params, renders, redirect 5. Services a. integrando um service a um controller 6. Views a. gsp taglib b. templates
  • 3. Groovy O que é groovy? ● linguagem dinâmica que roda na VM do Java ● totalmente OO ● compatibilidade com as libs Java ● recursos do java5 são nativos ○ annotatios, collections, enum static import
  • 4. Groovy é a alegria do desenvolvedor java!
  • 5. Groovy Quem programa em java é um dev Groovy?
  • 8. Groovy um código groovy do jeito groovy
  • 9. Groovy Console interativo Groovy shell Groovy Console
  • 10. Groovy Tudo é um objeto 3.times{ println "opa!" }
  • 11. Groovy ● Sobrescrevendo operadores ○ plus ○ minus ● Mixing ○
  • 12. Groovy Sintaxe: ● Classes: ○ tipagem dinâmica ○ get e set são injetados dinamicamente ○ return e ; em métodos é opcional
  • 13. Groovy ● Lists ○ def lista = [1,2,3] ● Maps ○ def map = ['key':'value'] ● Ranges ○ def rang = 1...3
  • 14. Groovy Sintaxe ● Datas ○ def hoje = new Date() ● GStrings ○ permite interploar string s entre aspas duplas ■ "${var}" ● Closure ○ são blocos de código que podem ser executados e passados como parametros em funções
  • 15. Groovy Sintaxe ● Closure ○ possui uma variável interna chamada "it" def c = { println it }
  • 16. Groovy Sintaxe ● Elvis Operator ○ "?." colocado antes da chamada de um atributo da classe
  • 18. Grails O framework ● CoC ● Baseado no projeto Rails e Django ● Fácil integração com bibliotecas java ● Encapsula frameworks como: spring ioc, hibernate, sitemash, scaffolding
  • 19. Grails E quando o erro vinha no java ....
  • 20. Grails Instalação e configuração ○ define $GRAILS_HOME/bin na variável de ambiente ○ Run! grails run-app
  • 22. Grails Cadê meus DAOS? O primeiro projeto meus xml? DataSource.groovy BuildConfig.groovy Config.groovy URLMapping.groovy web.xml
  • 23. Grails O Model ○ representa uma classe persistente no projeto grails ○ são POGOS ○ não é necessário mapear com annotations ou arquivos xml grails create-domain-class br.com.infowaypi.MinhaClasse
  • 24. Grails O Model ○ constraints ■ valida a entrada de dados de um atributo da classe ■ nullable, blank, size, max, min ■ validator: recebe uma validação específica
  • 25. Grails O Model ○ validando objetos ● hasErrors() - verifica se existe algum erro de validação na classe seguido do validate() e do save() ● validate() - verifica as validações das constraints
  • 26. Grails O Model ○ relacionamentos ■ hasMany team hasMany players ■ belongsTo player belongsTo team ■ hasOne player hasOne team em relacionamentos many to many é necessário que um dos lados deve assumir o belongsTo
  • 27. Grails O Model ○ métodos injetados dinamicamente ● list() ● get(id) ● findAll() ● save() ● delete()
  • 28. Grails O Model ○ finders dinâmicos
  • 29. Grails O Model ● HQL: Hibernate Query Language ○ produto.findAll("from Produto where preco < :preco", [preco:1.99]) ● max, min, sort, order
  • 30. Grails O Model ● Comparadores ○ Like ■ produto.findAllByNomeLike('%vegan') ○ LessThan ■ produto.findAllByPrecoLessThan(1.99) ○ IsNotNull ■ produto.findAllByCategoriaIsNotNull() ○ NotEqual ■ produto.findAllByDescricaoNotEqual('carne')
  • 31. Grails O Model ● Criteria ○ NomeDaClass.createCriteria() def resultado = criteria.list(){ categoria{eq(2)} }
  • 32. Grails O Controller ○ Responsável por receber uma requisição e executar uma action ○ actions: são closures que vão receber requisições e executar uma ação ○ params: variável do tipo map que carrega informações com os parametros da requisição
  • 33. Grails O Controller ○ render: responsável por enviar um tipo de resposta da requisição, ex: uma view, um template, um texto ■ view, template, model, text, var ○ redirect: redireciona a requisição de uma action ■ action, cotroller, uri, params
  • 34. Grails O Controller ○ scaffolding: permite montar uma estrutura de CRUD para uma classe de domínio ■ def scaffold = Produto; grails create-controller
  • 35. Grails Services ○ services permitem centralizar uma lógica de negócio comum na aplição ○ um service é injetado dinamicamente em um controller seguindo a convenção: nameService grails create-service serviceName
  • 36. Grails A View ● arquivos *.gsp ● baseado em taglibs semelhante as do jsp ■ evita misturar código de programação com marcação ■ <%= %>
  • 37. Grails A View ● loops ○ <g:each in="${collectionName}" var="item"> </g:each> ○ if / else ■ <g:if test="${item > 2}"> </g:if><g:else></g:else>
  • 38. Grails A View ● templates templates por padrão começam com _ (underscore) antes do nome do arquivo ex: _templateName.gsp <g:render template="templateName" var="${collection}" />