15Usando o plugin VRaptor JPA

por Willian Aquino

Downloads

Extraia o Vraptor, dentro desta pasta que foi extraída selecionei todos os aquivos e criei um novo zip.

Crie um projeto novo Dynamic Web Project no eclipse.

No seu projeto de um botão direito e selecione import e depois import novamente.

Na janela que se abre selecione General e depois clique em Archive File.

Selecione o zip do VRaptor Blank Project e click em Finish.

Agora no seu projeto entre na pasta WebContent/WEB-INF/lib

Coloque na pasta lib o jar vraptor-jpa-1.0.0.jar e os jars do Hibernate

Esse tutorial ajuda: http://blog.caelum.com.br/as-dependencias-do-hibernate-3-5/

No seu web.xml coloque essa anotação:

    <context-param>
        <param-name>br.com.caelum.vraptor.packages</param-name>
        <param-value>br.com.caelum.vraptor.util.jpa</param-value>
    </context-param>

Na pasta src do seu projeto crie uma nova pasta chamada WEB-INF, e dentro dela crie um arquivo xml chamado persistence.xml

E coloque esse script. Eu estou usando o MYSQL, se você usa outro banco use outro formato.

    <?xml version="1.0" encoding="UTF-8"?>
    <persistence version="1.0" xmlns="http://java.sun.com/xml/ns/persistence"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd">

      <persistence-unit name="default" transaction-type="RESOURCE_LOCAL">
        <provider>org.hibernate.ejb.HibernatePersistence</provider>
        <class>br.com.caelum.model.Usuario</class>
        <properties>
          <property name="hibernate.connection.username" value="USUARIO"/>
          <property name="hibernate.connection.password" value="SENHA"/>
          <property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver"/>
          <property name="hibernate.connection.url" value="jdbc:mysql://localhost:3306/NOME_DO_BANCO"/>
          <property name="hibernate.cache.provider_class" value="org.hibernate.cache.NoCacheProvider"/>
          <property name="hibernate.hbm2ddl.auto" value="update"/>
          <property name="hibernate.show_sql" value="true"/>
        </properties>
      </persistence-unit>
    </persistence>
Classes para teste

Dentro da pasta src faça o seguinte.

Dentro do pacote br.com.caelum.vraptor.blank, abra o IndexController e coloque a class abaixo.

    import br.com.caelum.dao.UsuarioDao;
    import br.com.caelum.model.Usuario;
    import br.com.caelum.vraptor.Path;
    import br.com.caelum.vraptor.Post;
    import br.com.caelum.vraptor.Resource;
    import br.com.caelum.vraptor.Result;

    @Resource
    public class IndexController {

      private final Result result;
      private final UsuarioDao userDao;

      public IndexController(Result result, UsuarioDao userDao) {
        this.result = result;
        this.userDao= userDao;
      }

      @Path("/")
      public void index() {}

      @Post @Path("/cadastro")
      public void cadastro(Usuario usuario){


          //System.out.println(usuario);

          this.userDao.InsertUser(usuario);
          this.result.forwardTo(IndexController.class).index();
      }
    }

Crie um pacote chamada br.com.caelum.model e crie essa classe dentro.

    import javax.persistence.Entity;
    import javax.persistence.GeneratedValue;
    import javax.persistence.Id;


    @Entity
    public class Usuario {

        @Id @GeneratedValue
        private long idUsuario;
        private String nome;
        private String sobreNome;

        public long getIdUsuario() {
            return idUsuario;
        }

        public void setIdUsuario(long idUsuario) {
            this.idUsuario = idUsuario;
        }

        public String getNome() {
            return nome;
        }

        public void setNome(String nome) {
            this.nome = nome;
        }

        public String getSobreNome() {
            return sobreNome;
        }

        public void setSobreNome(String sobreNome) {
            this.sobreNome = sobreNome;
        }
    }

Crie um pacote chamada br.com.caelum.dao e crie essa classe dentro.

    import javax.persistence.EntityManager;
    import br.com.caelum.model.Usuario;
    import br.com.caelum.vraptor.ioc.Component;


    @Component
    public class UsuarioDao {

        //private EntityManager em = new EntityManagerCreator().getInstance();

        private EntityManager em;

        public UsuarioDao(EntityManager em){
            this.em = em;
        }

        public void InsertUser(Usuario usuario) {
            try{
                this.em.persist(usuario);
            }catch(Exception e){
                e.printStackTrace();
            }
        }
    }

Agora dentro da pasta WebContent/WEB-INF/jsp/index

Abra o jsp index.jsp e coloque esse HTML.

    <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
    <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>


    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Insert title here</title>
    </head>
    <body>

    <form action="<c:url value='/cadastro'/>" method="post">
          Nome:         <input type="text" name="usuario.nome" /><br/>
          SobreNome:    <input type="text" name="usuario.sobreNome" /><br/>
          <input type="submit" value="Salvar" />
      </form>


    </body>
    </html>