Primefaces Spring和Hibernate集成示例教程

194 篇文章 3 订阅
19 篇文章 0 订阅

 

Primefaces Spring和Hibernate集成示例教程

 

欢迎使用Spring Primefaces和Hibernate Integration示例。框架之间的集成是一项复杂的任务,而且大多需要花费大量时间来实现。我们 在单独的教程中讨论了  PrimefacesSpringHibernate框架,但这次我们将向您展示如何集成所有这些框架以创建分层(分层)应用程序。

目录[ 隐藏 ]

Spring Primefaces Hibernate

分层(分层)应用程序是一种流行的设计,大多数企业应用程序都与之对齐。其中:

  1. Primefaces框架将用于处理所有UI问题并验证客户端的输入。
  2. Hibernate框架将用于传递您自己的可能是MySQL数据库的持久性存储。
  3. Spring框架将用于粘合所有这些框架。

本教程旨在使用所有这些列出的框架实现分层应用程序。

Spring Primefaces Hibernate所需的工具

在开始深入研究之前,让我们看看您需要的所需工具:

  • Eclipse Kepler 4.3。
  • Hibernate 3.x.
  • 春天4.x.
  • Primefaces 5.x.
  • JDK 1.6+。
  • MySQL 5.x.

Primefaces Spring Hibernate项目结构

我们的最终项目结构如下图所示,我们将逐个浏览每个组件。

Spring Primefaces,Spring Hibernate,Spring Primefaces Hibernate示例

 

创建数据库员工表

MySQL数据库将用于保留所有员工实例/记录。使用过的员工表如下所示:

Spring Primefaces Hibernate MySQL数据库表脚本

另外,在下面找到它的SQL create-script:


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;

创建员工模型Bean

在我们创建了一个Employee Table之后,现在是时候看看Employee类的样子了:


package com.journaldev.hibernate.data;

import java.util.Date;

public class Employee {
	private long employeeId;
	private String employeeName;
	private Date employeeHireDate;
	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;
	}
}

Spring Primefaces Hibernate Maven依赖项

Maven是一个构建工具,主要用于管理项目依赖项。因此,无需像通常那样下载JAR并将其附加到项目中。MySQL JDBC驱动程序hibernate核心Spring核心框架Primefaces以及Spring Hibernate Primefaces集成所需的许多库。我们的最终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-Spring-Integration-Sample</artifactId>
	<packaging>war</packaging>
	<version>0.0.1-SNAPSHOT</version>
	<name>Primefaces-Hibernate-Spring-Integration-Sample Maven Webapp</name>
	<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>
	<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>
		<!-- 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>
		<!-- Primefaces Theme Library -->
		<dependency>
			<groupId>org.primefaces.themes</groupId>
			<artifactId>blitzer</artifactId>
			<version>1.0.10</version>
		</dependency>
		<!-- Hibernate library -->
		<dependency>
			<groupId>org.hibernate</groupId>
			<artifactId>hibernate-core</artifactId>
			<version>3.6.10.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>
		<!-- Required By Hibernate -->
		<dependency>
			<groupId>commons-dbcp</groupId>
			<artifactId>commons-dbcp</artifactId>
			<version>1.4</version>
		</dependency>
		<dependency>
			<groupId>javassist</groupId>
			<artifactId>javassist</artifactId>
			<version>3.12.1.GA</version>
		</dependency>
	</dependencies>
</project>

Spring Primefaces - Hibernate配置

Hibernate是一种标准的对象关系映射(ORM)解决方案,它用于将对象域映射到关系表格公式。Hibernate配置过程需要以下步骤:

  • 在hibernate配置文件中指定所有相关的数据库信息,如驱动程序,JDBC URL,hibernate方言和hibernate会话上下文,主要使用  hibernate.cfg.xml。Hibernate实现本身将使用Dialect,以确保有效地完成映射过程的执行。该文件应位于项目的src / main / resources文件夹下。
  • 指定hibernate的映射文件。映射文件将包含所有映射信息,如对象表,属性列和关联关系,domain-classes.hbm.xml文件主要用于此目的。此文件应位于项目的src / main / resources文件夹下,以便它位于应用程序的类路径中。
  • 重要的是要说当我们要使用Spring时需要进行一些修改。

hibernate.cfg.xml


<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
        "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">

<hibernate-configuration>

    <session-factory>

        <!-- Database connection settings -->
        <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
        <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/journaldev</property>
        <property name="hibernate.connection.username">root</property>
        <property name="hibernate.connection.password">root</property>

        <!-- SQL dialect -->
        <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
        <!-- Specify session context -->
        <property name="hibernate.current_session_context_class">org.hibernate.context.internal.ThreadLocalSessionContext</property>
        <!-- Show SQL -->
        <property name="hibernate.show_sql">true</property>
        <!-- Referring Mapping File -->
        <mapping resource="domain-classes.hbm.xml"/>
    </session-factory>

</hibernate-configuration>

domain-classes.hbm.xml


