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创建完工程以后,我们现在来设置设置配置文件:
  

<?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" transaction-type="RESOURCE_LOCAL">
<!-- 配置使用什么ORM产品 -->
<!--
需要注意的是:
1.实现的ORM策略是继承 javax.persistence.spi.PersistenceProvide接口,
2如果项目中只有一个JPA实现产品,那么不指定也是可以的 -->
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<!-- 添加持久化类 --> <class>com.hotusm.commom.entity.User</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="1234"/> <!-- 配置jpa实现产品 -->
<property name="hibernate.show_sql" value="true"/>
<property name="hibernate.hbm2ddl.auto" value="update"/>
<property name="hibernate.format_sql" value="true"/> </properties>
</persistence-unit> </persistence>

  直接看其中的注释就明白意思了,其实发现这个配置文件和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")
@Entity
public 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,其他的慢慢在博客中更新吧


  

JPA学习(1)基础认知的更多相关文章

  1. JPA学习---第一节:JPA详解

    一.详解 JPA JPA(Java Persistence API)是Sun官方提出的Java持久化规范.它为Java开发人员提供了一种对象/关系映射工具来管理Java应用中的关系数据.他的出现主要是 ...

  2. 一步步学习javascript基础篇(0):开篇索引

    索引: 一步步学习javascript基础篇(1):基本概念 一步步学习javascript基础篇(2):作用域和作用域链 一步步学习javascript基础篇(3):Object.Function等 ...

  3. 一步步学习javascript基础篇(3):Object、Function等引用类型

    我们在<一步步学习javascript基础篇(1):基本概念>中简单的介绍了五种基本数据类型Undefined.Null.Boolean.Number和String.今天我们主要介绍下复杂 ...

  4. JavaScript学习02 基础语法

    JavaScript学习02 基础语法 JavaScript中很多基础内容和Java中大体上基本一样,所以不需要再单独重复讲了,包括: 各种算术运算符.比较运算符.逻辑运算符: if else语句.s ...

  5. jQuery学习笔记 - 基础知识扫盲入门篇

    jQuery学习笔记 - 基础知识扫盲入门篇 2013-06-16 18:42 by 全新时代, 11 阅读, 0 评论, 收藏, 编辑 1.为什么要使用jQuery? 提供了强大的功能函数解决浏览器 ...

  6. Python3学习(1)-基础篇

    Python3学习(1)-基础篇 Python3学习(2)-中级篇 Python3学习(3)-高级篇 安装(MAC) 直接运行: brew install python3 输入:python3 --v ...

  7. Ant学习-001-ant 基础知识及windows环境配置

    一.Ant 概要基础知识 Apache Ant 是一个将软件编译.测试.部署等步骤联系在一起加以自动化的一个工具,大多用于Java环境中的软件开发,用以构建应用,或结合其他开源测试工具例如 git.T ...

  8. 学习javascript基础知识系列第二节 - this用法

    通过一段代码学习javascript基础知识系列 第二节 - this用法 this是面向对象语言中的一个重要概念,在JAVA,C#等大型语言中,this固定指向运行时的当前对象.但是在javascr ...

  9. 学习javascript基础知识系列第三节 - ()()用法

    总目录:通过一段代码学习javascript基础知识系列 注意: 为了便于执行和演示,建议使用chrome浏览器,按F12,然后按Esc(或手动选择)打开console,在console进行执行和演示 ...

随机推荐

  1. CISA 信息系统审计知识点 [第一章. 信息系统审计过程 ]

    对有志成为审计师或者IT管理者de朋友, 第一章. 信息系统审计过程 1. IS 审计和保障标准.指南.工具.职业道德规范 信息技术保证框架(ITAF,Information Technology A ...

  2. JMir——Java版热血传奇2之资源文件与地图

    我虽然是90后,但是也很喜欢热血传奇2(以下简称“传奇”)这款游戏. 进入程序员行业后自己也对传奇客户端实现有所研究,现在将我的一些研究结果展示出来,如果大家有兴趣的话不妨与我交流. 项目我托管到co ...

  3. JQM[jquery mobile] 实战经验汇总

    动态装载的子页面(data-role=”page”),完全不用page div之外的tag,也不会起作用.子页面的javascript脚本必须写在page的</div>之前. 切换按钮(a ...

  4. 如何在wp8 中调试cocos2dx c++ 代码

    有的时候在win32上运行良好的cocos2dx程序移植到wp8的时候就出了问题,我们想把断点放到c++代码中,需要设置一下VS 2012 右击项目属性 把ui任务 设置为仅限本机 即可.

  5. iOS开发-NSDate使用

    时间戳是自 1970 年 1 月 1 日(00:00:00 GMT)至当前时间的总秒数.它也被称为 Unix 时间戳(Unix Timestamp). 下面是iOS中时间戳 与 时间之间的转换方法: ...

  6. POJ 1816 Wild Words

    Wild Words Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 4412   Accepted: 1149 Descri ...

  7. iOS 复选框做法

    -(void)checkboxClick:(UIButton *)btn{    btn.selected = !btn.selected;} - (void)viewDidLoad {UIButto ...

  8. 当您尝试从 64 位 SQL Server 客户端上运行分布式的查询到链接的 32 位 SQL Server 时,您可能会收到一条错误消息

    如何处理64位SQL访问32位SQL执行脚本语句问题 链接服务器"SERVER_YBJK"的 OLE DB 访问接口 "SQLNCLI10" 返回了消息 &qu ...

  9. PHP实现简单的监控nginx日志文件功能

    此功能是为了实现,定时监控nginx生成的日志数据,并将新增的数据提交到一个接口(比如大数据的接口,让大数据来进行分析) define("MAX_SHOW", 8192*5); / ...

  10. 聊一聊google的Knowledge Graph

    什么是Knowledge Graph? 它是google用于增强它的搜索引擎的功能和提高搜索结果质量的一种技术.在2012年5月16日提出,除了提供基本的与主题相关的链接服务之外,它还能结构化与主题相 ...