Primefaces,Spring 4 with JPA(Hibernate 4 / EclipseLink)示例教程

Java Persistence API是标准规范。它提供了一个由不同实现者框架实现的持久性模型。

目录[ 隐藏 ]

  • 1 Primefaces Spring Hibernate EclipseLink

    • 1.1 Primefaces Spring JPA Hibernate EclipseLink示例所需工具
    • 1.2 Primefaces Spring JPA Hibernate EclipseLink示例项目结构
    • 1.3 Primefaces Spring JPA Hibernate EclipseLink示例数据库表
    • 1.4 Primefaces Spring JPA Hibernate EclipseLink示例域类
    • 1.5 Primefaces Spring JPA Hibernate EclipseLink示例持久性单元
    • 1.6 Primefaces Spring JPA Hibernate EclipseLink示例Maven依赖项
    • 1.7 Hibernate / JPA Spring配置
    • 1.8 EclipseLink / JPA Spring配置
    • 1.9 Primefaces部署描述符
    • 1.10 Spring EmployeeService
    • 1.11 Primefaces Managed Bean - RegisterEmployee
    • 1.12 Primefaces员工注册页面
    • 1.13 Primefaces Spring JPA Hibernate EclipseLink示例摘要

Primefaces Spring Hibernate EclipseLink

HibernateEclipseLink是两种最常用的实现,用于针对某种持久性存储(如关系数据库)持久保存给定的业务模型。因此,本教程将为您提供一个完整的示例,其中包含开发使用以下内容的分层应用程序所需的所有配置步骤:

  1. Primefaces组件开发了一个引人注目的用户界面,旨在处理用户的交互并验证用户的输入。
  2. Hibernate / EclipseLink实现在JPA伞下开发对象/关系映射。
  3. Spring框架作为一种粘合剂,可以将所有东西连接在一起。

我们之前已经讨论过使用Hibernate ORM来持久化给定的域类。但今天我们将只使用基于JPA的配置。

JPA规范以不同的方式进行引导。在hibernate中,我们使用hibernate.cfg.xmlfile 引导了我们的应用程序,但JPA没有指定该文件。

JPA提供了另一种配置方式,它使用persistence.xml位于您classpath和您的META-INF文件夹下的文件。

让我们看看我们如何使用HibernateEclipseLink实现单一注册表单。

Primefaces Spring JPA Hibernate EclipseLink示例所需工具

在继续前进之前,您必须准备应包含以下内容的环境:

  • JDK 1.6+。
  • Eclipse Kepler 4.3。
  • Hibernate 4.3.6.Final。
  • Spring 4.0.3.RELEASE。
  • EclipseLink 2.5.0-RC1
  • Maven构建工具
  • MySQL 5.x.

Primefaces Spring JPA Hibernate EclipseLink示例项目结构

Primefaces Spring JPA Hibernate EclipseLink示例数据库表

我们在MySQL数据库中有Employee表,您可以使用下面的脚本来创建它。


