Desenvolvimento Web com Java

Propaganda
Desenvolvimento Web com Java
Sérgio Lopes
Caelum - http://www.caelum.com.br
[email protected]
Sérgio Lopes
●
●
●
●
●
●
●
Desenvolvedor Java desde 2002
Instrutor de Java pela Caelum
Trabalho com Web e Celulares
Certificado SCJP
Colaborador da Revista Mundo Java
Moderador do GUJ
Bacharelando na USP
A Palestra
●
Bancos de Dados com Hibernate
–
●
Web simplificada com Vraptor
–
●
adicionar, listar, remover, editar sem SQL!
web sem servlets, requests, struts
JSP + JSTL + EL
–
elegância no código html
O que vamos fazer?
●
●
Algum projeto de cadastro?
Sugestões:
–
–
–
Contatos
Produtos
Contas bancárias
Banco de Dados
●
Geralmente escreve-se muito SQL
–
–
●
é chato e repetitivo
é dependente de banco de dados
Abordagem relacional dos dados
–
dor de cabeça quando trabalhamos OO
Hibernate
●
Framework para persistência de dados
–
–
–
●
●
Simples
Eficiente
Mágico
Nunca mais vamos escrever SQL!
ORM: Object Relational Mapping
–
trabalhar orientado a objetos
As classes de modelo
Classes simples para modelar as entidades do
sistema:
●
public class Modelo {
}
As classes de modelo
Vamos adicionar alguns atributos e gerar gets e
sets:
●
public class Modelo {
private String atributo;
// vários atributos...
public String getAtributo() {
return this.atributo;
}
public void setAtributo(String a) {
this.atributo = a;
}
}
As classes de modelo
Precisamos de um id para chave primária:
●
public class Modelo {
private Integer id;
private String atributo;
// vários atributos...
// vários gets e sets
}
As classes de modelo
Vamos hibernetar a classe adicionando algumas
anotações:
●
@Entity
public class Modelo {
@Id @GeneratedValue
private Integer id;
private String atributo;
// vários atributos...
// vários gets e sets
}
Relacionamentos
●
Um segundo modelo, para ter relacionamento:
@Entity
public class Modelo {
@Id @GeneratedValue
private Integer id;
private String atributo;
@ManyToOne
private OutroModelo outroModelo;
// gets e sets
}
Relacionamentos
●
Um segundo modelo, para ter relacionamento:
@Entity
public class OutroModelo {
@Id @GeneratedValue
private Integer id;
private String atributo;
// gets e sets
}
As tabelas
●
O Hibernate vai gerar as tabelas pra gente!
–
nunca mais vou escrever SQL
// configura o Hibernate
AnnotationConfiguration conf = new AnnotationConfiguration();
conf.configure();
// gera as tabelas
new SchemaExport(conf).create(true, true);
Conectar no Banco de Dados
●
●
●
Configuramos o Hibernate
Criamos uma fábrica de sessões
Abrimos uma sessão
// configura o Hibernate
AnnotationConfiguration conf = new AnnotationConfiguration();
conf.configure();
// cria sessões
SessionFactory factory = conf.buildSessionFactory();
Session session = factory.getSession();
Adicionar no Banco de Dados
●
INSERT INTO bla bla bla? Não!
Modelo m = new Modelo();
m.setAtributo(“Alguma coisa”);
session.save(m);
Adicionar com relacionamentos
●
INSERT bla bla bla? Não!
Modelo m = new Modelo();
m.setAtributo(“Alguma coisa”);
OutroModelo o = new OutroModelo();
o.setId(1);
m.setOutroModelo(o);
session.save(m);
Listar o Banco de Dados
●
SELECT * FROM bla bla bla? Não!
List<Modelo> lista = session.createCriteria(Modelo.class).list();
for (Modelo m : lista) {
System.out.println(m.getAtributo() + “, “ + m.getOutroModelo().getAtributo());
}
Refatorando um pouco
●
Vamos deixar nossa classe de listagem um pouco
mais elegante:
–
–
–
Configurar o hibernate no construtor
Um método para listar
Utilizar atributos
Refatorando um pouco
public class ModeloLogic {
private Session session;
private List<Modelo> modelos;
public ModeloLogic() {
AnnotationConfiguration conf = new AnnotationConfiguration();
conf.configure();
SessionFactory factory = conf.buildSessionFactory();
session = factory.getSession();
}
public void lista() {
modelos = session.createCriteria(Modelo.class).list();
for (Modelo m : modelos)
System.out.println(m.getAtributo());
}
public static void main(String[] args) {
new ModeloLogic().lista();
}
}
Que tal listarmos na Web?
●
●
Tiramos o main e o System.out.println
Adicionamos algumas anotações
@Component(“modelo”)
public class ModeloLogic {
private Session session;
@Out
private List<Modelo> modelos;
public ModeloLogic() {
AnnotationConfiguration conf = new AnnotationConfiguration();
conf.configure();
SessionFactory factory = conf.buildSessionFactory();
session = factory.getSession();
}
public void lista() {
modelos = session.createCriteria(Modelo.class).list();
}
}
Como exibir os dados?
●
●
Vamos usar JSP para exibir os dados
Usamos JSTL e EL para percorrer a listagem
<h2>Listar modelos</h2>
<c:forEach items=”${modelos}” var=”modelo”>
<li>${modelo.atributo}, ${modelo.outroModelo.atributo}</li>
</c:forEach>
VRaptor
●
●
●
●
Framework para trabalhar com Web
Auxilia o desenvovimento Web
Desatrelado de Servlets, Request, Response etc
Lógica de negócios em classes Java elegantes
Adicionar na Web
●
Um formulário de cadastro
<h2>Adicionar modelos</h2>
<form action=”modelo.adiciona.logic” method=”post”>
Atributo: <input type=”text” name=”modelo.atributo” />
<input type=”submit”/>
</form>
Adicionar na Web
●
Pegar os dados enviados e adicionar no banco
–
–
atributo para ler os parâmetros
método adiciona na ModeloLogic
public class ModeloLogic {
@Parameter
public Modelo modelo = new Modelo();
public void adiciona() {
this.session.save(this.modelo);
}
}
Adicionar na Web
●
Por último, uma página com uma mensagem de
confirmação:
–
qual nome? modelo/adiciona.ok.jsp
<h2>Parabéns!</h2>
<b>Seu modelo foi inserido com sucesso!</b>
E com relacionamento?
●
Mais um campo no nosso form de cadastro:
<h2>Adicionar modelos</h2>
<form action=”modelo.adiciona.logic” method=”post”>
Atributo: <input type=”text” name=”modelo.atributo” />
OutroModelo: <input type=”text” name=”modelo.outroModelo.id” />
<input type=”submit”/>
</form>
Conclusão
●
O Hibernate facilita muito o acesso a banco de
dados
–
●
O VRaptor facilita muito desenvolver as lógicas
de negócio
–
●
http://www.hibernate.org
http://www.vraptor.com.br
JSP com tags JSTL facilitam muito o design das
páginas html
Muito Obrigado!
[email protected]
Material disponível depois em
http://blog.caelum.com.br
Download