Desenvolvimento Web com Java Sérgio Lopes Caelum - http://www.caelum.com.br sergio.lopes@caelum.com.br
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 adicionar, listar, remover, editar sem SQL! Web simplificada com Vraptor 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 http://www.hibernate.org O VRaptor facilita muito desenvolver as lógicas de negócio http://www.vraptor.com.br JSP com tags JSTL facilitam muito o design das páginas html
Muito Obrigado! sergio.lopes@caelum.com.br Material disponível depois em http://blog.caelum.com.br