博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JPA学习(1)基础认知
阅读量:5915 次
发布时间:2019-06-19

本文共 4554 字,大约阅读时间需要 15 分钟。

JPA 是什么

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

JPA和Hibernate的关系:

JPA 是 hibernate 的一个抽象(就像JDBC和JDBC驱动的关系): JPA 是规范:JPA 本质上就是一种 ORM 规范,不是ORM 框架 —— 因为 JPA 并未提供 ORM 实现,它只是制订了一些规范,提供了一些编程的 API 接口,但具体实现则由 ORM 厂商提供实现 Hibernate 是实现:Hibernate 除了作为 ORM 框架之外,它也是一种 JPA 实现 从功能上来说, JPA 是 Hibernate 功能的一个子集

JPA 的供应商

  JPA 的目标之一是制定一个可以由很多供应商实现的 API,目前Hibernate 3.2+、TopLink 10.1+ 以及 OpenJPA 都提供了 JPA 的实现HibernateJPA 的始作俑者就是 Hibernate 的作者 Hibernate 从 3.2 开始兼容 JPA OpenJPA OpenJPA 是 Apache 组织提供的开源项目 TopLink TopLink 以前需要收费,如今开源了.

JPA的优势

  标准化: 提供相同的 API,这保证了基于JPA 开发的企业应用能够经过少量的修改就能够在不同的 JPA 框架下运行。

  简单易用,集成方便: JPA 的主要目标之一就是提供更加简单的编程模型,在 JPA 框架下创建实体和创建 Java 类一样简单,只需要使用 javax.persistence.Entity 进行注释;JPA 的框架和接口也都非常简单,

  可媲美JDBC的查询能力: JPA的查询语言是面向对象的,JPA定义了独特的JPQL,而且能够支持批量更新和修改、JOIN、GROUP BY、HAVING 等通常只有 SQL 才能够提供的高级查询特性,甚至还能够支持子查询。

  支持面向对象的高级特性: JPA 中能够支持面向对象的高级特性,如类之间的继承、多态和类之间的复杂关系,最大限度的使用面向对象的模型

JP需要掌握的技术:
  ORM 映射元数据:JPA 支持 XML 和 JDK 5.0 注解两种元数据的形式,元数据描述对象和表之间的映射关系,框架据此将实体对象持久化到数据库表中。JPA 的 API:用来操作实体对象,执行CRUD操作,框架在后台完成所有的事情,开发者从繁琐的 JDBC和 SQL代码中解脱出来。 查询语言(JPQL):这是持久化操作中很重要的一个方面,通过面向对象而非面向数据库的查询语言查询数据,避免程序和具体的 SQL 紧密耦合。
  
  上面的都是一些认知,对编写代码没有什么帮助,下面就正式开始学习JPA,使用的IDE是Eclipse

  1,导入需要的架包,前面说了JPA知识一种规范,而不是具体的ORM框架,所以我使用的供应商是Hibernate,毕竟大部分人对hibernate还是很熟悉的,导入hibernate

  所需要的架包,

,还有hbernate jpa架包,另外就是数据库驱动,因为mysql使用起来比较方便,所以使用的是mysql数据库,所以我们还需要添加mysql驱动

2,架包都准备好了以后,接下来就创建工程,我们直接可以在Eclipse中直接闯将jpa工程,直接创建的好处就是能够帮我们把基本的环境搭好,其实就是在META-INF下面创建了一个persistence.xml,这是配置文件十分重要,就像hibernate的hbm.xml文件一样,所有的配置都将在这里设置

3创建完工程以后,我们现在来设置设置配置文件:

  

org.hibernate.ejb.HibernatePersistence
com.hotusm.commom.entity.User

 

   直接看其中的注释就明白意思了,其实发现这个配置文件和hibernate的配置文件真的很像,

4配置了这些以后,我们就可以创建实体类了

