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规范,这些jar包涵盖了从实体管理、事务处理到查询语言等多个方面。在标题和描述中提到的"jpa中hibernate实现相关jar包"是指一组完整的Hibernate库...
而**Hibernate**则是一个实现了JPA规范的开源ORM框架,它简化了数据库操作,使得开发者可以使用Java对象来操作数据库,而无需编写大量的SQL语句。 在**JPA + Hibernate**的例子中,通常会涉及以下几个核心概念: 1...
在本文中,我们将深入探讨如何在Spring Boot 2.1.4.RELEASE项目中结合JPA(Java Persistence API)和Hibernate实现Redis作为二级缓存。首先,我们需要理解这些技术的基本概念。 Spring Boot 是一个用于简化Spring...
在与JPA和Hibernate的整合中,Spring通常作为容器来管理和协调这些ORM(对象关系映射)工具。 JPA是Java EE平台的一部分,它定义了一个标准的API,允许开发者以面向对象的方式操作数据库。通过JPA,开发者可以避免...
Hibernate不仅实现了JPA规范,还提供了额外的功能,如HQL(Hibernate查询语言)、 Criteria API等。它能够自动处理对象与数据库表之间的映射,使得开发者可以使用面向对象的方式来操作数据库。 在整合这四者时,...
### JPA与Hibernate的关系 ...而Hibernate作为JPA的一种强大实现,不仅完全兼容JPA,还提供了更多的高级功能和灵活性。对于希望利用标准化API进行数据库操作的开发者而言,JPA和Hibernate都是非常有价值的工具。
2. **Hibernate实现**:`hibernate-entitymanager.jar`是Hibernate提供的JPA实现,它包含了对JPA规范的实现以及一些扩展功能。 3. **Hibernate核心**:`hibernate-core.jar`是Hibernate的核心库,包括实体管理、...
通过参考和引用传智播客的免费教程,将springmvc4.1.6与hibernate4.3.10提供的JPA实现整合,使用mysql5.6.25,在MyEclipse2014中测试通过。可以作为web开发的基础框架使用。 使用说明: 1.需要安装mysql,并创建名为...
Hibernate是一个基于JPA规范的开源ORM框架,它不仅实现了JPA规范,还提供了许多超出JPA范围的高级功能。Hibernate以其强大的查询语言(HQL)、缓存机制以及高度的可配置性著称,使其成为Java领域中最受欢迎的持久化...
- 当Spring Data JPA配置了Hibernate作为其JPA供应商时,它会利用Hibernate的实体管理和查询功能。 - Spring Data JPA的Repository接口在底层使用Hibernate的Session来执行查询和操作数据库。 - Spring的事务管理...
在这个过程中,Hibernate作为JPA的实现,负责实际的数据库交互。 **五、总结** JPA和Hibernate的结合使用为Java开发者提供了一个强大且灵活的ORM解决方案。通过JPA的规范,我们可以编写出易于维护、可移植的代码,...
Hibernate,作为JPA的一个实现,是目前最流行的Java ORM(对象关系映射)框架之一。它提供了全面的对象持久化解决方案,包括实体管理、查询语言(HQL和Criteria API)、事务管理和缓存机制等。Hibernate不仅实现了...
Hibernate作为JPA的实现,是一个强大的对象关系映射(ORM)框架。它将Java对象与数据库表进行映射,使得开发者可以通过操作对象来完成数据库操作。Hibernate提供了事务管理、缓存机制和一对多、多对一等复杂关系的...
在Java Web开发中,Spring MVC和JPA(Java Persistence API)以及Hibernate作为ORM(对象关系映射)框架的实现,是构建高效、可维护性的应用的常见选择。本示例将探讨如何将这三个组件整合在一起,以实现一个完整的...
标题 "Spring2.5 + JPA(Hibernate)实现" 涉及到的是在Java开发环境中,使用Spring框架的2.5版本与Java Persistence API (JPA) 的一种集成方式,其中Hibernate作为JPA的提供商。这篇博文可能是指导开发者如何在项目中...
这个例子展示了如何在Spring应用中配置和使用JPA,以便利用Hibernate作为JPA的提供者。让我们深入探讨这个集成过程中的关键知识点。 1. **JPA简介**:JPA是Java平台上的一个标准,它为对象持久化到关系数据库提供了...
2. **JPA Provider**: Hibernate作为JPA的实现,其自身包含了一个JPA提供者,如`hibernate-entitymanager.jar`,它提供了对JPA规范的实现。 3. **JTA (Java Transaction API)**: 为了实现事务管理,通常需要`jta.jar...