JPA-1 概述与HelloWorld

来源:互联网 发布:java 等待1秒 编辑:程序博客网 时间:2024/06/05 01:06

  JPA概述与HelloWorld的具体实现代码的下载地址:http://download.csdn.net/download/bingbeichen/9805564。


1. JPA概述

  Java Persistence API(简称JPA)是主要用于对象持久化的API;其是JavaEE 5.0平台标准的ORM规范,是的应用程序可以通过统一的方式访问持久层。
  这里写图片描述


2. JPA与Hibernate的关系

  JPA是Hibernate的一个抽象(类似于JDBC和数据库驱动的关系),即从功能上来说,JPA是Hibernate功能的子集。

  • JPA是规范: 本质是一种ORM规范而非ORM框架;因为JPA并未提供ORM实现,只是制定了一些规范,并提供规范对应的API接口,具体的实现则是由ORM厂商提供。
  • Hibernate是实现: ORM框架,且是JPA的一种实现。

3. JPA供应商

  标准JPA规范的目标之一是制定可以由众多供应商实现的API接口,目前Hibernate 3.2+、TopLink 10.1+ 和 OpenJPA 都提供了JPA规范的实现。

  • Hibernate: JPA规范的始作俑者即是Hibernate的作者,Hibernate 3.2开始兼容JPA规范;
  • OpenJPA:Apache组织提供的开源项目;
  • TopLink: 以前需要收费,现也开源。

4. JPA的优势

  • 标准化: 提供相同的API,保证基于JPA开发的企业应用能够经过少量的修改即可在不同的JPA实现框架下运行。
  • 简单易用,集成方便: JPA主要目标之一是提供更加简单的编程模型,在JPA框架下创建实体和创建Java类一样简单,只需要使用javax.persistence.Entity进行注释;JPA 的框架和接口也非常简单。
  • 可媲美JDBC的查询能力: JPA查询语言是面向对象的,JPA定义了独特的JPQL,且能够支持批量更新与修改、JOIN、GROUP BY、HAVING等通常只有SQL才能够提供的高级查询特性,还能够支持子查询。
  • 支持面向对象的高级特性: JPA能够支持面向对象的高级特性,如类之间的继承、多态和类之间的复杂关系,最大限度的使用面向对象的模型。

5. JPA主要技术

  • ORM映射元数据: JPA支持XML和JDK 5.0注解两种元数据的形式,元数据用于描述对象和表之间的映射关系,框架据此将实体对象持久化到数据库表中。
  • JPA的API: 用于操作实体对象,执行CRUD操作,框架在后台完成所有操作,开发者从繁琐的JDBC和SQL代码中解脱出来。
  • 查询语言(JPQL): 持久化操作中很重要的一个方面,通过面向对象而非面向数据库的查询语言查询数据,避免程序和具体的SQL语句紧密耦合。

6. 使用JPA持久化对象的基本步骤

  ①. 创建persistence.xml文件,并在其中配置持久化单元
    指定与哪个数据库进行交互、指定JPA使用哪个持久化框架、配置持久化框架的基本属性

  ②. 创建实体类,使用annotation来描述实体类与数据库表之间的映射关系

  ③. 使用JPA规范的API来完成数据的增加、删除、修改和查询操作
    创建EntityManagerFactory和EntityManager,其分别对应Hibernate中的SessionFactory和Session


7. HelloWorld

  ①. 在Eclipse下直接创建JPA工程,其会自动生成persistence.xml文件

  ②. 添加JPA开发所依赖的jar包,包括hibernate-release-4.2.4.Final\lib\required*.jar、hibernate-release-4.2.4.Final\lib\jpa*.jar和数据库驱动的jar包
    这里写图片描述
    这里写图片描述
  ③. 编写persistence.xml文件,JPA规范要求在类路径的META-INF目录下放置persistence.xml,该文件的名称是固定的

<?xml version="1.0" encoding="UTF-8"?><persistence version="2.0" 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">    <persistence-unit name="JPA-1-HelloWorld" transaction-type="RESOURCE_LOCAL">        <!--             配置使用的JPA规范实现产品            1). 实际上配置的是javax.persistence.spi.PersistenceProvider接口的实现类            2). 若JPA项目中只有一个JPA规范的实现产品,则可以不配置该节点         -->        <provider>org.hibernate.ejb.HibernatePersistence</provider>        <!-- 添加持久化类 -->        <class>com.qiaobc.jpa.helloworld.Customer</class>        <properties>            <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/>            <property name="javax.persistence.jdbc.url" value="jdbc:mysql:///jpa"/>            <property name="javax.persistence.jdbc.user" value="root"/>            <property name="javax.persistence.jdbc.password" value="root"/>            <!-- 配置JPA规范实现产品的基本属性,即配置Hibernate的基本属性 -->            <property name="hibernate.hbm2ddl.auto" value="update"/>            <property name="hibernate.show_sql" value="true"/>            <property name="hibernate.format_sql" value="true"/>        </properties>    </persistence-unit></persistence>

  ④. 创建持久化类,并使用注解来描述其与数据表之间的对应关系

package com.qiaobc.jpa.helloworld;import javax.persistence.Column;import javax.persistence.Entity;import javax.persistence.GeneratedValue;import javax.persistence.GenerationType;import javax.persistence.Id;import javax.persistence.Table;@Table(name="JPA_CUSTOMERS")@Entitypublic class Customer {    private Integer id;    private String name;    private String email;    private Integer age;    @GeneratedValue(strategy=GenerationType.AUTO)    @Id    public Integer getId() {        return id;    }    public void setId(Integer id) {        this.id = id;    }    @Column(name="LAST_NAME")    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    public String getEmail() {        return email;    }    public void setEmail(String email) {        this.email = email;    }    public Integer getAge() {        return age;    }    public void setAge(Integer age) {        this.age = age;    }    public Customer() {        super();    }    public Customer(Integer id, String name, String email, Integer age) {        super();        this.id = id;        this.name = name;        this.email = email;        this.age = age;    }    @Override    public String toString() {        return "Customer [id=" + id + ", name=" + name + ", email=" + email                + ", age=" + age + "]";    }}

  ⑤. 使用EntityManagerFactory和EntityManager来执行持久化操作

// 1. 创建EntityManagerFactoryEntityManagerFactory entityManagerFactory = Persistence.createEntityManagerFactory("JPA-1-HelloWorld");// 2. 创建EntityManagerEntityManager entityManager = entityManagerFactory.createEntityManager();// 3. 开启事务EntityTransaction entityTransaction = entityManager.getTransaction();entityTransaction.begin();// 4. 进行持久化操作Customer customer = new Customer(null, "qiaobc", "qiaobc@163.com", 23);entityManager.persist(customer);// 5. 提交事务entityTransaction.commit();// 6. 关闭EntityManagerentityManager.close();// 7. 关闭EntityManagerFactoryentityManagerFactory.close();
0 0
原创粉丝点击