我们已经探索了如何实现EclipseLink JPA和众所周知的关系数据库(如MySQL)之间的集成。EclipseLink不仅提供与关系数据库平台的集成,还支持MongoDB和Oracle NoSQL数据库。
下一个版本还将使您能够使用:Cassandra,Google Big Table和CouchDB作为NoSQL持久性存储。在本教程中,我们将为您提供一个完整的示例,帮助您与MongoDB和Oracle NoSQL数据库进行JPA集成。
目录[ 隐藏 ]
package com.journaldev.jpa.data;import java.util.Date;import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;import org.eclipse.persistence.nosql.annotations.DataFormatType;
import org.eclipse.persistence.nosql.annotations.Field;
import org.eclipse.persistence.nosql.annotations.NoSql;
@Entity
@NoSql(dataFormat=DataFormatType.MAPPED)
public class Employee {@Id@GeneratedValue@Field(name="_id")private String employeeId;@Fieldprivate String employeeName;@Fieldprivate Date employeeHireDate;@Fieldprivate double employeeSalary;public String getEmployeeId() {return employeeId;}public void setEmployeeId(String 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;}
}
以下是上述代码的详细说明:
@Entity
注释。JPA规范要求该注释。@Id
。此属性应映射到默认的_id属性。如果您已消除此类映射,EMPLOYEEID
则会在Employee集合中添加一个新 列。_id
属性的值由MongoDB和Oracle NoSQL数据库自动生成。@Field
注释来注释Employee的属性。如果它们被淘汰,eclipselink将自动进行映射。如果您没有在自己的MongoDB或Oracle NoSQL中创建Employee集合,eclipselink将在您后面进行创建过程,它将分别插入您的文档(即员工实例)。@NoSql
。此注释将确保持久化的实体不代表关系实体。DataFormat属性指定用于表示存储数据的类型。MongoDB和Oracle NoSQL使用的 Key-BSON
格式类似于结构中的映射,因此使用了MAPPED
值。要连接NoSQL持久性存储,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"><persistence-unit name="eclipselink.mongodb.jpa" transaction-type="RESOURCE_LOCAL"><class>com.journaldev.jpa.data.Employee</class><properties><property name="eclipselink.target-database" value="org.eclipse.persistence.nosql.adapters.mongo.MongoPlatform"/><property name="eclipselink.nosql.connection-spec" value="org.eclipse.persistence.nosql.adapters.mongo.MongoConnectionSpec"/><property name="eclipselink.nosql.property.mongo.port" value="27017"/><property name="eclipselink.nosql.property.mongo.host" value="localhost"/><property name="eclipselink.nosql.property.mongo.db" value="JournalDev"/><property name="eclipselink.logging.level" value="FINEST"/></properties></persistence-unit>
</persistence>
以下是上面列出的代码的详细说明:
persistence.xml
用于定义持久性单元。eclipselink.nosql.connection-spec
将被用于连接NoSQL的持久性存储的EISConnectionSpec类的指定名称。eclipselink.target.database
指定的NoSQL平台类。persistence.xml
<persistence-unit name="eclipselink.oraclenosql.jpa" transaction-type="RESOURCE_LOCAL"><class>com.journaldev.jpa.data.Employee</class><properties><property name="eclipselink.target-database" value="org.eclipse.persistence.nosql.adapters.nosql.OracleNoSQLPlatform"/><property name="eclipselink.nosql.connection-spec" value="org.eclipse.persistence.nosql.adapters.nosql.OracleNoSQLConnectionSpec"/><property name="eclipselink.nosql.property.nosql.host" value="mohammad-amr-lt:5000"/><property name="eclipselink.nosql.property.nosql.store" value="kvstore"/><property name="eclipselink.logging.level" value="FINEST"/></properties></persistence-unit>
以下是上面列出的代码的详细说明:
Created new kvlite store with args:
-root ./kvroot -store kvstore -host mohammad-amr-lt -port 5000 -admin 5001
kvstore
持久性单元中使用的 那个。Eclipselink可以与Spring Framework无缝集成。这种类型的集成将允许您轻松地获取所需的实体管理器,而无需您参与。
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" /> <!-- Entity Manager Factory --><bean id="entityManagerFactory"class="org.springframework.orm.jpa.LocalEntityManagerFactoryBean"><property name="persistenceUnitName" value="eclipselink.mongodb.jpa"></property></bean><!--<bean id="entityManagerFactory"class="org.springframework.orm.jpa.LocalEntityManagerFactoryBean"><property name="persistenceUnitName" value="eclipselink.oraclenosql.jpa"></property></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>
以下是上面列出的代码的详细说明:
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>
以下是上面列出的代码的详细说明:
ContextLoaderListener
是启动Spring框架所必需的。faces-config.xml
<?xml version="1.0" encoding="UTF-8"?>
<faces-config xmlns="http://xmlns.jcp.org/xml/ns/javaee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-facesconfig_2_2.xsd"version="2.2">
<application><el-resolver>org.springframework.web.jsf.el.SpringBeanFacesELResolver</el-resolver>
</application>
</faces-config>
以下是上面列出的代码的详细说明:
SpringBeanFacesELResolver
将帮助您将Spring bean注入您自己的JSF ManagedBean
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.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);}}
以下是上面列出的代码的详细说明:
@PersistenceContext
将注入EntityManager的实例。在Spring上下文中定义的EntityManagerFactory将用于创建EntityManager的实例
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 "";}
}
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>
在下面,您将看到所有屏幕截图,其中说明员工在注册时以及针对Mongo数据库的持久员工文档。
安装Oracle NoSQL数据库并启动到您的环境中并非易事。遵循主要步骤,您需要确保帮助您实现这一目标。
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-EclipseLink-Spring-Mongo-Oracle-NoSQL-Sample</artifactId><packaging>war</packaging><version>0.0.1-SNAPSHOT</version><name>Primefaces-EclipseLink-Spring-Mongo-Oracle-NoSQL-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><repository><id>oss.sonatype.org</id><name>OSS Sonatype Staging</name><url>https://oss.sonatype.org/content/groups/staging</url></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><!-- 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.6.0-M3</version></dependency><!-- Dependency for EclipseLink NoSQL Persistence API --><dependency><groupId>org.eclipse.persistence</groupId><artifactId>org.eclipse.persistence.nosql</artifactId><version>2.6.0-M3</version></dependency><!-- MongoDB Driver --><dependency><groupId>org.mongodb</groupId><artifactId>mongo-java-driver</artifactId><version>2.12.3</version></dependency><!-- EclipseLink JPA for OracleNoSQL --><dependency><groupId>org.eclipse.persistence</groupId><artifactId>org.eclipse.persistence.oracle.nosql</artifactId><version>2.6.0-M3</version></dependency><!-- Oracle NoSQL Client Driver --><dependency><groupId>com.oracle.kv</groupId><artifactId>kvclient_3.0.5</artifactId><version>3.0.5</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>
不仅关系数据库可以与JPA持久层集成。EclipseLink使您能够与两个主要流行的NoSQL供应商无缝集成。本教程使用Mongo和Oracle NoSQL数据库来持久保存员工实体的实例。通过下面的评论为我们做出贡献,并找到要下载的项目源代码。
下载Primefaces Spring EclipseLink NoSQL项目
版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。
工作时间:8:00-18:00
客服电话
电子邮件
admin@qq.com
扫码二维码
获取最新动态