Todo começo de projeto sempre tem a parte chata de cadastro.
Quando se gasta tempo precioso fazendo tela de CRUD que só o administrador (você) vai usar, isso passa de chato para insuportável!
Felizmente alguns frameworks tem alguma facilidade desenvolvida oficialmente ou não.
No caso do Play Framework, que tem como um de seus destaques a facilidade de uso, não poderia ser diferente. Entretanto, o facilitador de CRUD do Play não é oficial, é um dos interessantes plugins do site http://www.playmodules.net/ , o play2-crud .
Vou usar uma tabela bem simples no MySQL, e vou mostrar como alterar apenas 5 arquivos e ter uma aplicação nova com CRUD funcionando.
Começamos criando a aplicação:
fb@cascao ~/workspace-play > play new play2-crud-mysql _ _ __ | | __ _ _ _ | '_ \| |/ _' | || | | __/|_|\____|\__ / |_| |__/ play 2.2.2 built with Scala 2.10.3 (running Java 1.7.0_51), http://www.playframework.com The new application will be created in /home/fb/workspace-play/play2-crud-mysql What is the application name? [play2-crud-mysql] > Which template do you want to use for this new application? 1 - Create a simple Scala application 2 - Create a simple Java application > 2 OK, application play2-crud-mysql is created. Have fun! fb@cascao ~/workspace-play >
Arquivo 1 – play2-crud-mysql\build.sbt – adicionamos as dependências do MySQL e do plugin play2-crud
name := "play2-crud-mysql" version := "1.0-SNAPSHOT" libraryDependencies ++= Seq( javaJdbc, javaEbean, cache, "mysql" % "mysql-connector-java" % "5.1.18", "play2-crud" % "play2-crud_2.10" % "0.7.3-SNAPSHOT" exclude("com.typesafe.play", "play-cache_2.10") ) resolvers += "hakandilek release" at "http://hakandilek.github.com/maven-repo/releases/" resolvers += "hakandilek snapshots" at "http://hakandilek.github.com/maven-repo/snapshots/" play.Project.playJavaSettings
Depois de adicionadas as dependências, vamos configurar o Eclipse:
fb@cascao ~/workspace-play/play2-crud-mysql > play [info] Loading project definition from /home/fb/workspace-play/play2-crud-mysql/project [info] Set current project to play2-crud-mysql (in build file:/home/fb/workspace-play/play2-crud-mysql/) _ _ __ | | __ _ _ _ | '_ \| |/ _' | || | | __/|_|\____|\__ / |_| |__/ play 2.2.2 built with Scala 2.10.3 (running Java 1.7.0_51), http://www.playframework.com > Type "help play" or "license" for more information. > Type "exit" or use Ctrl+D to leave this console. [play2-crud-mysql] $ eclipse with-source=true [info] About to create Eclipse project files for your project(s). [info] Updating {file:/home/fb/workspace-play/play2-crud-mysql/}play2-crud-mysql... [info] Resolving mysql#mysql-connector-java;5.1.18 ... [info] Successfully created Eclipse project files for project(s): [info] play2-crud-mysql
Agora podemos importar o nosso projeto pelo Eclipse, e trabalhar com ele.
Arquivo 2 – play2-crud-mysql\app\models\Seriado.java – dentro da package models , definimos o nosso domain Seriado:
package models; import javax.persistence.*; import play.data.validation.Constraints.Required; import play.db.ebean.Model; import play.utils.dao.BasicModel; @Entity public class Seriado extends Model implements BasicModel { private static final long serialVersionUID = 2500768374252151706L; @Id private Long id; @Basic @Required private String nome; public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getNome() { return nome; } public void setNome(String nome) { this.nome = nome; } public Long getKey() { return id; } public void setKey(Long key) { setId(key); } }
Arquivo 3 – play2-crud-mysql\conf\application.conf – configurações de banco de dados MySQL e do Play2-CRUD :
# # Play 2 CRUD para MySQL # ~~~~~ # Secret key application.secret="a^gBGEMapwMhdr/FY1NtsiG6`TGsbsT[]q:lZU:US # The application languages # ~~~~~ application.langs="en" # Ajuste do Play2 CRUD # ~~~~~ application.global=play.utils.crud.GlobalCRUDSettings # Database configuration # ~~~~~ db.default.driver=com.mysql.jdbc.Driver db.default.url="jdbc:mysql://localhost/boaglio1" db.default.user=boaglio1 db.default.password="boaglio1" # Evolutions # ~~~~~ evolutionplugin=enabled # Ebean configuration # ~~~~~ ebean.default="models.*" # Logger logger.root=ERROR logger.play=INFO logger.application=DEBUG
Arquivo 4 – play2-crud-mysql\conf\routes.conf – adicionadas rotas do Play2-CRUD :
# Routes # This file defines all application routes (Higher priority routes first) # ~~~~ # Home page GET / controllers.Application.index() GET /assets/*file controllers.Assets.at(path="/public", file) # Rota do Play2 CRUD -> /app play.crud.Routes # Rota do Play2 CRUD - REST -> /api play.rest.Routes
Arquivo 5 – play2-crud-mysql\app\views\index.scala.html – página inicial auxiliar:
@(message: String) @main("Play2 CRUD MySQL") { <h2>Play2 CRUD MySQL <h2> <a href="/app">Lista de tabelas para o CRUD</a> <a href="/api">Lista de chamadas REST</a> <a href="/api/Seriado/list">Lista de seriados em REST</a> }
Nosso CRUD está pronto, vamos colocar para funcionar:
[play2-crud-mysql] $ run --- (Running the application from SBT, auto-reloading is enabled) --- [info] play - Listening for HTTP on /0.0.0.0:9000 (Server started, use Ctrl+D to stop and go back to the console...) [info] play - database [default] connected at jdbc:mysql://localhost/boaglio1 [info] p.u.m.c.ClasspathScanningConverterRegistry - Converter:class java.lang.Double : play.utils.meta.convert.DoubleConverter@241ca5f1 [info] p.u.m.c.ClasspathScanningConverterRegistry - Converter:class java.lang.Integer : play.utils.meta.convert.IntegerConverter@54d283bc [info] p.u.m.c.ClasspathScanningConverterRegistry - Converter:class java.lang.Long : play.utils.meta.convert.LongConverter@48c6d725 [info] play - Application started (Dev)
Acessando http://localhost:9000/ temos a página informando que a tabela de seriados não existe:
Depois de clicar em apply this script now!, será criada a tabela no MySQL e exibida a tela inicial:
Na primeira opção o plugin automaticamente lista todos os domains (no nosso caso temos apenas um):
Clicando em create, vamos para a tela para cadastrar um novo seriado:
Depois de cadastrado, o registro é exibido em uma data table:
Toda a estrutura de CRUD está pronta, adicionando mais uma classe de domínio na package models, ela automaticamente já entra na tela inicial para cadastrar, e isso sem nem reiniciar o servidor.
Além dessa facilidade, o plugin play2-crud ainda oferece as operações de CRUD via REST, algo que é muito interessante fazer, por exemplo, via Android/iOS.
Depois de popular a tabela de seriados com esse script SQL, temos o exemplo no browser:
Todos os fontes aqui estão nesse projeto do GitHub: https://github.com/boaglio/play2-crud-mysql .
Essa é uma das várias facilidades do Play Framework , no artigo anterior comentei do integração com o MongoDB e também gostei tanto de usar Play que escrevi um livro sobre o assunto.
Fernando Boaglio, para a comunidade