<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping
PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd">
<hibernate-mapping>
	<class name="com.journaldev.hibernate.data.Employee" table="employee">
		<id name="employeeId" column="EMP_ID" type="long">
			<generator class="native" />
		</id>
		<property name="employeeName" column="EMP_NAME" type="string"/>
		<property name="employeeHireDate" column="EMP_HIRE_DATE" type="date"/>
		<property name="employeeSalary" column="EMP_SALARY" type="double"/>
	</class>
</hibernate-mapping>

测试我们的Hibernate应用程序

到目前为止,我们已经创建了一个配置了所需依赖项的Eclipse Web项目,创建了数据库Employee Table并创建了hibernate框架。

在开始使用Spring集成并开发Primefaces UI表单之前,让我们看看如何使用简单的Java Application来获取针对我们自己的数据库保存的Employee实例。鉴于Java应用程序将帮助我们确定我们将获得的好处,特别是在以后使用Spring框架时。


package com.journaldev;

import java.util.Date;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.cfg.Configuration;
import com.journaldev.hibernate.data.Employee;

public class Main {
	public static void main(String [] args){
		// Create a configuration instance
		Configuration configuration = new Configuration();
		// Provide configuration file
		configuration.configure("hibernate.cfg.xml");
		// Build a SessionFactory
		SessionFactory factory = configuration.buildSessionFactory(new StandardServiceRegistryBuilder().configure().build());
		// Get current session, current session is already associated with Thread
		Session session = factory.getCurrentSession();
		// Begin transaction, if you would like save your instances, your calling of save must be associated with a transaction
		session.getTransaction().begin();
		// Create employee
		Employee emp = new Employee();
		emp.setEmployeeName("Peter Jousha");
		emp.setEmployeeSalary(2000);
		emp.setEmployeeHireDate(new Date());
		// Save
		session.save(emp);
		// Commit, calling of commit will cause save an instance of employee
		session.getTransaction().commit();
	}
}

Hibernate测试示例

以下是对上述代码的详细说明:

  • Hibernate需要一个定义的上下文来使您获得的会话受到影响。标准Java应用程序上下文可以通过提供hibernate的属性hibernate.current_session_context_class来实现  。org.hibernate.context.internal.ThreadLocalSessionContext的值将被绑定到当前执行的线程的上下文。这意味着,如果您在活动事务中针对会话对象调用了任何类型的CRUD操作  ,则一旦提交了事务,它们将执行到您自己的数据库中。在我们的示例中,已保存新的员工实例。如果您使用过hibernate 3,则此属性应该是  线程而不是使用ThreadLocalSessionContext。
  • Hibernate 4用于测试目的,这个版本的hibernate在与Spring 4集成时不适用。要与Spring 4集成,你已经要求使用Hibernate 3。
  • 使用最新版本的hibernate需要您使用StandardServiceRegistryBuilder构建SessionFactory。

设置弹簧

Spring是一个综合框架,它主要用于控制反转(IoC),它考虑了众所周知的概念依赖注入的更一般类别。

但是,提供的简单Java应用程序使您能够根据自己的数据库保存Employee实例,但通常情况下,这不是大多数应用程序用于配置自己的hibernate持久层的方式。

 

使用Spring将帮助您避免所有创建和关联对象的东西。创建所需对象,关联其他对象主要是Spring作业。以下是Spring上下文配置文件,更新的hibernate配置,更新的Maven pom.xml和我们的部署描述符文件。让我们看看如何配置所有这些以正确使用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>
	<!-- Create Data Source bean -->
	<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
		destroy-method="close">
		<property name="driverClassName" value="com.mysql.jdbc.Driver" />
		<property name="url" value="jdbc:mysql://localhost:3306/journaldev" />
		<property name="username" value="root" />
		<property name="password" value="root" />
	</bean>
	<!-- Define SessionFactory bean -->
	<bean id="sessionFactory"
		class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
		<property name="dataSource" ref="dataSource" />
		<property name="mappingResources">
			<list>
				<value>domain-classes.hbm.xml</value>
			</list>
		</property>
		<property name="configLocation">
            <value>classpath:hibernate.cfg.xml</value>
        </property>
	</bean>
	<!-- Transaction Manager -->
	<bean id="transactionManager"
		class="org.springframework.orm.hibernate3.HibernateTransactionManager">
		<property name="sessionFactory" ref="sessionFactory" />
	</bean>
	<!-- Detect @Transactional Annotation -->
	<tx:annotation-driven transaction-manager="transactionManager" />
</beans>

hibernate.cfg.xml


<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
        "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
    <session-factory>
        <!-- SQL dialect -->
        <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
    </session-factory>
</hibernate-configuration>

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/javaee
	http://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>

