欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

JPA环境配置(一)

程序员文章站 2022-10-01 09:15:34
JPA概述 JPA(Java Persistence API)的简称,用于持久化的API。 JAVAEE5.0平台标准的ORM的规范使得应用程序以统一的方式访问持久层。 JPA和Hibernate的关系 JPA是Hibernate的一个抽象,就像JDBC和JDBC驱动的关系一样。 PA是规范:JPA ......

jpa概述

jpa(java persistence api)的简称,用于持久化的api。

javaee5.0平台标准的orm的规范使得应用程序以统一的方式访问持久层。

JPA环境配置(一)

jpa和hibernate的关系

jpa是hibernate的一个抽象,就像jdbc和jdbc驱动的关系一样。

pa是规范:jpa本质上是一种orm规范,不是orm框架,因为jpa并未提供实现,它只是制定了一些规范,提供了一些编程的api接口,但具体实现则由各orm厂商提供实现。
hibernate是实现:hibernate除了做为一个orm框架之外,它也是一种jpa实现。从功能上来说,hibernate是jpa的一个子集。

jpa的优势

标准化: 提供相同的 api,这保证了基于jpa 开发的企业应用能够经过少量的修改就能够在不同的 jpa 框架下运行。
简单易用,集成方便: jpa 的主要目标之一就是提供更加简单的编程模型,在 jpa 框架下创建实体和创建 java 类一样简单,只需要使用 javax.persistence.entity 进行注释;jpa 的框架和接口也都非常简单,
可媲美jdbc的查询能力: jpa的查询语言是面向对象的,jpa定义了独特的jpql,而且能够支持批量更新和修改、join、group by、having 等通常只有 sql 才能够提供的高级查询特性,甚至还能够支持子查询。
支持面向对象的高级特性:jpa 中能够支持面向对象的高级特性,如类之间的继承、多态和类之间的复杂关系,最大限度的使用面向对象的模型

jpa的组成

 

orm 映射元数据:jpa 支持 xml 和 jdk 5.0 注解两种元数据的形式,元数据描述对象和表之间的映射关系,框架据此将实体对象持久化到数据库表中。
jpa 的 api:用来操作实体对象,执行crud操作,框架在后台完成所有的事情,开发者从繁琐的 jdbc和 sql代码中解脱出来。
查询语言(jpql):这是持久化操作中很重要的一个方面,通过面向对象而非面向数据库的查询语言查询数据,避免程序和具体的 sql 紧密耦合。

 

 

jpa环境配置:

首先我们使用eclipse来创建一个jpa的项目(我们这里通过hibernate来实现jpa所以准备好hibernatejar包):

JPA环境配置(一)

JPA环境配置(一)

配置好eclipselink和hibernate的jar包,然后增加数据库连接

JPA环境配置(一)

 

项目生成后src下meta-inf里面会生成一个persistence.xml,这个文件放着这里面与命名都是规范不需要更改

我们首先来创建个实体类作为测试。student.java类

package com.miya.jpa.entity;

import javax.persistence.entity;
import javax.persistence.generatedvalue;
import javax.persistence.generationtype;
import javax.persistence.id;
import javax.persistence.namedquery;
import javax.persistence.table;


@table(name="tal_student")
@entitypublic class student {
    public student() {
        super();
    }
    public student(string name, string pass, integer age, string phone, string address) {
        super();
        this.name = name;
        this.pass = pass;
        this.age = age;
        this.phone = phone;
        this.address = address;
    }

    @id
    @generatedvalue(strategy=generationtype.auto)
    private integer id;
    private string name;
    private string pass;
    private integer age;
    private string phone;
    private string address;
    public integer getid() {
        return id;
    }
    public void setid(integer id) {
        this.id = id;
    }
    public string getname() {
        return name;
    }
    public void setname(string name) {
        this.name = name;
    }
    public string getpass() {
        return pass;
    }
    public void setpass(string pass) {
        this.pass = pass;
    }
    public integer getage() {
        return age;
    }
    public void setage(integer age) {
        this.age = age;
    }
    public string getphone() {
        return phone;
    }
    public void setphone(string phone) {
        this.phone = phone;
    }
    public string getaddress() {
        return address;
    }
    public void setaddress(string address) {
        this.address = address;
    }
    @override
    public string tostring() {
        return "student [id=" + id + ", name=" + name + ", pass=" + pass + ", age=" + age + ", phone=" + phone
                + ", address=" + address + "]";
    }
}

@table注解:指定数据表名

@entity注解:声明持久化类,加上了这个注解必须要有主键所以我这里将id做为主键使用@id生命。

@generatedvalu()注解中配置策略。

然后我们来配置一下persistence.xml文件

<persistence-unit name="jpademo1" transaction-type="resource_local">
        <!-- 指定orm实现类 -->
        <provider>org.hibernate.ejb.hibernatepersistence</provider>
        <!-- 添加持久化类 -->
        <class>com.miya.jpa.entity.student</class>
        <properties>
            <!-- 配置数据库连接 -->
            <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/jpa" />
            <property name="javax.persistence.jdbc.user" value="root" />
            <property name="javax.persistence.jdbc.password" value="root" />
            <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.driver" />
            <!-- 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-unit标签上属性

  name :用于定义持久化单元的名字,必填项,

  transaction-type:直接jap的事务策略,resource_local(默认值),数据库级别的事物。只能针对一种数据库。不支持分布式事务。如果需要分布式事务的支持使用jta

provider标签:

  指定orm框架的 javax.persistence.spi.persistenceprovider 接口的实现类。若项目中只有一个实现可省略

main方法:

 

public static void main(string[] args) {
        // 创建工厂
        entitymanagerfactory factory = persistence.createentitymanagerfactory("jpademo1");
        // 创建与数据库之间的回话
        entitymanager manager = factory.createentitymanager();
        // 获取事务
        entitytransaction transaction = manager.gettransaction();
        // 开启事务
        transaction.begin();

        student student = new student("张三丰", "123123", 22, "12312312312", "中国-未知");
        manager.persist(student);

        // 提交事务
        transaction.commit();
        // 关闭资源
        manager.close();
        factory.close();

    }