Play 2 com Scala

Propaganda
PLAY 2.0 COM SCALA
Banco de Dados
Configurando o Banco de Dados
• Arquivo conf/application.conf
• Banco de Dados H2 usando a memória
db.default.driver=org.h2.Driver
db.default.url="jdbc:h2:mem:play"
• Banco de Dados H2 usando arquivos
db.default.driver=org.h2.Driver
db.default.url="jdbc:h2:/path/to/db-file"
Configurando o MySQL
• Arquivo conf/application.conf
# Default database configuration using MySQL database engine
# Connect to playdb as playdbuser
db.default.driver=com.mysql.jdbc.Driver
db.default.url="jdbc:mysql://localhost/playdb"
db.default.user=playdbuser
db.default.pass="a strong password"
• Arquivo project/Build.scala
val appDependencies = Seq(
"mysql" % "mysql-connector-java" % "5.1.21"
)
Obtendo uma Conexão JDBC
• A forma mais simples
import play.api.db._
val conexao = DB.getConnection()
...
conexao.close()
• Alternativa: O Play fecha a conexão automaticamente
DB.withConnection { conexao =>
...
}
ANORM
API de acesso a dados usando SQL
Executando SQL
import anorm._
import play.api.db.DB
DB.withConnection { implicit c =>
val result: Boolean =
SQL("Select 1").execute()
}
Executando SQL
• Execute() – Devolve um booleano indicando o sucesso
val result: Boolean = SQL("Select 1").execute()
• ExecuteUpdade() – Devolve o número de linhas afetadas
val result: Int =
SQL("delete from City where id = 99").executeUpdate()
• ExecuteInsert() – Inserir um registro com chave auto-
gerada
val id: Option[Long] = SQL(
"insert into City(name, country) values ({name}, {country})")
.on("Cambridge", "New Zealand").executeInsert()
Executando SQL
• Scala suporta Strings com várias linhas
val sqlQuery = SQL(
"""
select * from Country c
join CountryLanguage l on l.CountryCode = c.Code
where c.code = 'FRA';
"""
)
• SQL com parâmetros dinâmicos
SQL(
"""
select * from Country c
join CountryLanguage l on l.CountryCode = c.Code
where c.code = {countryCode};
"""
).on("countryCode" -> "FRA")
Recuperando Informações
• Apply() devolve uma lista preguiçosa com o resultado
// Create an SQL query
val selectCountries = SQL("Select * from Country")
// Transform the resulting Stream[Row] to a
// List[(String,String)]
val countries = selectCountries().map(row =>
row[String]("code") -> row[String]("name")
).toList
Recuperando Informações
• Contando a quantidade de linhas de uma tabela
// First retrieve the first row
val firstRow = SQL(
"Select count(*) as c from Country“
).apply().head
// Next get the content of the 'c' column as Long
val countryCount = firstRow[Long]("c")
Lidando com campos nulos
• O código a seguir pode gerar uma exceção
UnexpectedNullableFound(COUNTRY.INDEPYEAR)
SQL("Select name,indepYear from Country")().map {row =>
row[String]("name") -> row[Int]("indepYear")
}
• Usando Option
SQL("Select name,indepYear from Country")().map{ row =>
row[String]("name") -> row[Option[Int]]("indepYear")
}
Download