CREATE TABLE `employee` (`EMP_ID` int(11) NOT NULL AUTO_INCREMENT,`EMP_NAME` varchar(45) DEFAULT NULL,`EMP_HIRE_DATE` datetime DEFAULT NULL,`EMP_SALARY` decimal(11,4) DEFAULT NULL,PRIMARY KEY (`EMP_ID`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
  • 员工表包含一个具有自动增量值的主键。

Primefaces Spring JPA Hibernate EclipseLink示例域类

我们还有一个域类将持久存入我们的数据库Employee表。

Employee.java


package com.journaldev.hibernate.jpa.data;import java.util.Date;import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
@Entity
public class Employee {@Id@Column(name="EMP_ID")private long employeeId;@Column(name="EMP_NAME")private String employeeName;@Column(name="EMP_HIRE_DATE")@Temporal(TemporalType.TIMESTAMP)private Date employeeHireDate;@Column(name="EMP_SALARY")private double employeeSalary;public long getEmployeeId() {return employeeId;}public void setEmployeeId(long employeeId) {this.employeeId = employeeId;}public String getEmployeeName() {return employeeName;}public void setEmployeeName(String employeeName) {this.employeeName = employeeName;}public Date getEmployeeHireDate() {return employeeHireDate;}public void setEmployeeHireDate(Date employeeHireDate) {this.employeeHireDate = employeeHireDate;}public double getEmployeeSalary() {return employeeSalary;}public void setEmployeeSalary(double employeeSalary) {this.employeeSalary = employeeSalary;}
}
  • JPA提供了@Entity,它将用于将Employee指示为持久域类。将发生默认映射以便将此持久性实体与其Employee表映射。如果您提供的表名称或类名称不相同,则必须使用@Table。
  • @Id注释用于指示给定Employee实例的标识。由于属性名称和列名称之间存在差异,因此必须提供@column。
  • @Column name annotation采用映射列名的参数。

Primefaces Spring JPA Hibernate EclipseLink示例持久性单元

正如我们之前提到的,JPA提供了一种引导JPA框架的替代方法,它是一个persistence.xml文件。此文件的最小数量应如下所示:

persistence.xml


<persistence 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_2_0.xsd"version="2.0"><!-- Will be referenced in Spring Context File --><persistence-unit name="jpa-persistence" transaction-type="RESOURCE_LOCAL"><class>com.journaldev.hibernate.jpa.data.Employee</class><properties><property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/journaldev" /><property name="javax.persistence.jdbc.user" value="pankaj" /><property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver" /><property name="javax.persistence.jdbc.password" value="pankaj123" /></properties></persistence-unit>
</persistence>

持久性单元应该定义:

  • 持久性单元名称。该名称将由Spring上下文引用。
  • 事务类型 - JPA实现可以选择通过自身(RESOURCE_LOCAL)管理资源,也可以通过应用程序服务器的JTA实现来管理资源。
  • 有关数据库连接的信息

Primefaces Spring JPA Hibernate EclipseLink示例Maven依赖项

所有必需的库都列在pom.xmlMaven自己读取的文件中。

pom.xml


<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.journaldev</groupId><artifactId>Primefaces-Hibernate-JPA-Spring-Integration-Sample</artifactId><packaging>war</packaging><version>0.0.1-SNAPSHOT</version><name>Primefaces-Hibernate-JPA-Spring-Integration-Sample Maven Webapp</name><url>http://maven.apache.org</url><repositories><repository><id>prime-repo</id><name>PrimeFaces Maven Repository</name><url>http://repository.primefaces.org</url><layout>default</layout></repository></repositories><dependencies><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>3.8.1</version><scope>test</scope></dependency><!-- Servlet --><dependency><groupId>javax.servlet</groupId><artifactId>servlet-api</artifactId><version>2.5</version><scope>provided</scope></dependency><!-- Faces Implementation --><dependency><groupId>com.sun.faces</groupId><artifactId>jsf-impl</artifactId><version>2.2.4</version></dependency><!-- Faces Library --><dependency><groupId>com.sun.faces</groupId><artifactId>jsf-api</artifactId><version>2.2.4</version></dependency><!-- Primefaces Version 5 --><dependency><groupId>org.primefaces</groupId><artifactId>primefaces</artifactId><version>5.0</version></dependency><!-- JSP Library --><dependency><groupId>javax.servlet.jsp</groupId><artifactId>javax.servlet.jsp-api</artifactId><version>2.3.1</version></dependency><!-- JSTL Library --><dependency><groupId>javax.servlet</groupId><artifactId>jstl</artifactId><version>1.1.2</version></dependency><!-- Hibernate 4.3.6 core library library --><dependency><groupId>org.hibernate</groupId><artifactId>hibernate-core</artifactId><version>4.3.6.Final</version></dependency><!-- Hibernate 4.3.6 JPA support --><dependency><groupId>org.hibernate</groupId><artifactId>hibernate-entitymanager</artifactId><version>4.3.6.Final</version></dependency><!-- MySQL driver connector library --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.31</version></dependency><!-- Spring ORM --><dependency><groupId>org.springframework</groupId><artifactId>spring-orm</artifactId><version>4.0.3.RELEASE</version></dependency><!-- Spring Web --><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>4.0.3.RELEASE</version></dependency><!-- Dependencies for Eclipse JPA Persistence API --><dependency><groupId>org.eclipse.persistence</groupId><artifactId>eclipselink</artifactId><version>2.5.0-RC1</version></dependency></dependencies><build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><configuration><source>1.6</source><target>1.6</target></configuration></plugin></plugins></build>
</project>

Hibernate / JPA Spring配置

持久使用JPA需要EntityManager的实例。可以通过配置适当的Spring上下文来获取此实例。

applicationContext.xml


<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:tx="http://www.springframework.org/schema/tx"xmlns:context="http://www.springframework.org/schema/context"xmlns:aop="http://www.springframework.org/schema/aop" xmlns:util="http://www.springframework.org/schema/util"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd http://www.springframework.org/schema/context  http://www.springframework.org/schema/context/spring-context-3.2.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.2.xsd"><!-- Enable Spring Annotation Configuration --><context:annotation-config /><!-- Scan for all of Spring components such as Spring Service --><context:component-scan base-package="com.journaldev.spring.service"></context:component-scan><!-- Necessary to get the entity manager injected into the factory bean --><bean class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor" />    <!-- Define Hibernate JPA Vendor Adapter --><bean id="jpaVendorAdapter"class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"><property name="databasePlatform"value="org.hibernate.dialect.MySQLDialect" /></bean>   <!-- Entity Manager Factory --><bean id="entityManagerFactory"class="org.springframework.orm.jpa.LocalEntityManagerFactoryBean"><property name="persistenceUnitName" value="hibernate.jpa"></property><property name="jpaVendorAdapter" ref="jpaVendorAdapter" /></bean><!-- Transaction Manager --><bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager"><property name="entityManagerFactory" ref="entityManagerFactory" /></bean><!-- Detect @Transactional --><tx:annotation-driven transaction-manager="transactionManager" />
</beans>
  1. JPA需要一个entityManagerFactory对象,它是一个实例  org.springframework.orm.jpa.LocalEntityFactoryBean。必须为此实例提供persistenceUnit和JPAVendorAdapter的名称。
  2. @Trasnactional正确使用注释,应定义TransactionManager。
  3. Spring上下文配置的默认名称和位置applicationContext.xml位于WEB-INF文件夹下方。

EclipseLink / JPA Spring配置

EclipseLink将使用相同的配置,需要进行一些小改动才能提供EclipseLink的JPA供应商。只需将jpaVendorAdapter bean 更改为以下,使用的JPA实现将是EclipseLink。

applicationContext.xml

<!-- Define EclipseLink JPA Vendor Adapter --><bean id="jpaVendorAdapter"class="org.springframework.orm.jpa.vendor.EclipseLinkJpaVendorAdapter"><property name="databasePlatform"value="org.eclipse.persistence.platform.database.MySQLPlatform" /><property name="generateDdl" value="false" /><property name="showSql" value="true" /></bean>

Primefaces部署描述符

正确配置Spring需要在Primefaces的部署描述符web.xml应用程序中添加Spring监听器。

web.xml


<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"xsi:schemaLocation="http://java.sun.com/xml/ns/javaeehttp://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"id="WebApp_ID" version="2.5" metadata-complete="true"><servlet><servlet-name>Faces Servlet</servlet-name><servlet-class>javax.faces.webapp.FacesServlet</servlet-class><load-on-startup>1</load-on-startup></servlet><servlet-mapping><servlet-name>Faces Servlet</servlet-name><url-pattern>/faces/*</url-pattern></servlet-mapping><servlet-mapping><servlet-name>Faces Servlet</servlet-name><url-pattern>*.xhtml</url-pattern></servlet-mapping><context-param><description>State saving method: 'client' or 'server' (=default). See JSF Specification 2.5.2</description><param-name>javax.faces.STATE_SAVING_METHOD</param-name><param-value>client</param-value></context-param><listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class></listener><listener><listener-class>com.sun.faces.config.ConfigureListener</listener-class></listener>
</web-app>

Spring EmployeeService

Spring服务是表示层和持久层之间的交互点。如果你熟悉DAO,你可以认为它类似。

EmployeeService.java


package com.journaldev.spring.service;import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;import com.journaldev.hibernate.jpa.data.Employee;@Component
public class EmployeeService {@PersistenceContextprivate EntityManager em;public EntityManager getEm() {return em;}public void setEm(EntityManager em) {this.em = em;}@Transactionalpublic void register(Employee emp) {// Save employeethis.em.persist(emp);}
}
  1. 使用@PersistenceContext注释注入EntityManager 。即使您已经定义了EntityManagerFactory的实例,但是JPA实现将非常智能地为您注入EntityManager的实例。EntityManager与Hibernate中的Session类似。如果您在上下文和活动事务中都调用了任何CRUD操作,那么您的操作将持久存储在持久性存储中。注意em.persist()和在注册方法上使用@Transactional注释。

Primefaces Managed Bean - RegisterEmployee

RegisterEmployee是一个faces托管bean,用于处理用户交互和用户输入的验证。

ResgiterEmployee.java


package com.journaldev.prime.faces.beans;import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;import com.journaldev.jpa.data.Employee;
import com.journaldev.spring.service.EmployeeService;@ManagedBean
@SessionScoped
public class RegisterEmployee {@ManagedProperty("#{employeeService}")private EmployeeService employeeService;private Employee employee = new Employee();public EmployeeService getEmployeeService() {return employeeService;}public void setEmployeeService(EmployeeService employeeService) {this.employeeService = employeeService;}public Employee getEmployee() {return employee;}public void setEmployee(Employee employee) {this.employee = employee;}public String register() {// Calling Business ServiceemployeeService.register(employee);// Add messageFacesContext.getCurrentInstance().addMessage(null,new FacesMessage("The Employee "+this.employee.getEmployeeName()+" Is Registered Successfully"));return "";}
}
  • Spring服务使用使用faces-config.xml声明的Spring el-reslover注入EmployeeService。
  • Register方法将调用委托给注入的EmployeeService实例。因此,EmployeeService将处理实际注册。

Primefaces员工注册页面

index.xhtml


<html xmlns="http://www.w3.org/1999/xhtml"xmlns:ui="http://java.sun.com/jsf/facelets"xmlns:h="http://java.sun.com/jsf/html"xmlns:f="http://java.sun.com/jsf/core"xmlns:p="http://primefaces.org/ui">
<h:head><script name="jquery/jquery.js" library="primefaces"></script><title>Register Employee</title>
</h:head>
<h:form><p:growl id="messages"></p:growl><p:panelGrid columns="2"><p:outputLabel value="Enter Employee Name:"></p:outputLabel><p:inputText value="#{registerEmployee.employee.employeeName}"></p:inputText><p:outputLabel value="Enter Employee Hire Date:"></p:outputLabel><p:calendar value="#{registerEmployee.employee.employeeHireDate}"></p:calendar><p:outputLabel value="Enter Employee Salary:"></p:outputLabel><p:inputText value="#{registerEmployee.employee.employeeSalary}"></p:inputText></p:panelGrid><p:commandButton value="Register" action="#{registerEmployee.register}" update="messages"></p:commandButton>
</h:form>
</html>

Primefaces Spring JPA Hibernate EclipseLink示例摘要

本教程旨在帮助您获得项目中使用的Hibernate和EclipseLink JPA实现。JPA改变了你的生活,它很容易配置,使用和跟踪。它插入了一个默认的日志记录机制,可以帮助您尽快找到问题。通过下面的评论为我们做贡献,并找到下载的源代码。

下载Primefaces Spring JPA Hibernate EclipseLink项目

转载来源:https://www.journaldev.com/4058/primefaces-spring-4-jpa-hibernate-eclipselink-example-tutorial

Primefaces,Spring 4 with JPA(Hibernate 4 / EclipseLink)示例教程相关推荐

  1. Hibernate Validator JSR303示例教程

    Hibernate Validator JSR303示例教程 欢迎使用Hibernate Validator示例教程.数据验证是任何应用程序的组成部分.您将使用Javascript在表示层找到数据验证 ...

  2. 注解的力量 -----Spring 2.5 JPA hibernate 使用方法的点滴整理(四):使用 命名空间 简化配置...

    在(三)里面.我们引入了 <bean class="org.springframework.beans.factory.annotation.AutowiredAnnotationBe ...

  3. 注解的力量 -----Spring 2.5 JPA hibernate 使用方法的点滴整理(六): 一些常用的数据库 注解...

    一. 实体 Bean 每个持久化POJO类都是一个实体Bean, 通过在类的定义中使用 @Entity 注解来进行声明. 声明实体Bean @Entity public class Flight im ...

  4. spring boot(十五)spring boot+thymeleaf+jpa增删改查示例

    快速上手 配置文件 pom包配置 pom包里面添加jpa和thymeleaf的相关包引用 <dependency><groupId>org.springframework.bo ...

  5. 《Java Web高级编程——涵盖WebSockets、Spring Framework、JPA H

    2019独角兽企业重金招聘Python工程师标准>>> <Java Web高级编程--涵盖WebSockets.Spring Framework.JPA Hibernate和S ...

  6. JPA + Hibernate + PostgreSQL + Maven基本配置示例

    JPA + Hibernate + PostgreSQL工程示例. 注意 user 在 postgresql 中为保留关键字,所以如果你persist一个名为User的类的时候就会报语法错误. 创建项 ...

  7. Hibernate命名查询示例 - @NamedQuery

    Hibernate命名查询示例 - @NamedQuery 欢迎使用Hibernate命名查询示例教程.我们看到了如何在Hibernate中使用HQL和Native SQL Query.如果有很多查询 ...

  8. primefaces教程_Primefaces,带有JPA的Spring 4(Hibernate 4 / EclipseLink)示例教程

    primefaces教程 Java Persistence API is a standard specification. It provides a persistence model that' ...

  9. Spring Boot&JPA&Hibernate&Oracle

    在本教程中,我们将展示如何创建一个Spring Boot应用程序,该应用程序通过Hibernate与Oracle数据源进行通信. 先决条件: Eclipse IDE(最新版本) Maven的4 Jav ...

最新文章

  1. (转)Spring中Singleton模式的线程安全
  2. android 修改菜单大小,如何在NavigationView中更改菜单项图标的大小?
  3. 【Qt】Qt5.9编译MySQl5.7驱动
  4. Codeforces Round #561 (Div. 2)ABC
  5. P5437-[XR-2]约定【拉格朗日差值,数学期望】
  6. 初识vue之axios的封装
  7. MySQL入门 (一) : 资料库概论与MySQL的安装
  8. 容器编排技术 -- Kubernetes kubectl edit 命令详解
  9. XML编程-DOM4J
  10. Cookie篡改攻击
  11. C语言编写红色警戒外挂
  12. java-net-php-python-jspm毕业就业管理系统演示录像2019计算机毕业设计程序
  13. matlibplot之条形图
  14. 天池竞赛:Docker 基本操作
  15. uni-app 在mac电脑连接安卓手机进行真机调试
  16. 联想小新 Pro 16 2023 评测
  17. Python环境搭建之OpenCV
  18. Smarty入门教程一----Smarty的安装
  19. Linux easy-rsa制作证书
  20. python撤销_Python 实现还原已撤回的微信消息

热门文章

  1. Mysql: 图解 inner join、left join、right join、full outer join、union、union all的区别
  2. 使用 jQuery Mobile 与 HTML5 开发 Web App (十二) —— jQuery Mobile 页面事件与 deferred
  3. Magento: 后台添加预览按钮 View product in frontend from Magento admin
  4. NSString / NSMutableString 字符串处理,常用代码 (实例)
  5. Elasticsearch整理笔记(四)
  6. 如何用Pygame写游戏(一)
  7. Linux——更换python版本
  8. Linux—目录文件属性和权限管理详解
  9. Java—File类详解及实践
  10. 9206-吃货联盟 需求分析