JPA——初识JPA

1.什么是JPA:

Java Persistence API:用于对象持久化的API。

Java EE 5.0平台标准的ORM规范,使得应用程序以统一的方式访问持久层。

JPA是hibernate的一个抽象(就像JDBC和JDBC驱动的关系):

--JPA是规范:JPA本质上是一种ORM规范,不是ORM框架——因为JPA并没有提供ORM实现,它只是定制了一些规范,,提供了一些编程的API接口,但具体实现则由ORM厂商提供实现。

--Hibernate是实现:Hibernate除了作为ORM框架之外,它也是一种JPA实现。

从功能上说,JPA是Hibernate功能的一个子集。

JPA的目标之一是制定一个可以由很多供应商实现的API,目前Hibernate3.2+、TopLink10.1+以及OpenJPA都提供了JPA的实现。

--Hibernate:JPA的始作俑者就是Hibernate的作者,Hibernate从3.2开始支持JPA。

--TopLink:以前需要收费,现在也是开源的。

--OpenJPA:是Apache组织提供的开源项目。

JPA主要包括3方面的技术:

--ORM映射元数据:支持XML和JDK 5.0注解两种元数据的形式,元数据描述对象和表之间的映射关系,框架据此将实体对象持久化到数据库表中。

--JPA的API:用来操作实体对象,执行CRUD操作,框架在后台完成所有的事情,开发者从繁琐的JDBC和SQL代码中解脱出来。

--查询语言(JPQL):这是持久化操作中最重要的方面,通过面向对象而非面向数据库的查询语言查询数据,避免程序和具体的SQL紧密耦合。

2.使用JPA持久化对象的步骤:

--创建persistence.xml,在这个文件中配置持久化单元。

----需要指定跟哪个数据库进行交互。

----需要指定使用哪个持久化的框架以及配置该框架的基本属性

--创建实体类,使用annotation来描述实体类和数据库表之间的映射关系。

--使用JPA API完成数据的增删改查的操作。

----创建EntityManagerFactory(对应Hibernate中的SessionFactory)。

----创建EntityManager(对应Hibernate中的Session)。

在使用JPA+Hibernate时候需要导入以下jar包:

3.JPA实践:

在实践过程中最重要的就是persistence.xml的路径问题,在一般的Java项目中,persistence.xml需要放在src/META-TNF下面。

接下来就是persistence.xml的基本配置,下面是关于连接oracle的配置:

<?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">
    <!--transaction-type表示事务状态,分别有本地事务RESOURCE_LOCAL和分布式事务JTA-->
    <persistence-unit name="jpa-1" transaction-type="RESOURCE_LOCAL">
        <!--
        配置使用什么ORM产品来作为JPA的实现
        1.实际上配置的是 javax.persistence.spi.PersistenceProvider接口的实现类
        2.若JPA项目中只有一个JPA的实现产品则也可以不配置该节点
        -->
        <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
        <properties>
            <!--连接数据库的基本信息-->
            <property name="hibernate.connection.driver_class" value="xxx"/>
            <property name="hibernate.connection.url" value="xxx"/>
            <property name="hibernate.connection.username" value="xxx"/>
            <property name="hibernate.connection.password" value="xxx"/>
            <!--配置JPA实现产品的基本信息,配置hibernate的基本属性-->
            <property name="hibernate.format_sql" value="true"/>
            <property name="hibernate.show_sql" value="true"/>
            <!--作用主要用于:自动创建|更新|验证数据库表结构。如果不是此方面的需求建议set value="none"-->
            <!--create:-->
            <!--每次加载hibernate时都会删除上一次的生成的表,然后根据你的model类再重新来生成新表,哪怕两次没有任何改变也要这样执行,这就是导致数据库表数据丢失的一个重要原因。-->
            <!--create-drop :-->
            <!--每次加载hibernate时根据model类生成表,但是sessionFactory一关闭,表就自动删除。-->
            <!--update:-->
            <!--最常用的属性,第一次加载hibernate时根据model类会自动建立起表的结构(前提是先建立好数据库),以后加载hibernate时根据 model类自动更新表结构,即使表结构改变了但表中的行仍然存在不会删除以前的行。要注意的是当部署到服务器后,表结构是不会被马上建立起来的,是要等 应用第一次运行起来后才会。-->
            <!--validate :-->
            <!--每次加载hibernate时,验证创建数据库表结构,只会和数据库中的表进行比较,不会创建新表,但是会插入新值。-->
            <property name="hibernate.hbm2ddl.auto" value="none"/>
        </properties>
    </persistence-unit>
</persistence>

然后就是基本的连接操作:

public class Main {

    public static void main(String[] args){
        //1.创建EntityManagerFactory
        EntityManagerFactory entityManagerFactory =
                Persistence.createEntityManagerFactory("jpa-1");
        //2.创建EntityManager
        EntityManager entityManager =
                entityManagerFactory.createEntityManager();
        //3.开启事务
        EntityTransaction entityTransaction =
                entityManager.getTransaction();
        entityTransaction.begin();
        //4.进行持久化操作
        String sql = "xxxxxx";
        Query query = entityManager.createNativeQuery(sql);
        List<String> list = query.getResultList();
        System.out.println(list.get(0).toString());
        //5.提交事务
        entityTransaction.commit();
        //6.关闭EntityManager
        entityManager.close();
        //7.关闭EntityManagerFactory
        entityManagerFactory.close();
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值