POO Programação Orientada a Objetos Mãos à Obra Jefferson S. Silva IFET - PI Copyright Jefferson S. Silva Slide 1 O sistema Nossa empresa foi contratada por uma pequena gravadora de música que deseja entrar na era da música digital. Contratou nossos serviços para desenvolver uma loja virtual que venda downloads de músicas. Detalhe: urgência máxima no projeto. Copyright Jefferson S. Silva Slide 2 1
O sistema Suas maiores preocupações é que o sistema seja capaz de suportar qualquer tipo de banco de dados e a interface de iteração com o cliente seja através da web, com muitos recursos visuais e ajax para atrair os compradores. Copyright Jefferson S. Silva Slide 3 O sistema O cliente pediu que o sistema passe pelos seguintes testes para aprovar os gastos com o mesmo: permitir listar, cadastrar, e remover um usuário que acessa o sistema permitir listar, cadastrar, remover e alterar um cd permitir listar, cadastrar, remover e alterar uma música sistema de login permitir alguém selecionar músicas diversas para comprar receber dados de relativos à venda, como nome do cliente, email e cartão de credito Copyright Jefferson S. Silva Slide 4 2
Partes do projeto Sendo assim, iremos dividir o projeto em algumas partes: 1. criar o ambiente de desenvolvimento 2. criar o banco de dados 3. refatorar o sistema para web e dao genérico 4. criar sistemas de gerenciamento de Cds e Músicas Copyright Jefferson S. Silva Slide 5 Partes do projeto 5. criar o sistema de login 6. criar a loja virtual, com a interface básica 7. inserir recursos de ajax na loja virtual 8. validar 9. dar uma boa turbinada na nossa loja Copyright Jefferson S. Silva Slide 6 3
Tecnologias usadas Ambiente de desenvolvimento Eclipse 3.2.x com plugins: Sysdeo Tomcat Hibernate Tools MySQL 5.0 Copyright Jefferson S. Silva Slide 7 Tecnologias usadas Java Vraptor 2 Hibernate 3 Hibernate Annotations Hibernate Validator DisplayTag JSTL Tomcat 5.5 Copyright Jefferson S. Silva Slide 8 4
Tecnologias usadas Ajax AutoSuggest Copyright Jefferson S. Silva Slide 9 Configurando o Eclipse TomcatPluginV31 Cole a pasta com.sysdeo.eclipse.tomcat_3.1.0 dentro da pasta plugins do Eclipse. Copyright Jefferson S. Silva Slide 10 5
Configurando o Eclipse Plugin HibernateTools-3.2.0.beta Cole o conteúdo da pasta plugin dentro da pasta plugins do Eclipse. Cole o conteúdo da pasta feature dentro da pasta features do Eclipse. Copyright Jefferson S. Silva Slide 11 Configurando o Eclipse Crie em um local apropriado uma pasta chamada WorkSpacePOO para colocar seus projetos. Execute o Eclipse e sete o WorkSpace criado. Copyright Jefferson S. Silva Slide 12 6
Criando o projeto Para iniciar, vamos criar nosso projeto no Eclipse. 1) Abra o Eclipse 2) Vá em File -> new -> java -> java projects Copyright Jefferson S. Silva Slide 13 Criando o projeto Crie uma Source Folder chamada src Crie uma pasta chamada lib Pelo Windows Explorer descompacte o arquivo jars.rar dentro da pasta lib. Copyright Jefferson S. Silva Slide 14 7
Adicionando ao Build Path No Eclipse clique no projeto com o botão direito e vá em Refresh, depois no menu Build Path escolha Add Libraries. Escolha User Library e clique em Next Clique em User Libraries novamente Clique em New Copyright Jefferson S. Silva Slide 15 Adicionando ao Build Path Dê um nome para sua biblioteca Clique em Add JARs... Localize os jars que estão dentro do projeto na pasta lib Clique em OK e logo em seguida finish Copyright Jefferson S. Silva Slide 16 8
log4j.properties Muitos projetos atualmente usam o log4j do projeto apache como API de log. No nosso caso, o Hibernate também utiliza o log4j. O arquivo log4j.properties, dentro da pasta src, configura o log4j para uso em todo o nosso projeto. Copyright Jefferson S. Silva Slide 17 Criando os pacotes do projeto a. Para criar um pacote clique com o botão direito na pasta SRC. Vá em new - package: model - br.com.system.model conterá as classes da camada modelo. util - br.com.system.util conterá classes que facilitarão a vida do desenvolvedor. dao - br.com.system.dao conterá as classes de persistência. Main - br.com.system.main Copyright Jefferson S. Silva Slide 18 9
Controle de usuários Neste capitulo iremos: configurar o hibernate começar o projeto pelo cadastro de usuários Copyright Jefferson S. Silva Slide 19 Controle de usuários Nosso primeiro passo será criar o sistema de controle de Usuários do nosso futuro sistema. Usaremos uma entidade sem relacionamentos e operações básicas de adicionar, remover e listar. Copyright Jefferson S. Silva Slide 20 10
Preparando o hibernate Como vamos usar o Hibernate como ferramenta ORM, precisamos primeiro configurá-lo. Os jars necessários já foram copiados precisamos apenas configurar o banco de dados. Copyright Jefferson S. Silva Slide 21 Preparando o hibernate Precisamos agora configurar o Hibernate para usar o MySQL através do hibernate.cfg.xml. Vá em File -> New -> Other -> Hibernate-> Hibernate Configuration File. Selecione o seu diretório src e o nome de arquivo como hibernate.cfg.xml e clique em Next Copyright Jefferson S. Silva Slide 22 11
Preparando o hibernate Na próxima tela, selecione as opções para configurar o MySQL: - Database dialect: MySQL - Driver class: com.mysql.jdbc.driver - Connection URL: jdbc:mysql://localhost/lojavirtual - Username: root - Password:root Copyright Jefferson S. Silva Slide 23 Preparando o hibernate Adicione duas 2 novas propriedades ao hibernate.cfg.xml para que o hibernate mostre o código sql gerado e formatado <property name="hibernate.show_sql">true</property> <property name="hibernate.format_sql">true</property> Copyright Jefferson S. Silva Slide 24 12
Usuário Para nosso sistema de usuários, é fundamental a existência de alguma classe que modele o que é um Usuário. Criaremos um JavaBean (DTO) simples para tal, e o usaremos como Entidade do Hibernate. Copyright Jefferson S. Silva Slide 25 Usuário Crie a classe Usuario no pacote br.com.system.model. Coloque atributos String para login e senha e um atributo Long (não long) para id: Copyright Jefferson S. Silva Slide 26 13
Usuário package br.com.system.model; public class Usuario { private Long id; private String login; private String senha; Copyright Jefferson S. Silva Slide 27 Usuário Acrescente outros atributos se achar necessário. Gere os getters e setters pelo Eclipse (menu Source, Generate getters and setters ou ALT+SHIFT+S+R). Copyright Jefferson S. Silva Slide 28 14
Usuário Adicione as anotações da Java Persistence API (JPA) para que o Hibernate saiba persistir nossa classe. Lembre-se de sempre importar do pacote javax.persistence. Copyright Jefferson S. Silva Slide 29 Usuário Configure nossa classe Usuario no hibernate.cfg.xml. Adicione a tag abaixo dentro da tag session-factory logo após as tags property: <mapping class="br.com.system.model.usuario"/> Copyright Jefferson S. Silva Slide 30 15
Gerando o banco de dados Vamos agora gerar o banco de dados para nossa classe Usuario usando o Hibernate. Crie a classe GeraBanco no pacote br.com.system.util que, em seu método main, cria a o banco usando o SchemaExport do Hibernate: O Hibernate apenas exporta a estrutura da base, ela deve está previamente criada. Copyright Jefferson S. Silva Slide 31 GeraBanco public class GeraBanco { public static void main(string[] args) { Configuration conf = new AnnotationConfiguration(); conf.configure(); SchemaExport se = new SchemaExport(conf); se.create(true, true); Copyright Jefferson S. Silva Slide 32 16
Adicionando Sempre que quisermos usar o Hibernate, precisamos de uma Session. No Hibernate, ao invés de trabalharmos diretamente com Connections JDBC, utilizamos sessões. As sessões do hibernate são bastante interessantes para a implementação de pool de conexões e outros recursos como cache. Copyright Jefferson S. Silva Slide 33 Adicionando Para obter uma sessão do hibernate, precisamos criar uma fábrica de sessões, uma SessionFactory. Da seguinte forma: Copyright Jefferson S. Silva Slide 34 17
Adicionando Configuration conf = new AnnotationConfiguration(); conf.configure(); SessionFactory factory = conf.buildsessionfactory(); Session session = factory.opensession();.. Copyright Jefferson S. Silva Slide 35 Adicionando Usuario u = new Usuario(); u.setlogin("admin"); u.setsenha("admin"); Transaction t = session.begintransaction(); session.save(u); t.commit(); Copyright Jefferson S. Silva Slide 36 18
Exercícios Crie a classe TestaUsuario no pacote br.com.system.main para testar a adição de um usuário. Copyright Jefferson S. Silva Slide 37 public class TestaUsuario { public static void main(string[] args) { // configura o hibernate Configuration conf = new AnnotationConfiguration(); conf.configure(); SessionFactory factory = conf.buildsessionfactory(); Session session = factory.opensession(); // cria um usuario Usuario u = new Usuario(); u.setlogin("admin"); u.setsenha("admin"); // abre transacao e insere Transaction t = session.begintransaction(); session.save(u); t.commit(); session.close(); Copyright Jefferson S. Silva Slide 38 19
DAO Como sabemos, ao utilizar acesso a banco de dados, uma prática bastante recomendada é a do uso do padrão DAO (Data Access Object). DAOs encapsulam todo acesso a dados referente às nossas entidades. Copyright Jefferson S. Silva Slide 39 DAO Vamos criar uma classe UsuarioDao que encapsula operações de adicionar, remover e editar Usuarios e também listar todos os Usuarios do sistema. Usaremos o Hibernate em nosso Dao, portanto precisamos da Session do Hibernate (que receberemos como argumento no construtor): Copyright Jefferson S. Silva Slide 40 20
DAO package br.com.system.dao; import java.util.list; import org.hibernate.session; import br.com.system.model.usuario; public class UsuarioDao { private Session session; public UsuarioDao(Session session) { this.session = session; public void atualiza(usuario u) { this.session.merge(u); public List<Usuario> listatudo() { return this.session.createcriteria(usuario.class).list(); public Usuario procura(long id) { return (Usuario) session.load(usuario.class, id); public void adiciona(usuario u) { this.session.save(u); public void remove(usuario u) { this.session.delete(u); Copyright Jefferson S. Silva Slide 41 Exercício Crie a classe UsuarioDao no pacote br.com.system.dao Altere sua classe TestaUsuario para usar o Dao para adicionar e listar. Copyright Jefferson S. Silva Slide 42 21
Exercício Instancie o UsuarioDao passando a Session para ele: UsuarioDao dao = new UsuarioDao(session); Copyright Jefferson S. Silva Slide 43 Exercício Adicione um Usuario através do dao: Usuario u = new Usuario(); u.setlogin("admin"); u.setsenha("admin"); dao.adiciona(u); Copyright Jefferson S. Silva Slide 44 22
Exercício Liste todos os usuários do banco e percorra com um for imprimindo seus logins: List<Usuario> lista = dao.listatudo(); for (Usuario usuario : lista) { System.out.println(usuario.getLogin()); Copyright Jefferson S. Silva Slide 45 package br.com.system.main; No final, sua classe deve estar assim: import java.util.list; import org.hibernate.session; import org.hibernate.sessionfactory; import org.hibernate.transaction; import org.hibernate.cfg.annotationconfiguration; import org.hibernate.cfg.configuration; import br.com.system.dao.usuariodao; import br.com.system.model.usuario; public class TestaUsuario { public static void main(string[] args) { // configura o hibernate Configuration conf = new AnnotationConfiguration(); conf.configure(); SessionFactory factory = conf.buildsessionfactory(); Session session = factory.opensession(); // cria um usuario Usuario u = new Usuario(); u.setlogin("admin"); u.setsenha("admin"); // cria dao UsuarioDao dao = new UsuarioDao(session); // abre transacao e insere Transaction t = session.begintransaction(); dao.adiciona(u); t.commit(); // lista usuarios List<Usuario> lista = dao.listatudo(); for (Usuario usuario : lista) { System.out.println(usuario.getLogin()); session.close(); Copyright Jefferson S. Silva Slide 46 23