package com.hotusm.commom.entity;import java.io.Serializable;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="USER")@Entitypublic class User implements Serializable{        /**     *      */    private static final long serialVersionUID = 1L;    private Integer id;    private String name;        private String userDesc;    @GeneratedValue(strategy=GenerationType.AUTO)    @Id    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;    }        @Column(name="user_desc")    public String getDesc() {        return userDesc;    }    public void setDesc(String desc) {        this.userDesc = desc;    }    }
这些注解都是我们一眼就能看出来什么什么意思。 ①@Entity指的是将这个实体映射程数据库中的表,需要注意的是,如果我们不想在数据库中使用和VO名称一样的表名,我们可以使用@Table(name="USER")来声明表名,其实我这里写不写都是一样的,②对于数据表,我们必须要有一个主键,个@Id就是注解主键的,@GeneratedValue()代表的是主键的生成策略,在 javax.persistence.GenerationType 中定义了以下几种可供选择的策略: IDENTITY:采用数据库 ID自增长的方式来自增主键字段,Oracle 不支持这种方式; AUTO: JPA自动选择合适的策略,是默认选项; SEQUENCE:通过序列产生主键,通过 @SequenceGenerator 注解指定序列名,MySql 不支持这种方式 TABLE:通过表产生主键,框架借由表模拟序列产生主键,使用该策略可以使应用更易于数据库移植。 ③对于其他的字段,只要是属性,就能够生成对应数据表的字段,对于我们想取别的名字,我们可以使用@Column()来指明字段名称,忘记说的是我们既可以在getter方法上注解,也可以在属性上注解,嗾使同样的效果 5,我们就可以进行数据的操作了,下面是代码:
package com.hotusm.common.test;import javax.persistence.EntityManager;import javax.persistence.EntityManagerFactory;import javax.persistence.EntityTransaction;import javax.persistence.Persistence;import com.hotusm.commom.entity.User;public class Main {        public static void main(String[] args) {        //1.创建EntityManagerFactory        EntityManagerFactory factory=Persistence.createEntityManagerFactory("jpa-1");        //2.创建EntityManager        EntityManager em=factory.createEntityManager();        //3.开启事务         EntityTransaction et=em.getTransaction();         et.begin();        //4.进行持久化操作         User user=new User();         user.setDesc("123");         user.setName("lqb");         //user.setId("1");         em.persist(user);        //5提交事务         et.commit();        //6关闭EntitiyManager         em.close();        //7关闭EntityManagerFactory         factory.close();    }}

这些就是jpa的helloworld,其他的慢慢在博客中更新吧

 

 

 

 

  

转载于:https://www.cnblogs.com/zr520/p/5006941.html

你可能感兴趣的文章
sed工具的使用
查看>>
数据仓库工程师、大数据开发工程师、BI工程师、ETL工程师之间有什么区别?...
查看>>
JVM初识-java类加载器
查看>>
对比各类分布式锁缺陷,抓住Redis分布式锁实现命门
查看>>
初出茅庐的程序员该如何准备面试?【备战春招/秋招系列】
查看>>
ThinkSNS+ 基于 Laravel master 分支,从 1 到 0,再到 0.1
查看>>
设置typeid后织梦currentstyle 不起作用的修复方法
查看>>
AndroidManifest.xml解析
查看>>
Oracle技术沙龙:《列存数据库的崛起》
查看>>
Oracle技术之ASM Buffer Cache的作用和功能
查看>>
Oracle RAC failover测试
查看>>
配置Linux 11G R2 RAC NTP服务
查看>>
【NetApp】restricted countries
查看>>
网络管理自动化之二、SMS服务器的安装详解
查看>>
Laravel 5基础教程(一)安装与部署 - 表严肃
查看>>
Java-图片转为Base64
查看>>
方正智睿数据库2.0发布
查看>>
DHCP服务器的配置
查看>>
NAT个人总结
查看>>
Vyatta安装gcc编译器
查看>>