Warning: Trying to access array offset on value of type bool in /home/feltexco/public_html/felix/wp-content/plugins/google-maps-ready/modules/options/models/options.php on line 16

Warning: Trying to access array offset on value of type bool in /home/feltexco/public_html/felix/wp-content/plugins/google-maps-ready/modules/options/models/options.php on line 16

Warning: Trying to access array offset on value of type bool in /home/feltexco/public_html/felix/wp-content/plugins/google-maps-ready/modules/options/models/options.php on line 16

Warning: Cannot modify header information - headers already sent by (output started at /home/feltexco/public_html/felix/wp-content/plugins/google-maps-ready/modules/options/models/options.php:16) in /home/feltexco/public_html/felix/wp-includes/rest-api/class-wp-rest-server.php on line 1758

Warning: Cannot modify header information - headers already sent by (output started at /home/feltexco/public_html/felix/wp-content/plugins/google-maps-ready/modules/options/models/options.php:16) in /home/feltexco/public_html/felix/wp-includes/rest-api/class-wp-rest-server.php on line 1758

Warning: Cannot modify header information - headers already sent by (output started at /home/feltexco/public_html/felix/wp-content/plugins/google-maps-ready/modules/options/models/options.php:16) in /home/feltexco/public_html/felix/wp-includes/rest-api/class-wp-rest-server.php on line 1758

Warning: Cannot modify header information - headers already sent by (output started at /home/feltexco/public_html/felix/wp-content/plugins/google-maps-ready/modules/options/models/options.php:16) in /home/feltexco/public_html/felix/wp-includes/rest-api/class-wp-rest-server.php on line 1758

Warning: Cannot modify header information - headers already sent by (output started at /home/feltexco/public_html/felix/wp-content/plugins/google-maps-ready/modules/options/models/options.php:16) in /home/feltexco/public_html/felix/wp-includes/rest-api/class-wp-rest-server.php on line 1758

Warning: Cannot modify header information - headers already sent by (output started at /home/feltexco/public_html/felix/wp-content/plugins/google-maps-ready/modules/options/models/options.php:16) in /home/feltexco/public_html/felix/wp-includes/rest-api/class-wp-rest-server.php on line 1758

Warning: Cannot modify header information - headers already sent by (output started at /home/feltexco/public_html/felix/wp-content/plugins/google-maps-ready/modules/options/models/options.php:16) in /home/feltexco/public_html/felix/wp-includes/rest-api/class-wp-rest-server.php on line 1758

