`
rsljdkt
  • 浏览: 454378 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

JPA Hibernate作为其实现

阅读更多

1.背景:

 JPA本身是一套接口和标准,我们可以使用hibernate的EntityManager模块来作为JPA的引擎

 

2.JPA使用的环境:

* 1. Java EE:可以在Java EE环境中配置JPA引擎

* 2. Java SE:必须在本地设置引擎:

在classpath根部的META-INF目录下persistence.xml中配置JPA

3.实现步骤:

1)在classpath根部META-INF目录下创建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_1_0.xsd"
   version="1.0">
   <persistence-unit name="course">
      <properties>
         <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5Dialect"/>
         <property name="hibernate.connection.driver_class" value="org.gjt.mm.mysql.Driver"/>
         <property name="hibernate.connection.url" value="jdbc:mysql://localhost:3306/db_jpa"/>
         <property name="hibernate.connection.username" value="root"/>
         <property name="hibernate.connection.password" value="root"/>
         <property name="hibernate.show_sql" value="true"/>
         <property name="hibernate.hbm2ddl.auto" value="update"/>
      </properties>
   </persistence-unit>
</persistence>

  2)创建实体类,并加上JPA注解,代码如下:

package com.local.domain;

import java.util.Date;

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

@Entity
@Table(name="t_course")
public class Course {
	@Id
	@GeneratedValue
	private Long id;
	
	private String title;
	
	private Date beginDate;
	
	private Date endDate;
	
	private int fee;

	public long getId() {
		return id;
	}

	public void setId(long id) {
		this.id = id;
	}

	public String getTitle() {
		return title;
	}

	public void setTitle(String title) {
		this.title = title;
	}

	public Date getBeginDate() {
		return beginDate;
	}

	public void setBeginDate(Date beginDate) {
		this.beginDate = beginDate;
	}

	public Date getEndDate() {
		return endDate;
	}

	public void setEndDate(Date endDate) {
		this.endDate = endDate;
	}

	public int getFee() {
		return fee;
	}

	public void setFee(int fee) {
		this.fee = fee;
	}
	
	
}
 

3)编写Dao接口,代码如下:

package com.local.dao;

import com.local.domain.Course;

public interface CourseDao {
	public void save(Course course);
	public void delete(Long id);
	public Course get(Long id);
}

  4)编写Dao接口的JPA实现类,代码如下:

package com.local.dao.impl;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.EntityTransaction;
import javax.persistence.Persistence;
import com.local.dao.CourseDao;
import com.local.domain.Course;

public class JpaCourseDao implements CourseDao {

	private EntityManagerFactory entityManagerFactory;

	public JpaCourseDao() {
		entityManagerFactory = Persistence.createEntityManagerFactory("course");
	}

	@Override
	public void delete(Long id) {
		EntityManager manager = entityManagerFactory.createEntityManager();
		EntityTransaction tx = manager.getTransaction();
		try {
			tx.begin();
			Course course = manager.find(Course.class, id);
			manager.remove(course);
			tx.commit();
		} catch (RuntimeException e) {
			tx.rollback();
			throw e;
		} finally {
			manager.close();
		}
	}

	@Override
	public Course get(Long id) {
		EntityManager manager = entityManagerFactory.createEntityManager();
		try {
			return manager.find(Course.class, id);
		} finally {
			manager.close();
		}
	}

	@Override
	public void save(Course course) {
		EntityManager manager = entityManagerFactory.createEntityManager();
		EntityTransaction tx = manager.getTransaction();
		try {
			tx.begin();
			manager.merge(course);
			tx.commit();
		} catch (RuntimeException e) {
			tx.rollback();
			throw e;
		} finally {
			manager.close();
		}
	}
}

  5)进行Junit测试,代码如下:

package com.local.dao.impl;

import java.util.Date;
import org.junit.BeforeClass;
import org.junit.Test;
import com.local.dao.CourseDao;
import com.local.domain.Course;

public class CourseDaoImplTest {
	private static CourseDao courseDao;
	@BeforeClass
	public static void init(){
		courseDao=new JpaCourseDao();
	}
	@Test
	public void testSave(){
		Course course=new Course();
		course.setTitle("course2");
		course.setBeginDate(new Date());
		course.setEndDate(new Date());
		course.setFee(100);
		courseDao.save(course);
	}
	@Test
	public void testGet(){
		Course course=courseDao.get(new Long(4));
		System.out.println("title: "+course.getTitle());
		System.out.println("beginDate: "+course.getBeginDate());
		System.out.println("endDate: "+course.getEndDate());
		System.out.println("fee: "+course.getFee());
	}
}
 

4.关于persistence.xml配置文件的说明:

* 方式一:通过引用hibernate.cfg.xml

【注意此时由于Hibernate EntityManager会自动侦测XML映射文件和JPA注解,将他们作为映射元数据,因此不必再配置文件中显式指明。否则会出现org.hibernate.DuplicateMappingException异常】

<persistence>

<persistence-unit name="course">

<properties>

<!--引用classpath根部的Hibernate配置文件 -->

<property name="hibernate.ejb.cfgfile" value="/hibernate.cfg.xml"/>

</properties>

</persistence-unit>

</persistence>

* 方式二:使用 JNDI数据源,形如:<jta-data-source>java:/DefaultDS</jta-data-source>

其他的hibernate属性在本配置文件中配置

* 方式三:数据库的连接属性和其他属性均通过hibernate的形式在persistence.xml中配置

【本例使用了此方式】

分享到:
评论

相关推荐

    jpa中hibernate实现相关jar包

    在JPA中,Hibernate作为持久化提供者,通过一系列的jar包实现了JPA规范,这些jar包涵盖了从实体管理、事务处理到查询语言等多个方面。在标题和描述中提到的"jpa中hibernate实现相关jar包"是指一组完整的Hibernate库...

    jpa + hibernate 例子

    而**Hibernate**则是一个实现了JPA规范的开源ORM框架,它简化了数据库操作,使得开发者可以使用Java对象来操作数据库,而无需编写大量的SQL语句。 在**JPA + Hibernate**的例子中,通常会涉及以下几个核心概念: 1...

    springboot+jpa(hibernate配置redis为二级缓存) springboot2.1.4

    在本文中,我们将深入探讨如何在Spring Boot 2.1.4.RELEASE项目中结合JPA(Java Persistence API)和Hibernate实现Redis作为二级缓存。首先,我们需要理解这些技术的基本概念。 Spring Boot 是一个用于简化Spring...

    Spring + JPA + Hibernate配置

    在与JPA和Hibernate的整合中,Spring通常作为容器来管理和协调这些ORM(对象关系映射)工具。 JPA是Java EE平台的一部分,它定义了一个标准的API,允许开发者以面向对象的方式操作数据库。通过JPA,开发者可以避免...

    velocity spring jpa hibernate 整合

    Hibernate不仅实现了JPA规范,还提供了额外的功能,如HQL(Hibernate查询语言)、 Criteria API等。它能够自动处理对象与数据库表之间的映射,使得开发者可以使用面向对象的方式来操作数据库。 在整合这四者时,...

    JPA和Hibernate的关系

    ### JPA与Hibernate的关系 ...而Hibernate作为JPA的一种强大实现,不仅完全兼容JPA,还提供了更多的高级功能和灵活性。对于希望利用标准化API进行数据库操作的开发者而言,JPA和Hibernate都是非常有价值的工具。

    jpa(hibernate 持久层)所需要的jar包

    2. **Hibernate实现**:`hibernate-entitymanager.jar`是Hibernate提供的JPA实现,它包含了对JPA规范的实现以及一些扩展功能。 3. **Hibernate核心**:`hibernate-core.jar`是Hibernate的核心库,包括实体管理、...

    springmvc4+hibernate4 jpa实现整合(含jar包)

    通过参考和引用传智播客的免费教程,将springmvc4.1.6与hibernate4.3.10提供的JPA实现整合,使用mysql5.6.25,在MyEclipse2014中测试通过。可以作为web开发的基础框架使用。 使用说明: 1.需要安装mysql,并创建名为...

    JPA与Hibernate的优缺点

    Hibernate是一个基于JPA规范的开源ORM框架,它不仅实现了JPA规范,还提供了许多超出JPA范围的高级功能。Hibernate以其强大的查询语言(HQL)、缓存机制以及高度的可配置性著称,使其成为Java领域中最受欢迎的持久化...

    spring-data-jpa hibernate

    - 当Spring Data JPA配置了Hibernate作为其JPA供应商时,它会利用Hibernate的实体管理和查询功能。 - Spring Data JPA的Repository接口在底层使用Hibernate的Session来执行查询和操作数据库。 - Spring的事务管理...

    jpa+HIBERNATE的一个简单例子

    在这个过程中,Hibernate作为JPA的实现,负责实际的数据库交互。 **五、总结** JPA和Hibernate的结合使用为Java开发者提供了一个强大且灵活的ORM解决方案。通过JPA的规范,我们可以编写出易于维护、可移植的代码,...

    JPA-Hibernate包

    Hibernate,作为JPA的一个实现,是目前最流行的Java ORM(对象关系映射)框架之一。它提供了全面的对象持久化解决方案,包括实体管理、查询语言(HQL和Criteria API)、事务管理和缓存机制等。Hibernate不仅实现了...

    手动创建 SpringMvc +SpringDataJpa+Hibernate+ freemarker mavenProject+ 环境切换 webDemo

    Hibernate作为JPA的实现,是一个强大的对象关系映射(ORM)框架。它将Java对象与数据库表进行映射,使得开发者可以通过操作对象来完成数据库操作。Hibernate提供了事务管理、缓存机制和一对多、多对一等复杂关系的...

    spring mvc 与JPA/Hibernate的整合示例

    在Java Web开发中,Spring MVC和JPA(Java Persistence API)以及Hibernate作为ORM(对象关系映射)框架的实现,是构建高效、可维护性的应用的常见选择。本示例将探讨如何将这三个组件整合在一起,以实现一个完整的...

    Spring2.5 + JPA(Hibernate)实现

    标题 "Spring2.5 + JPA(Hibernate)实现" 涉及到的是在Java开发环境中,使用Spring框架的2.5版本与Java Persistence API (JPA) 的一种集成方式,其中Hibernate作为JPA的提供商。这篇博文可能是指导开发者如何在项目中...

    Spring集成Jpa(Hibernate实现)

    这个例子展示了如何在Spring应用中配置和使用JPA,以便利用Hibernate作为JPA的提供者。让我们深入探讨这个集成过程中的关键知识点。 1. **JPA简介**:JPA是Java平台上的一个标准,它为对象持久化到关系数据库提供了...

    JPA-Hibernate实现所需的完整Jar包

    2. **JPA Provider**: Hibernate作为JPA的实现,其自身包含了一个JPA提供者,如`hibernate-entitymanager.jar`,它提供了对JPA规范的实现。 3. **JTA (Java Transaction API)**: 为了实现事务管理,通常需要`jta.jar...

Global site tag (gtag.js) - Google Analytics