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}" />

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 alegriado desenvolvedor java!
  • 5.
    Groovy Quem programa emjava é um dev Groovy?
  • 6.
  • 7.
  • 8.
    Groovy um código groovydo jeito groovy
  • 9.
    Groovy Console interativo Groovy shell Groovy Console
  • 10.
    Groovy Tudo é umobjeto 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
  • 17.
  • 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 oerro vinha no java ....
  • 20.
    Grails Instalação e configuração ○ define $GRAILS_HOME/bin na variável de ambiente ○ Run! grails run-app
  • 21.
  • 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}" />