以下是上面给出的代码的详细说明:

  • 我们通过实例化一个名为sessionFactory的Spring Bean创建了一个SessionFactory  。实例化SessionFactory确实需要传递一个数据源实例的瞬间,传递映射文件(domain-classes.hbm.xml原样),通过使用hibernate.cfg.xml传递所有必需的Hibernate属性。正如您所注意到的,hibernate.cfg.xml不包含数据库信息,因为它立即被定义 - 数据源Bean - 并且不需要hibernate会话上下文,因为它由Apache Tomcat丰富。甚至Apache Tomact也不是托管服务器,但它包含帮助创建上下文会话的工具。
  • 事务管理器将帮助您消除使用一段代码,如  session.getTransaction()。begin() 和  commit()。@Transactional注释将被替代使用。这意味着,执行任何使用@Transactional注释的Spring Service方法都将以跨国方式完成。如果您在诸如session.save()之类的跨国范围内  针对您的会话 调用了CRUD操作  ,它将在被调用方法结束时直接执行到您自己的数据库中。这就是所谓的交易分界。
  • 您可以使用@Component定义自己的Spring服务。这将自动扫描。
  • 我们的pom.xml  maven依赖项文件  中添加了一个新库   ,hibernate 3需要common-dbcp 和  javassist。如果您注意到,Hibernate 4不需要这些库。
  • 必须为web.xml文件添加Spring上下文加载器侦听器。此侦听器需要  在WEB-INF / 文件夹下定义applicationContext.xml 。这是Spring配置上下文文件的默认位置和名称。如果您要更改其位置和名称,则必须在下面添加所需路径提供的代码段。

配置非默认的Spring Context Location:


<context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/spring/SpringContext.xml</param-value>
    </context-param>

注意:如果您正在寻找Spring 4和Hibernate 4集成,我们需要在Spring Bean配置文件中进行一些小的更改,您可以在Spring Hibernate Integration Example中获得有关它的更多详细信息。

Spring EmployeeService

在像我们这里所做的那样的分层应用程序中,所有业务操作都必须通过服务来实现。Spring为您提供了定义自己的服务的能力,这些服务将包含您自己的业务规则。EmployeeService将包含创建Employee所需的业务。


package com.journaldev.spring.service;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;

import com.journaldev.hibernate.data.Employee;

@Component
public class EmployeeService {
	@Autowired
	private SessionFactory sessionFactory;

	public SessionFactory getSessionFactory() {
		return sessionFactory;
	}

	public void setSessionFactory(SessionFactory sessionFactory) {
		this.sessionFactory = sessionFactory;
	}

	@Transactional
	public void register(Employee emp){
		// Acquire session
		Session session = sessionFactory.getCurrentSession();
		// Save employee, saving behavior get done in a transactional manner
		session.save(emp);
	}
}

以下是上述代码的详细说明:

  • EmployeeService是一个Spring服务,@ Component注释用于定义Spring Service。默认情况下,Spring将扫描您提到的包,以便根据上下文定位您的服务:component-scan  Tag。
  • @Autowired将帮助您获得所需的实例注入。这是依赖注入或IoC(控制反转)概念。这是一个重要的概念,它意味着不要让开发人员控制创建实例的过程,也需要进行必要的关联。它使所有这些创造和关联在后面看到。这是Spring令人难以置信的力量。@Autowired用于注入一个SessionFactory实例,如果您担心性能问题,可以将SessionFactory bean定义为单例范围。有关自动装配的完整信息,请阅读Spring自动装配示例
  • @Transactional注释用于事务划分目的。事务划分用于将上下文会话与活动事务相关联。这将导致CRUD操作针对您自己的数据库执行。您应该通过Spring声明事务管理示例

Primefaces Managed Bean - RegisterEmployee

Managed Bean是一个JSF工具,它用于处理所有必需的用户界面验证。在分层应用程序中,Managed Bean用于调用业务服务。您可能想知道,一旦您知道将EmployeeService Spring bean注入您自己的Managed Bean就适用了。如果您使用@ManagedProperty注释,那将成为现实。

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>

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.hibernate.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 Service
		employeeService.register(employee);
		// Add message
		FacesContext.getCurrentInstance().addMessage(null, 
				new FacesMessage("The Employee "+this.employee.getEmployeeName()+" Is Registered Successfully"));
		return "";
	}
}

以下是上述代码的详细说明:

  • RegisterEmployee Managed Bean是使用@ManagedProperty注释开发的,它将帮助您注入Spring EmployeeService实例。如果您不提供包含新添加的Spring的el-resolver 的特殊faces-config.xml文件,则该关联将不适用。
  • Primefaces UI表单将帮助您收集有关已注册员工的所有必需信息。
  • 注册操作将询问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 Primefaces Hibernate示例摘要

Hibernate与Spring和Primefaces的集成是一项流行的开发任务。本教程将指导您彻底将Hibernate与Spring和Primeface集成,这将导致您让员工坚持使用您的数据库。有意提到了一些技术细节。通过下面的评论为我们做贡献,并找到下载目的的源代码。

下载Primefaces Spring Hibernate集成项目

 

转载来源:https://www.journaldev.com/4096/primefaces-spring-hibernate-integration-example-tutorial

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值