Warning: Cannot modify header information - headers already sent by (output started at /home/feltexco/public_html/felix/wp-content/plugins/google-maps-ready/modules/options/models/options.php:16) in /home/feltexco/public_html/felix/wp-includes/rest-api/class-wp-rest-server.php on line 1758
{"id":551,"date":"2014-04-08T01:07:40","date_gmt":"2014-04-08T04:07:40","guid":{"rendered":"http:\/\/www.feltex.com.br\/felix\/?p=551"},"modified":"2014-12-30T08:44:19","modified_gmt":"2014-12-30T10:44:19","slug":"exemplo-completo-com-jsf-primefaces-hibernate-mysql","status":"publish","type":"post","link":"https:\/\/www.feltex.com.br\/felix\/exemplo-completo-com-jsf-primefaces-hibernate-mysql\/","title":{"rendered":"Exemplo completo com JSF Primefaces + Hibernate + MySQL"},"content":{"rendered":"

Exemplo completo com JSF Primefaces + Hibernate + MySQL<\/H1>
\nOl\u00e1 Amigos,<\/p>\n

Hoje criaremos um projeto completo com as tecnologias java: JSF (Primefaces) + Hibernate + MySQL ou PostgreSQL.
\nE como de costume iniciaremos com uma breve descri\u00e7\u00e3o de cada uma delas.
\n Vamos utilizar o nosso sistema acad\u00eamico chamado de AcademicNet para aplicar os conceitos.<\/p>\n

Tecnologias utilizadas no exemplo<\/H2><\/p>\n
  • JSF (Java Serer Faces) \u00e9 a tecnologia Java para constru\u00e7\u00e3o de p\u00e1ginas din\u00e2micas. <\/li>\n
  • Primefaces \u00e9 uma biblioteca de componentes para RIA – Rich Internet Application. O que torna os sistemas com uma interface mais amig\u00e1vel para os usu\u00e1rios.<\/li>\n
  • Hibernate \u00e9 um framework para o mapeamento objeto-relacional. Facilita o mapeamento dos atributos entre um Banco de dados Relacional e o modelo de objetos de uma aplica\u00e7\u00e3o. <\/li>\n

    O exemplo funciona tanto com MySQL quanto com PostgreSQL<\/p>\n

  • MySQL – Banco de dados Relacional muito utilizado no mundo corporativo. <\/li>\n

    \"Primefaces\"<\/p>\n

    <\/p>\n

    Nossa aplica\u00e7\u00e3o funcionar\u00e1 da seguinte maneira.<\/p>\n

    A p\u00e1gina inicial \u00e9 a index.jsp<\/b> Ela faz a apresenta\u00e7\u00e3o do projeto e quando clicamos na imagem ser\u00e1 exibido o menu.jsp<\/b> nesse menu podemos escolher v\u00e1rias op\u00e7\u00f5es de CRUD. A primeira \u00e9 a mais importante para n\u00f3s. “Manter Aluno JSF”.<\/p>\n

    Veja o c\u00f3digo abaixo:<\/p>\n

    \r\n\r\n\r\n\r\nMenu de op\u00e7\u00f5es<\/title>\r\n<\/head>\r\n<body>\r\n\t<div align=\"center\">\r\n\t\t<H1>Seja bem vindo ao sistema AcademicNet!<\/H1>\r\n\t\t<a href=\"cadastroAluno.xhtml\">Manter Aluno JSF<\/a><br>\r\n\t\t<a href=\"aluno.jsp\">Manter Aluno<\/a><br>\r\n\t\t<a href=\"AlunoServlet?acao=Listar\">Listar Alunos<\/a><br>\r\n\t\t<a href=\"professor.jsp\">Manter Professor<\/a><br>\r\n\t\t<a href=\"ProfessorServlet?acao=Listar\">Listas Professor<\/a><br>\r\n\t\t<a href=\"usuario.jsp\">Manter Usuario<\/a><br>\r\n\t\t<a href=\"UsuarioServlet?acao=Listar\">Listar Usuario<\/a><br>\r\n\t\t<a href=\"turma.jsp\">Manter Turma<\/a><br>\r\n\t\t<a href=\"TurmaServlet?acao=Listar\">Listar Turma<\/a><br>\r\n\t<\/div>\r\n<\/body>\r\n<\/html>\r\n<\/pre>\n<p>  Essa op\u00e7\u00e3o de menu nos levar\u00e1 at\u00e9 a p\u00e1gina de cadastro utilizando JSF.<\/p>\n<p>  As primeiras linhas determinam que vamos utilizar JFS, com as URIs dentro da tag <html>. A URI xmlns:p=”http:\/\/primefaces.org\/ui” informa que utilizaremos o framework Primefaces.<\/p>\n<p>Observe que para cada campo texto temos um atributo value apontando para uma propriedade da entidade aluno. Veja o exemplo de matr\u00edcula:<br \/>\n   <h:inputText id=\"matricula\" value=\"#{alunoMB.aluno.matricula}\" \/>. Isso significa que tudo que eu digitado no campo matr\u00edcula ser\u00e1 atribu\u00eddo a um objeto aluno.matr\u00edcula. Isso ocorre atrav\u00e9s de uma classe Managed Bean. Ela faz, de forma mais simples, o que as classes <i>Servlets<\/i> fazem.<\/p>\n<pre lang=\"java\" line=\"1\">\r\n<html xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\"\r\n\txmlns:h=\"http:\/\/java.sun.com\/jsf\/html\"\r\n\txmlns:f=\"http:\/\/java.sun.com\/jsf\/core\"\r\n\txmlns:p=\"http:\/\/primefaces.org\/ui\">\r\n<h:head>\r\n<\/h:head>\r\n<h:body>\r\n\t<p:growl  id=\"mensagem\" showDetail=\"true\" autoUpdate=\"true\"\r\n\t\tclosable=\"true\" \/>\r\n\r\n\t<h:form id=\"frmAluno\">\r\n\t\t<p:panelGrid columns=\"2\" style=\"horizontal-align:center\">\r\n\t\t\t<h:outputText value=\"Matricula:\" \/>\r\n\t\t\t<h:inputText id=\"matricula\" value=\"#{alunoMB.aluno.matricula}\" \/>\r\n\r\n\t\t\t<h:outputLabel for=\"nome\" value=\"Nome:\" \/>\r\n\t\t\t<h:inputText id=\"nome\" value=\"#{alunoMB.aluno.nome}\" \/>\r\n\t\t\t<h:outputLabel value=\"Telefone:\" \/>\r\n\t\t\t<h:inputText id=\"telefone\" value=\"#{alunoMB.aluno.telefone}\" \/>\r\n\t\t\t<h:outputLabel value=\"Email:\" \/>\r\n\t\t\t<h:inputText id=\"email\" value=\"#{alunoMB.aluno.email}\" \/>\r\n\t\t\t<h:outputLabel value=\"Data Cadastro:\" \/>\r\n\t\t\t<p:calendar value=\"#{alunoMB.aluno.dataCadastro}\" locale=\"pt_BR\"\r\n\t\t\t\tid=\"dataCadastro\" showButtonPanel=\"true\">\r\n\t\t\t\t<f:convertDateTime pattern=\"dd\/MM\/yyyy\" \/>\r\n\t\t\t<\/p:calendar>\r\n\t\t<\/p:panelGrid>\r\n\t\t<p:panelGrid columns=\"6\">\r\n\t\t\t<h:commandButton action=\"#{alunoMB.incluir}\" value=\"Incluir\" update=\"tabela\" \/>\r\n\t\t\t<h:commandButton action=\"#{alunoMB.alterar}\" value=\"alterar\"\tupdate=\"tabela\" \/>\r\n\t\t\t<h:commandButton action=\"#{alunoMB.consultar}\" value=\"Consultar\" update=\"tabela, :frmAluno\" \/>\r\n\t\t\t<h:commandButton action=\"#{alunoMB.listar}\" value=\"Listar\" update=\"tabela\" \/>\r\n\t\t\t<h:commandButton action=\"#{alunoMB.excluir}\" value=\"Excluir\"\tupdate=\"tabela\" \/>\r\n\t\t\t<h:commandButton action=\"#{alunoMB.limpar}\" value=\"Limpar\" update=\"tabela\" \/>\r\n\r\n\t\t<\/p:panelGrid>\r\n\t<\/h:form>\r\n\t<p:dataTable id=\"tabela\" var=\"item\" value=\"#{alunoMB.lista}\"\r\n\t\tpaginator=\"true\" rows=\"50\" emptyMessage=\"N\u00e3o h\u00e1 registros na lista\"\r\n\t\tpaginatorTemplate=\"{CurrentPageReport}  {FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink} {RowsPerPageDropdown}\"\r\n\t\trowsPerPageTemplate=\"10,15,25,50,100\">\r\n\t\t<f:facet name=\"header\">Lista de Alunos<\/f:facet>\r\n\t\t<p:column headerText=\"ID\" style=\"width: 10%;\"\r\n\t\t\tsortBy=\"#{item.matricula}\">\r\n\t\t\t<h:outputText value=\"#{item.matricula}\" \/>\r\n\t\t<\/p:column>\r\n\t\t<p:column headerText=\"Nome\" style=\"width: 25%;\" sortBy=\"#{item.nome}\">\t<h:outputText value=\"#{item.nome}\" \/>\r\n\t\t<\/p:column>\r\n\t\t<p:column headerText=\"Telefone\" style=\"width: 25%;\" sortBy=\"#{item.telefone}\">\r\n\t\t\t<h:outputText value=\"#{item.telefone}\" \/><\/p:column>\r\n\t\t<p:column headerText=\"E-mail\" style=\"width: 25%;\" sortBy=\"#{item.email}\">\r\n\t\t\t<h:outputText value=\"#{item.email}\" \/>\r\n\t\t<\/p:column>\r\n\t<\/p:dataTable>\r\n<\/h:body>\r\n<\/html>\r\n<\/pre>\n<p>  No arquivo web.xml fazemos algumas configura\u00e7\u00f5es para que o nosso projeto esteja preparado para executar JSF. Essas configura\u00e7\u00f5es s\u00e3o opcionais para utiliza\u00e7\u00e3o do <a href=\"http:\/\/www.primefaces.org\/gettingStarted\" target=\"_blank\">Framework Primefaces<\/a>.<\/p>\n<pre lang=\"java\" line=\"1\">\r\n\r\n<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n<web-app xmlns:xsi=\"http:\/\/www.w3.org\/2001\/XMLSchema-instance\"\r\n\txmlns=\"http:\/\/java.sun.com\/xml\/ns\/javaee\" xmlns:web=\"http:\/\/java.sun.com\/xml\/ns\/javaee\/web-app_2_5.xsd\"\r\n\txsi:schemaLocation=\"http:\/\/java.sun.com\/xml\/ns\/javaee http:\/\/java.sun.com\/xml\/ns\/javaee\/web-app_3_0.xsd\"\r\n\tid=\"WebApp_ID\" version=\"3.0\">\r\n\t<display-name>AcademicNetWebEJB<\/display-name>\r\n\t<welcome-file-list>\r\n\t\t<welcome-file>index.jsp<\/welcome-file>\r\n\t<\/welcome-file-list>\r\n\t<context-param>\r\n\t\t<param-name>javax.faces.PROJECT_STAGE<\/param-name>\r\n\t\t<param-value>Development<\/param-value>\r\n\t<\/context-param>\r\n\t<servlet>\r\n\t\t<servlet-name>Faces Servlet<\/servlet-name>\r\n\t\t<servlet-class>javax.faces.webapp.FacesServlet<\/servlet-class>\r\n\t\t<load-on-startup>1<\/load-on-startup>\r\n\t<\/servlet>\r\n\t<servlet-mapping>\r\n\t\t<servlet-name>Faces Servlet<\/servlet-name>\r\n\t\t<url-pattern>*.jsf<\/url-pattern>\r\n\t\t<url-pattern>*.faces<\/url-pattern>\r\n\t\t<url-pattern>*.xhtml<\/url-pattern>\r\n\t<\/servlet-mapping>\t\r\n<\/web-app>\r\n\r\n<\/pre>\n<p>  Veja o c\u00f3digo do nosso “alunoMB”. A novidade aqui \u00e9 a anota\u00e7\u00e3o @ManagedBean. Isso determina que nossa classe \u00e9 um tipo especial e que pode ser associada a uma<br \/>\ntela. Neste caso este Managed Bean est\u00e1 associado \u00e0 tela de aluno. Ela tem os m\u00e9todos necess\u00e1rios para incluir, alterar, consultar, excluir e listar alunos.<\/p>\n<pre lang=\"java\" line=\"1\">\r\n\r\npackage br.com.feltex.academicnet.mb;\r\n\r\nimport java.io.Serializable;\r\nimport java.util.ArrayList;\r\nimport java.util.List;\r\n\r\nimport javax.faces.application.FacesMessage;\r\nimport javax.faces.bean.ManagedBean;\r\nimport javax.faces.context.FacesContext;\r\n\r\nimport br.com.feltex.academicnet.dao.AlunoDAO;\r\nimport br.com.feltex.academicnet.dao.DAOFactory;\r\nimport br.com.feltex.academicnet.entidade.Aluno;\r\n\r\n@ManagedBean(name = \"alunoMB\")\r\npublic class AlunoMB implements Serializable {\r\n\r\n\tprivate static final long serialVersionUID = 8103328274400432976L;\r\n\tprivate Aluno aluno;\r\n\tprivate List<Aluno> lista = new ArrayList<>();\r\n\r\n\tAlunoDAO dao = DAOFactory.getAlunoDAO();\r\n\r\n\tpublic AlunoMB() {\r\n\t\taluno = new Aluno();\r\n\t\tlistar();\r\n\t}\r\n\r\n\tpublic void alterar() {\r\n\t\tSystem.out.println(\"Alterar aluno\");\r\n\t\tdao.alterar(aluno);\r\n\t\tlistar();\r\n\t\tFacesContext.getCurrentInstance().addMessage(\r\n\t\t\t\tnull,\r\n\t\t\t\tnew FacesMessage(FacesMessage.SEVERITY_INFO,\r\n\t\t\t\t\t\t\"Manuten\u00e7\u00e3o de usu\u00e1rio: \",\r\n\t\t\t\t\t\t\"Usuario alterado com sucesso!\"));\r\n\t}\r\n\r\n\tpublic void consultar() {\r\n\t\tlong matriculaConsulta = aluno.getMatricula();\r\n\t\t\t\tSystem.out.println(\"Consultar\");\r\n\t\taluno = dao.consultar(aluno);\r\n\t\tif (aluno == null || aluno.getMatricula() == 0) {\r\n\t\t\tFacesContext.getCurrentInstance().addMessage(\r\n\t\t\t\t\tnull,\r\n\t\t\t\t\tnew FacesMessage(FacesMessage.SEVERITY_ERROR,\r\n\t\t\t\t\t\t\t\"Manuten\u00e7\u00e3o de usu\u00e1rio: \",\r\n\t\t\t\t\t\t\t\"Usuario n\u00e3o encontrado matr\u00edcula:\" + matriculaConsulta + \"!\"));\r\n\t\t}\r\n\t\tlistar();\r\n\r\n\t}\r\n\r\n\tpublic void excluir() {\r\n\t\tSystem.out.println(\"Excluir aluno\");\r\n\t\tdao.excluir(aluno);\r\n\t\tlistar();\r\n\t\tFacesContext.getCurrentInstance().addMessage(\r\n\t\t\t\tnull,\r\n\t\t\t\tnew FacesMessage(FacesMessage.SEVERITY_INFO,\r\n\t\t\t\t\t\t\"Manuten\u00e7\u00e3o de usu\u00e1rio: \",\r\n\t\t\t\t\t\t\"Usuario exclu\u00eddo com sucesso!\"));\r\n\t}\r\n\r\n\tpublic Aluno getAluno() {\r\n\t\treturn aluno;\r\n\t}\r\n\r\n\tpublic List<Aluno> getLista() {\r\n\t\treturn lista;\r\n\t}\r\n\r\n\tpublic void incluir() {\r\n\t\tSystem.out.println(\"Incluir aluno\");\r\n\t\tdao.inserir(aluno);\r\n\t\tlistar();\r\n\t\tFacesContext.getCurrentInstance().addMessage(\r\n\t\t\t\tnull,\r\n\t\t\t\tnew FacesMessage(FacesMessage.SEVERITY_INFO,\r\n\t\t\t\t\t\t\"Manuten\u00e7\u00e3o de usu\u00e1rio: \",\r\n\t\t\t\t\t\t\"Usuario incluido com sucesso!\"));\r\n\t}\r\n\r\n\tpublic void limpar() {\r\n\t\tSystem.out.println(\"Limpar\");\r\n\t\tSystem.out.println(aluno);\r\n\t\taluno = new Aluno();\r\n\t}\r\n\r\n\tpublic void listar() {\r\n\t\tSystem.out.println(\"Listar aluno\");\r\n\t\tlista = dao.listar();\r\n\t}\r\n\r\n\tpublic void setAluno(Aluno aluno) {\r\n\t\tthis.aluno = aluno;\r\n\t}\r\n\r\n\tpublic void setLista(List<Aluno> lista) {\r\n\t\tthis.lista = lista;\r\n\t}\r\n}\r\n<\/pre>\n<p>   Depois compare esse managedBean com o servlet “AlunoServlet”.  <\/p>\n<p>  O nosso ManagedBean utilizar um padr\u00e3o de projeto DAOFactory, ou seja, existe uma classe que gera uma inst\u00e2ncia de um objeto que acessa o Banco de dados.<br \/>\n  AlunoDAO dao = DAOFactory.getAlunoDAO();<\/p>\n<p>  C\u00f3digo abaixo:<\/p>\n<pre lang=\"java\" line=\"1\">\r\npackage br.com.feltex.academicnet.dao;\r\n\r\nimport br.com.feltex.academicnet.dao.hibernate.AlunoHibernateDAO;\r\nimport br.com.feltex.academicnet.dao.jdbc.ProfessorDAO;\r\nimport br.com.feltex.academicnet.dao.jdbc.ProfessorJDBCDAO;\r\nimport br.com.feltex.academicnet.dao.jdbc.TurmaDAO;\r\nimport br.com.feltex.academicnet.dao.jdbc.TurmaJDBCDAO;\r\nimport br.com.feltex.academicnet.dao.jdbc.UsuarioJDCBDAO;\r\n\r\npublic class DAOFactory {\r\n\r\n\tpublic static AlunoDAO getAlunoDAO() {\r\n\t\treturn new AlunoHibernateDAO();\r\n\t}\r\n\r\n\tpublic static ProfessorDAO getProfessorDAO() {\r\n\t\treturn new ProfessorJDBCDAO();\r\n\t}\r\n\r\n\tpublic static TurmaDAO getTurmaDAO() {\r\n\t\treturn new TurmaJDBCDAO();\r\n\t}\r\n\r\n\tpublic static UsuarioDAO getUsuarioDAO() {\r\n\t\treturn new UsuarioJDCBDAO();\r\n\t}\r\n}\r\n<\/pre>\n<p> Por exemplo o m\u00e9todo “getAlunoDAO” nos retorna um objeto que acessa o banco de dados via Hibernate e o m\u00e9todo getProfessorDAO retorna um acesso ao mesmo Banco de Dados via JDBC. Voc\u00ea pode pensar, mas quando isso seria \u00fatil de verdade?<\/p>\n<p>  Imagine um sistema que temos Sistema de PDV (Ponto de Vendas). Meu sistema deve estar preparado para acessar qualquer banco de dados. Para isso o meu DAOFactory pode nos atender gerando objetos diferentes de acordo com par\u00e2metros que eu informar.<\/p>\n<p> Minha classe “AlunoHibernateDAO” implementa a interface “AlunoDAO” que define a assinatura de todos os m\u00e9todos necess\u00e1rios para acesso a banco de dados para a tabela aluno. Neste exemplo todo o controle de transa\u00e7\u00e3o \u00e9 gerenciado por nossa aplica\u00e7\u00e3o. \u00c9 o chamado Bean Transation Management.<\/p>\n<pre lang=\"java\" line=\"1\">\r\npackage br.com.feltex.academicnet.dao.hibernate;\r\n\r\nimport java.util.ArrayList;\r\nimport java.util.List;\r\n\r\nimport org.hibernate.Criteria;\r\nimport org.hibernate.Session;\r\nimport org.hibernate.criterion.Order;\r\nimport org.hibernate.criterion.Restrictions;\r\n\r\nimport br.com.feltex.academicnet.dao.AlunoDAO;\r\nimport br.com.feltex.academicnet.entidade.Aluno;\r\nimport br.com.feltex.hibernate.util.HibernateUtil;\r\n\r\npublic class AlunoHibernateDAO implements AlunoDAO {\r\n\r\n\tprivate Session session;\r\n\r\n\tpublic void alterar(Aluno p) {\r\n\t\ttry {\r\n\t\t\tsession = HibernateUtil.getSession();\r\n\t\t\tsession.beginTransaction();\r\n\t\t\tsession.update(p);\r\n\t\t\tsession.getTransaction().commit();\r\n\t\t} catch (Exception e) {\r\n\t\t\tsession.getTransaction().rollback();\r\n\t\t\te.printStackTrace();\r\n\t\t} finally {\r\n\t\t\tsession.close();\r\n\t\t}\r\n\t}\r\n\r\n\tpublic Aluno consultar(Aluno aluno) {\r\n\t\tAluno retorno = new Aluno();\r\n\t\ttry {\r\n\t\t\tsession = HibernateUtil.getSession();\r\n\t\t\tsession.beginTransaction();\r\n\t\t\tretorno = (Aluno) session.get(Aluno.class, aluno.getMatricula());\r\n\t\t\tsession.getTransaction().commit();\r\n\t\t} catch (Exception e) {\r\n\t\t\tsession.getTransaction().rollback();\r\n\t\t\te.printStackTrace();\r\n\t\t} finally {\r\n\t\t\tsession.close();\r\n\t\t}\r\n\t\treturn retorno;\r\n\t}\r\n\r\n\tpublic void excluir(Aluno p) {\r\n\t\ttry {\r\n\t\t\tsession = HibernateUtil.getSession();\r\n\t\t\tsession.beginTransaction();\r\n\t\t\tsession.delete(p);\r\n\t\t\tsession.getTransaction().commit();\r\n\t\t} catch (Exception e) {\r\n\t\t\tsession.getTransaction().rollback();\r\n\t\t\te.printStackTrace();\r\n\t\t} finally {\r\n\t\t\tsession.close();\r\n\t\t}\r\n\t}\r\n\r\n\tpublic boolean existe(Aluno aluno) {\r\n\r\n\t\tAluno a = consultar(aluno);\r\n\t\treturn (a.getMatricula() != null);\r\n\t}\r\n\r\n\tpublic void inserir(Aluno p) {\r\n\t\ttry {\r\n\t\t\tsession = HibernateUtil.getSession();\r\n\t\t\tsession.beginTransaction();\r\n\t\t\tsession.save(p);\r\n\t\t\tsession.getTransaction().commit();\r\n\t\t} catch (Exception e) {\r\n\t\t\tsession.getTransaction().rollback();\r\n\t\t\te.printStackTrace();\r\n\t\t} finally {\r\n\t\t\tsession.close();\r\n\t\t}\r\n\t}\r\n\r\n\t@SuppressWarnings(\"unchecked\")\r\n\tpublic List<Aluno> listar() {\r\n\t\tList<Aluno> lista = new ArrayList<Aluno>();\r\n\t\ttry {\r\n\t\t\tsession = HibernateUtil.getSession();\r\n\t\t\tsession.beginTransaction();\r\n\t\t\tlista = (List<Aluno>) session.createCriteria(Aluno.class).list();\r\n\t\t\tsession.getTransaction().commit();\r\n\t\t} catch (Exception e) {\r\n\t\t\tsession.getTransaction().rollback();\r\n\t\t\te.printStackTrace();\r\n\t\t} finally {\r\n\t\t\tsession.close();\r\n\t\t}\r\n\t\treturn lista;\r\n\t}\r\n\r\n\t@SuppressWarnings(\"unchecked\")\r\n\tpublic List<Aluno> listar(Aluno aluno) {\r\n\t\tCriteria c = session.createCriteria(Aluno.class);\r\n\t\tif (aluno.getNome().length() > 0) {\r\n\t\t\tc.add(Restrictions.like(\"nome\", aluno.getNome() + \"%\"));\r\n\t\t}\r\n\t\tc.addOrder(Order.asc(\"nome\"));\r\n\t\treturn (List<Aluno>) c.list();\r\n\t}\r\n}\r\n<\/pre>\n<p> O arquivo de configura\u00e7\u00e3o <b>hibernate.cfg.xml<\/b>. \u00c9 nele que informa\u00e7\u00e3o os dados de configura\u00e7\u00e3o de acesso ao banco de dados. Servidor, Porta, Nome do Banco, usu\u00e1rio e senha s\u00e3o as informa\u00e7\u00f5es b\u00e1sicas para acesso do nosso Banco.<\/p>\n<p><code><\/p>\n<p>hibernate.dialect => Define qual o \"dialeto\" ser\u00e1 utilizado no banco de dados. Neste caso o dialeto para MySQL. Veja no final deste artigo o link para o cat\u00e1logo de <i>dialects<\/i><br \/>\nhibernate.show_sql => Define se os comandos SQL gerados pelo Hibernate devem ser mostrados. (true ou false)<br \/>\nhibernate.format_sql => Define se os comando SQL ter\u00e3o quebra de linha a parte significativa do script<br \/>\nhibernate.jdbc.batch_size => Define a grava\u00e7\u00e3o de dados em lote.<br \/>\nhibernate.hbm2ddl.auto => Poss\u00edveis valores e a\u00e7\u00f5es<br \/>\n validate: validar o esquema, n\u00e3o faz altera\u00e7\u00f5es para o banco de dados.<br \/>\n update: atualizar o esquema.<br \/>\n create: cria o esquema, destruindo dados anteriores.<br \/>\n create-drop: remover o esquema no final da sess\u00e3o.<br \/>\n<\/code><\/p>\n<p>No final a tag <mapping> serve para mapear as entidades que ser\u00e3o utilizadas no Hibernate. <\/p>\n<p><b>ATEN\u00c7\u00c3O> N\u00e3o esque\u00e7a de adicionar a annotation @Entity a todas classes que foram informadas nas tags mapping<\/b><\/p>\n<pre lang=\"java\" line=\"1\">\r\n<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n<!DOCTYPE hibernate-configuration PUBLIC\r\n\"-\/\/Hibernate\/Hibernate Configuration DTD 3.0\/\/EN\"\r\n\"http:\/\/hibernate.sourceforge.net\/hibernate-configuration-3.0.dtd\">\r\n<hibernate-configuration>\r\n\t<session-factory>\r\n\t\t <property name=\"hibernate.connection.driver_class\">com.mysql.jdbc.Driver<\/property>\r\n        <property name=\"hibernate.connection.url\">jdbc:mysql:\/\/localhost:3306\/bdacademicnet<\/property>\r\n        <property name=\"hibernate.connection.username\">root<\/property>\r\n        <property name=\"hibernate.connection.password\">teco01<\/property>\r\n        <property name=\"hibernate.dialect\">org.hibernate.dialect.MySQLDialect<\/property>\r\n\t\t<property name=\"hibernate.show_sql\">true<\/property>\r\n\t\t<property name=\"hibernate.format_sql\">true<\/property>\r\n\t\t<property name=\"hibernate.jdbc.batch_size\">20<\/property>\r\n\t\t\r\n\t\t\r\n\t\t<property name=\"hibernate.hbm2ddl.auto\">update<\/property>\r\n\t\t\r\n\t\t<!-- validate | update | create | create-drop -->\r\n\t\t<mapping class=\"br.com.feltex.academicnet.entidade.Aluno\" \/>\r\n\t\t<mapping class=\"br.com.feltex.academicnet.entidade.Turma\" \/>\t\t\r\n\t<\/session-factory>\r\n<\/hibernate-configuration>\r\n<\/pre>\n<p><code><br \/>\nDICA: Existem 2 arquivos extras de configura\u00e7\u00e3o do Hibernate. Esses arquivos <n>n\u00e3o<\/n> s\u00e3o necess\u00e1rios no projeto.<br \/>\nCaso voc\u00ea queria ver exemplos de configura\u00e7\u00e3o para PostgreSQL(hibernate.postgresql.cfg.xml) ou MySQL(hibernate.mysql.cfg.xml).<br \/>\nServem como apoio para altera\u00e7\u00f5es do arquivo: hibernate.cfg.xml<br \/>\n<\/code><\/p>\n<p>Deixei dispon\u00edvel o projeto completo com o c\u00f3digo fonte para auxiliar a todos no processo de aprendizado. Para baixar: <a href=\"https:\/\/www.feltex.com.br\/felix\/java\/exemplos\/AcademicNetWebJSF.war\" target=\"_blank\">Clique aqui<\/a><\/p>\n<p><H2>Conclus\u00e3o<\/H2><br \/>\n   Este artigo mostra como fazer um CRUD simples com utiliza\u00e7\u00e3o do JSF utilizando o framework Primefaces junto com MySQL e Hibernate. Este mesmo exemplo funciona com JSP, JDBC e Servlet. Assim o leitor poder\u00e1 fazer compara\u00e7\u00f5es de como funcionam essas tecnologias.<\/p>\n<p><H2>Links relacionados <\/h2>\n<p>Recomendo que leia: <a href=\"https:\/\/www.feltex.com.br\/felix\/gerenciar-transacao-jpa-via-filtro-projeto-web\/\" title=\"Como gerenciar a transa\u00e7\u00e3o JPA com Hibernate via Filtro em projeto Web\">Como gerenciar a transa\u00e7\u00e3o JPA com Hibernate via Filtro em projeto Web<\/a><\/p>\n<p>Leia tamb\u00e9m: <a href=\"https:\/\/www.feltex.com.br\/felix\/exemplo-completo-com-jsf-primefaces-ejb-hibernate-mysql-jms-topic\/\" title=\"Exemplo completo com JSF Primefaces + EJB + Hibernate + MySQL + JMS (Topic)\">Exemplo completo com JSF Primefaces + EJB + Hibernate + MySQL + JMS (Topic)<\/a><\/p>\n<p>Voc\u00ea ir\u00e1 gostar:<a href=\"http:\/\/docs.oracle.com\/javaee\/6\/tutorial\/doc\/bnciy.html\" target=\"_blank\">Bean Transaction Management<\/a><br \/>\n<a href=\"http:\/\/hibernate.org\/orm\/\" target=\"_blank\">Hibernate Manual<\/a><br \/>\n<a href=\"http:\/\/docs.jboss.org\/hibernate\/orm\/3.5\/javadocs\/org\/hibernate\/dialect\/package-summary.html\" target=\"_blank\">Hibernate Dialects<\/a><\/p>\n<p>Abra\u00e7os e bons estudos.<br \/>\n<H2>N\u00e3o se esque\u00e7a de curtir este post nas redes sociais. D\u00ea a sua contribui\u00e7\u00e3o social e ajude o autor:<\/H2><\/p>\n<!-- AddThis Advanced Settings generic via filter on the_content --><!-- AddThis Share Buttons generic via filter on the_content -->","protected":false},"excerpt":{"rendered":"<p>Exemplo completo com JSF Primefaces + Hibernate + MySQL Ol\u00e1 Amigos, Hoje criaremos um projeto completo com as tecnologias java: JSF (Primefaces) + Hibernate + MySQL ou PostgreSQL. E como de costume iniciaremos com uma breve descri\u00e7\u00e3o de cada uma …<\/p>\n<p class=\"read-more\"> <a class=\"more-link\" href=\"https:\/\/www.feltex.com.br\/felix\/exemplo-completo-com-jsf-primefaces-hibernate-mysql\/\"> <span class=\"screen-reader-text\">Exemplo completo com JSF Primefaces + Hibernate + MySQL<\/span> Read More »<\/a><\/p>\n<p><!-- AddThis Advanced Settings generic via filter on get_the_excerpt --><!-- AddThis Share Buttons generic via filter on get_the_excerpt --><\/p>\n","protected":false},"author":1,"featured_media":1716,"comment_status":"open","ping_status":"open","sticky":true,"template":"","format":"standard","meta":{"ngg_post_thumbnail":0},"categories":[16,21,1,4,14,9],"tags":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v17.9 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Exemplo completo com JSF Primefaces + Hibernate + MySQL<\/title>\n<meta name=\"description\" content=\"Exemplo completo com JSF Primefaces + Hibernate + MySQL\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.feltex.com.br\/felix\/exemplo-completo-com-jsf-primefaces-hibernate-mysql\/\" \/>\n<meta property=\"og:locale\" content=\"pt_BR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Exemplo completo com JSF Primefaces + Hibernate + MySQL\" \/>\n<meta property=\"og:description\" content=\"Exemplo completo com JSF Primefaces + Hibernate + MySQL\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.feltex.com.br\/felix\/exemplo-completo-com-jsf-primefaces-hibernate-mysql\/\" \/>\n<meta property=\"og:site_name\" content=\"Aprenda Java\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/feltex.br\" \/>\n<meta property=\"article:published_time\" content=\"2014-04-08T04:07:40+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2014-12-30T10:44:19+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.feltex.com.br\/felix\/wp-content\/uploads\/2014\/04\/Primefaces.png\" \/>\n\t<meta property=\"og:image:width\" content=\"256\" \/>\n\t<meta property=\"og:image:height\" content=\"256\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"Andr\u00e9 F\u00e9lix\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. tempo de leitura\" \/>\n\t<meta name=\"twitter:data2\" content=\"8 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.feltex.com.br\/felix\/#website\",\"url\":\"https:\/\/www.feltex.com.br\/felix\/\",\"name\":\"Aprenda Java\",\"description\":\"Cursos de java, SQL e Engenharia de Software\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.feltex.com.br\/felix\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"pt-BR\"},{\"@type\":\"ImageObject\",\"@id\":\"https:\/\/www.feltex.com.br\/felix\/exemplo-completo-com-jsf-primefaces-hibernate-mysql\/#primaryimage\",\"inLanguage\":\"pt-BR\",\"url\":\"https:\/\/www.feltex.com.br\/felix\/wp-content\/uploads\/2014\/04\/Primefaces.png\",\"contentUrl\":\"https:\/\/www.feltex.com.br\/felix\/wp-content\/uploads\/2014\/04\/Primefaces.png\",\"width\":256,\"height\":256},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.feltex.com.br\/felix\/exemplo-completo-com-jsf-primefaces-hibernate-mysql\/#webpage\",\"url\":\"https:\/\/www.feltex.com.br\/felix\/exemplo-completo-com-jsf-primefaces-hibernate-mysql\/\",\"name\":\"Exemplo completo com JSF Primefaces + Hibernate + MySQL\",\"isPartOf\":{\"@id\":\"https:\/\/www.feltex.com.br\/felix\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.feltex.com.br\/felix\/exemplo-completo-com-jsf-primefaces-hibernate-mysql\/#primaryimage\"},\"datePublished\":\"2014-04-08T04:07:40+00:00\",\"dateModified\":\"2014-12-30T10:44:19+00:00\",\"author\":{\"@id\":\"https:\/\/www.feltex.com.br\/felix\/#\/schema\/person\/1e49f842c6254b4561b66ccf573c2069\"},\"description\":\"Exemplo completo com JSF Primefaces + Hibernate + MySQL\",\"breadcrumb\":{\"@id\":\"https:\/\/www.feltex.com.br\/felix\/exemplo-completo-com-jsf-primefaces-hibernate-mysql\/#breadcrumb\"},\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.feltex.com.br\/felix\/exemplo-completo-com-jsf-primefaces-hibernate-mysql\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.feltex.com.br\/felix\/exemplo-completo-com-jsf-primefaces-hibernate-mysql\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Exemplo completo com JSF Primefaces + Hibernate + MySQL\"}]},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.feltex.com.br\/felix\/#\/schema\/person\/1e49f842c6254b4561b66ccf573c2069\",\"name\":\"Andr\\u00e9 F\\u00e9lix\",\"image\":{\"@type\":\"ImageObject\",\"@id\":\"https:\/\/www.feltex.com.br\/felix\/#personlogo\",\"inLanguage\":\"pt-BR\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/d2d9cc82cab40245e6f803982b1448e6?s=96&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/d2d9cc82cab40245e6f803982b1448e6?s=96&r=g\",\"caption\":\"Andr\\u00e9 F\\u00e9lix\"},\"sameAs\":[\"http:\/\/www.feltex.com.br\"],\"url\":\"https:\/\/www.feltex.com.br\/felix\/author\/andre.felix\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Exemplo completo com JSF Primefaces + Hibernate + MySQL","description":"Exemplo completo com JSF Primefaces + Hibernate + MySQL","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.feltex.com.br\/felix\/exemplo-completo-com-jsf-primefaces-hibernate-mysql\/","og_locale":"pt_BR","og_type":"article","og_title":"Exemplo completo com JSF Primefaces + Hibernate + MySQL","og_description":"Exemplo completo com JSF Primefaces + Hibernate + MySQL","og_url":"https:\/\/www.feltex.com.br\/felix\/exemplo-completo-com-jsf-primefaces-hibernate-mysql\/","og_site_name":"Aprenda Java","article_publisher":"https:\/\/www.facebook.com\/feltex.br","article_published_time":"2014-04-08T04:07:40+00:00","article_modified_time":"2014-12-30T10:44:19+00:00","og_image":[{"width":256,"height":256,"url":"https:\/\/www.feltex.com.br\/felix\/wp-content\/uploads\/2014\/04\/Primefaces.png","type":"image\/png"}],"twitter_misc":{"Escrito por":"Andr\u00e9 F\u00e9lix","Est. tempo de leitura":"8 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebSite","@id":"https:\/\/www.feltex.com.br\/felix\/#website","url":"https:\/\/www.feltex.com.br\/felix\/","name":"Aprenda Java","description":"Cursos de java, SQL e Engenharia de Software","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.feltex.com.br\/felix\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"pt-BR"},{"@type":"ImageObject","@id":"https:\/\/www.feltex.com.br\/felix\/exemplo-completo-com-jsf-primefaces-hibernate-mysql\/#primaryimage","inLanguage":"pt-BR","url":"https:\/\/www.feltex.com.br\/felix\/wp-content\/uploads\/2014\/04\/Primefaces.png","contentUrl":"https:\/\/www.feltex.com.br\/felix\/wp-content\/uploads\/2014\/04\/Primefaces.png","width":256,"height":256},{"@type":"WebPage","@id":"https:\/\/www.feltex.com.br\/felix\/exemplo-completo-com-jsf-primefaces-hibernate-mysql\/#webpage","url":"https:\/\/www.feltex.com.br\/felix\/exemplo-completo-com-jsf-primefaces-hibernate-mysql\/","name":"Exemplo completo com JSF Primefaces + Hibernate + MySQL","isPartOf":{"@id":"https:\/\/www.feltex.com.br\/felix\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.feltex.com.br\/felix\/exemplo-completo-com-jsf-primefaces-hibernate-mysql\/#primaryimage"},"datePublished":"2014-04-08T04:07:40+00:00","dateModified":"2014-12-30T10:44:19+00:00","author":{"@id":"https:\/\/www.feltex.com.br\/felix\/#\/schema\/person\/1e49f842c6254b4561b66ccf573c2069"},"description":"Exemplo completo com JSF Primefaces + Hibernate + MySQL","breadcrumb":{"@id":"https:\/\/www.feltex.com.br\/felix\/exemplo-completo-com-jsf-primefaces-hibernate-mysql\/#breadcrumb"},"inLanguage":"pt-BR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.feltex.com.br\/felix\/exemplo-completo-com-jsf-primefaces-hibernate-mysql\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.feltex.com.br\/felix\/exemplo-completo-com-jsf-primefaces-hibernate-mysql\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Exemplo completo com JSF Primefaces + Hibernate + MySQL"}]},{"@type":"Person","@id":"https:\/\/www.feltex.com.br\/felix\/#\/schema\/person\/1e49f842c6254b4561b66ccf573c2069","name":"Andr\u00e9 F\u00e9lix","image":{"@type":"ImageObject","@id":"https:\/\/www.feltex.com.br\/felix\/#personlogo","inLanguage":"pt-BR","url":"https:\/\/secure.gravatar.com\/avatar\/d2d9cc82cab40245e6f803982b1448e6?s=96&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/d2d9cc82cab40245e6f803982b1448e6?s=96&r=g","caption":"Andr\u00e9 F\u00e9lix"},"sameAs":["http:\/\/www.feltex.com.br"],"url":"https:\/\/www.feltex.com.br\/felix\/author\/andre.felix\/"}]}},"_links":{"self":[{"href":"https:\/\/www.feltex.com.br\/felix\/wp-json\/wp\/v2\/posts\/551"}],"collection":[{"href":"https:\/\/www.feltex.com.br\/felix\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.feltex.com.br\/felix\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.feltex.com.br\/felix\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.feltex.com.br\/felix\/wp-json\/wp\/v2\/comments?post=551"}],"version-history":[{"count":15,"href":"https:\/\/www.feltex.com.br\/felix\/wp-json\/wp\/v2\/posts\/551\/revisions"}],"predecessor-version":[{"id":1772,"href":"https:\/\/www.feltex.com.br\/felix\/wp-json\/wp\/v2\/posts\/551\/revisions\/1772"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.feltex.com.br\/felix\/wp-json\/wp\/v2\/media\/1716"}],"wp:attachment":[{"href":"https:\/\/www.feltex.com.br\/felix\/wp-json\/wp\/v2\/media?parent=551"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.feltex.com.br\/felix\/wp-json\/wp\/v2\/categories?post=551"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.feltex.com.br\/felix\/wp-json\/wp\/v2\/tags?post=551"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}