SlideShare uma empresa Scribd logo
Introdução ao Grails
Conceitos básicos do Grails Framework e ZK



             @Lucas_Aquiles


                  @lucas_aquiles
Roteiro

O que é Grails?
Primeiro Projeto
O M do MVC
Persistência – GORM
Relacionamentos
              @lucas_aquiles
O que é Grails
Problemas comuns
  Quando você começa um novo projeto você tem
   que configurar tudo:
    Construir todos os componentes
    Configurar arquivos xml
    Mapear com o ORM manualmente
    É dificil escrever uma view limpa
    Tag libs eram sempre dolorosas


                          @lucas_aquiles
E quando algum problema
aparecia...




             @lucas_aquiles
O que é Grails



                     =

                         +


                 @lucas_aquiles
O que é Grails
Framework baseada no MVC
Segue boas praticas popularizadas pelo Rails
  CoC
  DRY
Construído sobre gigantes
  S p r i n g : IoC, DI, Spring MVC, Spring WebFlow
  H i b e r n a t e :ORM

                           @lucas_aquiles
O que é Grails
Instalação e Configuração
  Download da ultima versão do grails
    grails.org/Downloads
  Descompacte em algum lugar
  Crie o GRAILS_HOME
  Adicione $GRAILS_HOME/bin no PATH


  Pronto!
                           @lucas_aquiles
O que Grails

Cadê os arquivos de config?
Cadê meus DAOs?
 E os mapeamentos?
Sem banco pra configurar?
Sem servlet container ou
App server pra instalar?




                              @lucas_aquiles
O que é Grails                     DataSource.groovy

                                   Config.groovy

                                   Bootstrap.groovy

                                   URLMapping.groovy




                                  web.xml


                 @lucas_aquiles
O M do MVC
Toda entidade persistente fica aqui
São mapeadas de maneira transparente
Model são configurados como POGOs
Cada classe de domínio corresponde a uma
 tabela no banco de dados relacional


comando: grails create-domain-class P erson
                       @lucas_aquiles
O M do MVC
É uma classe Groovy normal
Constraints
  Valida a entrada dos campos
  Você pode criar sua própria constraints
  blank, creditcard, email, url, nullable, unique




                            @lucas_aquiles
Persistência - GORM
Utiliza o Hibernate por baixo dos panos
Para cada classe de domínio é injetado os
 métodos do GORM
  produto.save(), P roduto.list(), P roduto.get(id)
  produto.count(), produto.delete(), etc...

Buscadores dinâmicos
  P roduto.findB yP reco(2.0)

                               @lucas_aquiles
Persistência - GORM
Buscadores dinâmicos




FindBy*, FindAllBy*
FindWhere*, findAllWhere*
                      @lucas_aquiles
Persistência - GORM
HQL – Hibernate Query Language
  Produto.find(“from Produto where preco = :preco
    and nome like :nome”, [preco:2.0, nome:'nome do
    produto'])
  Parâmetros:
    max, sort, order




                       @lucas_aquiles
Persistência - GORM
Comparadores
 Like
    Produto.findByNomeLike(“%test”)
 LessThan
    Produto.findByPrecoLessThan(2.0)
 IsNotNull
    Produto.findByCategoriaIsNotNull()
  NotEqual

                         @lucas_aquiles
Persistência - GORM
Suporte a criteria API
  def criteria = createCriteria();
  def resultado = criteria.list(){
         categoria{eq(2)}
        order “nome”
    }




                          @lucas_aquiles
Relacionamentos
Permite 4 tipos de relacionamentos
  One-to-one, one-to-many, many-to-many, many-to-
   one
  OneToMany
    Player hasOne Team
  HasMany
    Team hasMany Players
       Métodos dinâmicos:


                            @lucas_aquiles
Relacionamentos
Em relacionamentos manyT oM any um dos lados
 da relação deve definir o belongsT o
Mapping
  I nsertable
     Inserida dinamicamente quando uma instancia for salva
  C ascade
     Configura ações em cascada entre a associação
  U pdatable
                         @lucas_aquiles
O C do MVC
Toda regra de negócio é chamada a partir daqui
A c t i o n s : são clousures que vão receber
  requisições e fazer alguma coisa
H ttpServletR equest e H ttpServletR esponse
p a r a m s : váriavel,map, injetado
  dinamicamente em todo controller que contêm
  os parametros da requisição

                        @lucas_aquiles
O C do MVC
R e n d e r : renderiza uma resposta
  Uma view, um texto, um template
  Parâmetros
    view
    template
    model
    text
    var


                      @lucas_aquiles
O C do MVC
R e d i r e c t : redireciona para algum lugar
  Parâmetros:
     action
     controller
     URI
     params




                      @lucas_aquiles
O C do MVC
A variável scaffolding
  Permite criar a estrutura CRUD dinâmica para uma
   classe de domínio
  def scaffolding = P roduto


  *Scaffolding não é a solução final!




                           @lucas_aquiles
Service
Centraliza a regra de negócio
Compartilha a mesma regra de negócio com a
 classe de domínio
É injetado automaticamente no controller pelo
 Spring
C omando: grails create-service ServiceN ame



                         @lucas_aquiles
Service
Transactions
Essencial para manter a integridade do banco
 de dados seguindo os conceitos de ACID:
  Atomicidade
  Consistência
  Isolação
  Durabilidade

                    @lucas_aquiles
O V do MVC
Comando grails-generate-views D omainN ame
Arquivos .gsp
Baseados em taglibs
  Evitam misturar codigo de programação com código
   de marcação
  Semelhante ao JSP
     <%= produto.nome %>


                       @lucas_aquiles
O V do MVC
Loops
 Each
    Parâmetros
           in: lista que será iterada
           var: variável temporária, padrão it

 If/else
    Parâmetros
           test: recebe a condição a ser testada

 Set
                                  @lucas_aquiles
Scaffolding
Comando: grails generate-all D omainN ame
  Cria toda o controller e views com a estrutura de
    CRUD
  Ótimo para prototipação
  Scaffolding dinâmico: injetado no controller, recebe
   como valor a classe de domínio




                        @lucas_aquiles
TDD – Test Driven Development
Integrado com o jUnit
Toda classe de teste extende GroovyTestCase
Permite fazer testes:
  Unitários
  De integração
  Funcionais
Semelhante aos testes em Java
                        @lucas_aquiles
TDD
UnitTest != IntegrationTest
  Testes unitários verificam um objeto isolado, não há
    necessidade de conexão com banco, web sercce
    ou outro compomente.
  Testes de integração integrar um objeto a ser
    testado com componentes externos




                       @lucas_aquiles
TDD
mockDomain
 Herdado de GrailsUnitTestCase
 Injeta na classe de domínio que a classe deve ter
   Validate(), save(), delete()




                          @lucas_aquiles
TDD
Testes em Controllers
  mockP arams: funciona como os params do controller
  controller: identifica um controller
  R edirectA rgs: possui os parametros:
     A ction, controller, model
  M ockR equest: simula uma instancia para
   HttpServletRequest
  M ockSession: simula uma HttpSession
                                  @lucas_aquiles
Plugins
grails install-plugin [plugin-name]
grails install-plugin [local-do-plugin]


grails create-plugin




                         @lucas_aquiles
Duvidas?




           @lucas_aquiles

Mais conteúdo relacionado

ODP
Produtividade na web_com_groovy_e_grails_pt2
ODP
Groovy grails
PDF
Oficina groovy grails - infoway
PDF
React + Flux (Alt)
PPTX
Grails
PDF
Precisamos falar sobre Gradle
PPTX
Introdução a Grails: Um framework veloz e poderoso
PDF
Typescript: the Fun Parts (BrazilJS 2017)
Produtividade na web_com_groovy_e_grails_pt2
Groovy grails
Oficina groovy grails - infoway
React + Flux (Alt)
Grails
Precisamos falar sobre Gradle
Introdução a Grails: Um framework veloz e poderoso
Typescript: the Fun Parts (BrazilJS 2017)

Mais procurados (20)

PDF
Introdução ao vraptor
PDF
Grails parte 1 - introdução
PDF
Curso de Grails
PDF
React Native na globo.com
PPTX
Treze ferramentas/frameworks para desenvolvimento android
PDF
TDC2015 Porto Alegre - Interfaces ricas com Rails e React.JS
PDF
Introduzindo StimulusJS: o novo Framework JavaScript para Ruby On Rails.
PDF
React - Compartilhando estado entre componentes
PDF
Interfaces ricas com Rails e React.JS @ Rubyconf 2015
PDF
TDC2016POA | Trilha Banco de Dados - Firebase e Realm, o NoSQL ganha força no...
PDF
Os 10 maus habitos dos desenvolvedores jsf (JustJava e CCT)
PPT
Recursos de Escalabilidade e Alta Disponibilidade Para Aplicações Web
PDF
Minicurso sobre AndroidAnnotations, GreenDAO, EventBus e Crouton
PPTX
JS Experience 2017 - React + Redux. Pensando em Redux
PDF
React - Introdução
PDF
Java Web 2 - Ferramentas e configuração
PDF
Desenvolvimento Front end (AngularJS e Bootstrap)
PPT
Descomplicando a montagem de ambientes de Testes com Docker - TDC 2018 - São ...
PDF
Minha aplicação Java vai pra nuvem. E agora?
Introdução ao vraptor
Grails parte 1 - introdução
Curso de Grails
React Native na globo.com
Treze ferramentas/frameworks para desenvolvimento android
TDC2015 Porto Alegre - Interfaces ricas com Rails e React.JS
Introduzindo StimulusJS: o novo Framework JavaScript para Ruby On Rails.
React - Compartilhando estado entre componentes
Interfaces ricas com Rails e React.JS @ Rubyconf 2015
TDC2016POA | Trilha Banco de Dados - Firebase e Realm, o NoSQL ganha força no...
Os 10 maus habitos dos desenvolvedores jsf (JustJava e CCT)
Recursos de Escalabilidade e Alta Disponibilidade Para Aplicações Web
Minicurso sobre AndroidAnnotations, GreenDAO, EventBus e Crouton
JS Experience 2017 - React + Redux. Pensando em Redux
React - Introdução
Java Web 2 - Ferramentas e configuração
Desenvolvimento Front end (AngularJS e Bootstrap)
Descomplicando a montagem de ambientes de Testes com Docker - TDC 2018 - São ...
Minha aplicação Java vai pra nuvem. E agora?
Anúncio

Destaque (7)

PDF
15º encontro de gerenciamento de projetos #15 egp - Metodologia ágil a favo...
PDF
Minicurso javascript
PDF
Drupal: Muito mais que um CMS
PPTX
Criando app mobile com Google Android - Software Freedom Day 2015
PPTX
google maps api - v1
ODP
Testing Grails Applications With Selenium Rc
PDF
Phonegap
15º encontro de gerenciamento de projetos #15 egp - Metodologia ágil a favo...
Minicurso javascript
Drupal: Muito mais que um CMS
Criando app mobile com Google Android - Software Freedom Day 2015
google maps api - v1
Testing Grails Applications With Selenium Rc
Phonegap
Anúncio

Semelhante a Grails (20)

PDF
Palestra - Symfony Framework MVC PHP 5
PDF
Curso de Ruby on Rails - Aula 01
PDF
Introdução Play framework
PDF
ASP.NET MVC
PDF
ASP.NET MVC - Alexandre Tarifa
PPTX
Desenvolvimento Ágil com Grails.
PPS
Lampada Php Conference Brasil 2007 Palestra
PDF
Curso de Verão - Aula 03 - Introdução ao CI-CD e Infraestrutura como Código
PDF
ApresentaçãO Mvc
PDF
Apresentação M V C
PDF
Cloudformation
PPTX
Campus Party 2014 - Desenvolvimento Web com ASP.NET
PDF
Orientação a objetos da teoria a prática em java
PPTX
Criando APIs com Node e TypeScript
PDF
PPTX
Indo alem do_mvc_node_js
PDF
Orientacao A Objetos Da Teoria A Pratica Em Java
PDF
Orientação a Objetos - Da Teoria a Pratica
PDF
PPTX
[CLPE] Novidades do Asp.net mvc 2
Palestra - Symfony Framework MVC PHP 5
Curso de Ruby on Rails - Aula 01
Introdução Play framework
ASP.NET MVC
ASP.NET MVC - Alexandre Tarifa
Desenvolvimento Ágil com Grails.
Lampada Php Conference Brasil 2007 Palestra
Curso de Verão - Aula 03 - Introdução ao CI-CD e Infraestrutura como Código
ApresentaçãO Mvc
Apresentação M V C
Cloudformation
Campus Party 2014 - Desenvolvimento Web com ASP.NET
Orientação a objetos da teoria a prática em java
Criando APIs com Node e TypeScript
Indo alem do_mvc_node_js
Orientacao A Objetos Da Teoria A Pratica Em Java
Orientação a Objetos - Da Teoria a Pratica
[CLPE] Novidades do Asp.net mvc 2

Mais de Lucas Aquiles (8)

PDF
Open talk micronaut
PPTX
Best practices in pair programming
PPTX
Pocket Talk - Onde vivem os vegans?
PPTX
Pocket Talk - Mob programming
ODP
ODP
PPT
Desenvolvimento de aplicações para a plataforma google android
ODP
Orm android
Open talk micronaut
Best practices in pair programming
Pocket Talk - Onde vivem os vegans?
Pocket Talk - Mob programming
Desenvolvimento de aplicações para a plataforma google android
Orm android

Último (19)

PDF
Aula04-Academia Heri- Tecnologia Geral 2025
PDF
Processos na gestão de transportes, TM100 Col18
PDF
Otimizador de planejamento e execução no SAP Transportation Management, TM120...
PPTX
Como-se-implementa-um-softwareeeeeeeeeeeeeeeeeeeeeeeee.pptx
PDF
20250805_ServiceNow e a Arquitetura Orientada a Serviços (SOA) A Base para Ap...
PDF
COBITxITIL-Entenda as diferença em uso governança TI
PPTX
Gestao-de-Bugs-em-Software-Introducao.pptxxxxxxxx
PDF
Custos e liquidação no SAP Transportation Management, TM130 Col18
PDF
Gestão de transportes básica no SAP S/4HANA, S4611 Col20
PPTX
Aula 18 - Manipulacao De Arquivos python
PPTX
Programação - Linguagem C - Variáveis, Palavras Reservadas, tipos de dados, c...
PDF
Fundamentos de gerenciamento de ordens e planejamento no SAP TransportationMa...
PDF
Fullfilment AI - Forum ecommerce 2025 // Distrito e Total Express
PPTX
BANCO DE DADOS - AULAS INICIAIS-sgbd.pptx
PPTX
Informática Aplicada Informática Aplicada Plano de Ensino - estudo de caso NR...
PDF
Mergulho profundo técnico para gestão de transportes no SAP S/4HANA, S4TM6 Col14
PPTX
Aula16ManipulaçãoDadosssssssssssssssssssssssssssss
PDF
Apple Pippin Uma breve introdução. - David Glotz
PDF
Custos e faturamento no SAP S/4HANA Transportation Management, S4TM3 Col26
Aula04-Academia Heri- Tecnologia Geral 2025
Processos na gestão de transportes, TM100 Col18
Otimizador de planejamento e execução no SAP Transportation Management, TM120...
Como-se-implementa-um-softwareeeeeeeeeeeeeeeeeeeeeeeee.pptx
20250805_ServiceNow e a Arquitetura Orientada a Serviços (SOA) A Base para Ap...
COBITxITIL-Entenda as diferença em uso governança TI
Gestao-de-Bugs-em-Software-Introducao.pptxxxxxxxx
Custos e liquidação no SAP Transportation Management, TM130 Col18
Gestão de transportes básica no SAP S/4HANA, S4611 Col20
Aula 18 - Manipulacao De Arquivos python
Programação - Linguagem C - Variáveis, Palavras Reservadas, tipos de dados, c...
Fundamentos de gerenciamento de ordens e planejamento no SAP TransportationMa...
Fullfilment AI - Forum ecommerce 2025 // Distrito e Total Express
BANCO DE DADOS - AULAS INICIAIS-sgbd.pptx
Informática Aplicada Informática Aplicada Plano de Ensino - estudo de caso NR...
Mergulho profundo técnico para gestão de transportes no SAP S/4HANA, S4TM6 Col14
Aula16ManipulaçãoDadosssssssssssssssssssssssssssss
Apple Pippin Uma breve introdução. - David Glotz
Custos e faturamento no SAP S/4HANA Transportation Management, S4TM3 Col26

Grails

  • 1. Introdução ao Grails Conceitos básicos do Grails Framework e ZK @Lucas_Aquiles @lucas_aquiles
  • 2. Roteiro O que é Grails? Primeiro Projeto O M do MVC Persistência – GORM Relacionamentos @lucas_aquiles
  • 3. O que é Grails Problemas comuns Quando você começa um novo projeto você tem que configurar tudo: Construir todos os componentes Configurar arquivos xml Mapear com o ORM manualmente É dificil escrever uma view limpa Tag libs eram sempre dolorosas @lucas_aquiles
  • 4. E quando algum problema aparecia... @lucas_aquiles
  • 5. O que é Grails = + @lucas_aquiles
  • 6. O que é Grails Framework baseada no MVC Segue boas praticas popularizadas pelo Rails CoC DRY Construído sobre gigantes S p r i n g : IoC, DI, Spring MVC, Spring WebFlow H i b e r n a t e :ORM @lucas_aquiles
  • 7. O que é Grails Instalação e Configuração Download da ultima versão do grails grails.org/Downloads Descompacte em algum lugar Crie o GRAILS_HOME Adicione $GRAILS_HOME/bin no PATH Pronto! @lucas_aquiles
  • 8. O que Grails Cadê os arquivos de config? Cadê meus DAOs? E os mapeamentos? Sem banco pra configurar? Sem servlet container ou App server pra instalar? @lucas_aquiles
  • 9. O que é Grails DataSource.groovy Config.groovy Bootstrap.groovy URLMapping.groovy web.xml @lucas_aquiles
  • 10. O M do MVC Toda entidade persistente fica aqui São mapeadas de maneira transparente Model são configurados como POGOs Cada classe de domínio corresponde a uma tabela no banco de dados relacional comando: grails create-domain-class P erson @lucas_aquiles
  • 11. O M do MVC É uma classe Groovy normal Constraints Valida a entrada dos campos Você pode criar sua própria constraints blank, creditcard, email, url, nullable, unique @lucas_aquiles
  • 12. Persistência - GORM Utiliza o Hibernate por baixo dos panos Para cada classe de domínio é injetado os métodos do GORM produto.save(), P roduto.list(), P roduto.get(id) produto.count(), produto.delete(), etc... Buscadores dinâmicos P roduto.findB yP reco(2.0) @lucas_aquiles
  • 13. Persistência - GORM Buscadores dinâmicos FindBy*, FindAllBy* FindWhere*, findAllWhere* @lucas_aquiles
  • 14. Persistência - GORM HQL – Hibernate Query Language Produto.find(“from Produto where preco = :preco and nome like :nome”, [preco:2.0, nome:'nome do produto']) Parâmetros: max, sort, order @lucas_aquiles
  • 15. Persistência - GORM Comparadores Like Produto.findByNomeLike(“%test”) LessThan Produto.findByPrecoLessThan(2.0) IsNotNull Produto.findByCategoriaIsNotNull() NotEqual @lucas_aquiles
  • 16. Persistência - GORM Suporte a criteria API def criteria = createCriteria(); def resultado = criteria.list(){ categoria{eq(2)} order “nome” } @lucas_aquiles
  • 17. Relacionamentos Permite 4 tipos de relacionamentos One-to-one, one-to-many, many-to-many, many-to- one OneToMany Player hasOne Team HasMany Team hasMany Players Métodos dinâmicos: @lucas_aquiles
  • 18. Relacionamentos Em relacionamentos manyT oM any um dos lados da relação deve definir o belongsT o Mapping I nsertable Inserida dinamicamente quando uma instancia for salva C ascade Configura ações em cascada entre a associação U pdatable @lucas_aquiles
  • 19. O C do MVC Toda regra de negócio é chamada a partir daqui A c t i o n s : são clousures que vão receber requisições e fazer alguma coisa H ttpServletR equest e H ttpServletR esponse p a r a m s : váriavel,map, injetado dinamicamente em todo controller que contêm os parametros da requisição @lucas_aquiles
  • 20. O C do MVC R e n d e r : renderiza uma resposta Uma view, um texto, um template Parâmetros view template model text var @lucas_aquiles
  • 21. O C do MVC R e d i r e c t : redireciona para algum lugar Parâmetros: action controller URI params @lucas_aquiles
  • 22. O C do MVC A variável scaffolding Permite criar a estrutura CRUD dinâmica para uma classe de domínio def scaffolding = P roduto *Scaffolding não é a solução final! @lucas_aquiles
  • 23. Service Centraliza a regra de negócio Compartilha a mesma regra de negócio com a classe de domínio É injetado automaticamente no controller pelo Spring C omando: grails create-service ServiceN ame @lucas_aquiles
  • 24. Service Transactions Essencial para manter a integridade do banco de dados seguindo os conceitos de ACID: Atomicidade Consistência Isolação Durabilidade @lucas_aquiles
  • 25. O V do MVC Comando grails-generate-views D omainN ame Arquivos .gsp Baseados em taglibs Evitam misturar codigo de programação com código de marcação Semelhante ao JSP <%= produto.nome %> @lucas_aquiles
  • 26. O V do MVC Loops Each Parâmetros in: lista que será iterada var: variável temporária, padrão it If/else Parâmetros test: recebe a condição a ser testada Set @lucas_aquiles
  • 27. Scaffolding Comando: grails generate-all D omainN ame Cria toda o controller e views com a estrutura de CRUD Ótimo para prototipação Scaffolding dinâmico: injetado no controller, recebe como valor a classe de domínio @lucas_aquiles
  • 28. TDD – Test Driven Development Integrado com o jUnit Toda classe de teste extende GroovyTestCase Permite fazer testes: Unitários De integração Funcionais Semelhante aos testes em Java @lucas_aquiles
  • 29. TDD UnitTest != IntegrationTest Testes unitários verificam um objeto isolado, não há necessidade de conexão com banco, web sercce ou outro compomente. Testes de integração integrar um objeto a ser testado com componentes externos @lucas_aquiles
  • 30. TDD mockDomain Herdado de GrailsUnitTestCase Injeta na classe de domínio que a classe deve ter Validate(), save(), delete() @lucas_aquiles
  • 31. TDD Testes em Controllers mockP arams: funciona como os params do controller controller: identifica um controller R edirectA rgs: possui os parametros: A ction, controller, model M ockR equest: simula uma instancia para HttpServletRequest M ockSession: simula uma HttpSession @lucas_aquiles
  • 32. Plugins grails install-plugin [plugin-name] grails install-plugin [local-do-plugin] grails create-plugin @lucas_aquiles
  • 33. Duvidas? @lucas_aquiles