返回首页

jpa详细教程?

203 2023-12-23 19:47 admin

一、jpa详细教程?

1.JPA概述

JPA(Java Persistence API)作为Java EE 5.0平台标准的ORM规范,将得到所有Java EE服务器的支持。

Sun这次吸取了之前EJB规范惨痛失败的经历,在充分吸收现有ORM框架的基础上,得到了一个易于使用、伸缩性强的ORM规范。

从目前的开发社区的反应上看,JPA受到了极大的支持和赞扬,JPA作为ORM领域标准化整合者的目标应该不难实现。

JPA通过JDK 5.0注解或XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中。

Sun引入新的JPA ORM规范出于两个原因:

其一,简化现有Java EE和Java SE应用的对象持久化的开发工作;

其二,Sun希望整合对ORM技术,实现天下归一。

JPA由EJB 3.0软件专家组开发,作为JSR-220实现的一部分。

但它不囿于EJB 3.0,你可以在Web应用、甚至桌面应用中使用。

JPA的宗旨是为POJO提供持久化标准规范,由此可见,经过这几年的实践探索,能够脱离容器独立运行,方便开发和测试的理念已经深入人心了。

目前Hibernate 3.2、TopLink 10.1.3以及OpenJpa都提供了JPA的实现。

JPA的总体思想和现有Hibernate、TopLink,JDO等ORM框架大体一致。

总的来说,JPA包括以下3方面的技术:

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

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

3、查询语言,这是持久化操作中很重要的一个方面,通过面向对象而非面向数据库的查询语言查询数据,避免程序的SQL语句紧密耦合。

2、实体对象

访问数据库前,我们总是要设计在应用层承载数据的领域对象(Domain Object),ORM框架将它们持久化到数据库表中。

为了方便后面的讲解,我们用论坛应用为例,建立领域对象:

Topic -----(extends)----> PollTopic 1--------------*> PollOption

Topic是论坛的主题,而PollTopic是调查性质的论坛主题,扩展于Topic,一个调查主题拥有多个选项PollOption。

这三个领域对象很好地展现了领域对象之间继承和关联这两大核心的关系。这3个领域对象将被映射到数据库的两张表中:

T_topic代码

topic_id id <pk>

topic_title varchar(100)

topic_time datetime

topic_views int

topic_type tinyint

multiple tinyint

max_choice tinyint

T_polloption代码

option_id int <pk>

topic_id int

votes int

displayorder tinyint

option varchar(80)

其中,Topic及其子类PollTopic将映射到同一张t_topic表中,并用topic_type字段区分两者。而PollOption映射到t_polloption中。

具有ORM元数据的领域对象称为实体(Entity),按JPA的规范,实体具备以下的条件:

1、必须使用javax.persistence.Entity注解或者在XML映射文件中有对应的元素;

2、必须具有一个不带参的构造函数,类不能声明为final,方法和需要持久化的属性也不能声明为final;

3、如果游离状的实体对象需要以值的方式进行传递,如通Session bean的远程业务接口传递,则必须实现Serializable接口;

4、需要持久化的属性,其访问修饰符不能是public,它们必须通过实体类方法进行访问。

3.使用注解元数据

@Entity:

将领域对象标注为一个实体,表示需要保存到数据库中,默认情况下类名即为表名,通过name属性显式指定表名,如name = "T_TOPIC",表示Topic保存到T_TOPIC表中;

@Id :

对应的属性是表的主键;

@GeneratedValue:

主键的产生策略,通过strategy属性指定。默认情况下,JPA自动选择一个最适合底层数据库的主键生成策略:

如SqlServer对应identity,MySql对应auto increment。

在javax.persistence.GenerationType中定义了以下几种可供选择的策略:

1) IDENTITY:表自增键字段,Oracle不支持这种方式;

2) AUTO: JPA自动选择合适的策略,是默认选项;

3) SEQUENCE:通过序列产生主键,通过@SequenceGenerator注解指定序列名,MySql不支持这种方式;

4) TABLE:通过表产生主键,框架借由表模拟序列产生主键,使用该策略可以使应用更易于数据库移植。

不同的JPA实现商生成的表名是不同的:

如 OpenJPA生成openjpa_sequence_table表

Hibernate生成一个hibernate_sequences表,

而TopLink则生成sequence表。这些表都具有一个序列名和对应值两个字段,如SEQ_NAME和SEQ_COUNT。

@Column(name = "TOPIC_ID"):

属性对应的表字段。我们并不需要指定表字段的类型,因为JPA会根据反射从实体属性中获取类型;如果是字符串类型,我们可以指定字段长度,以便可以自动生成DDL语句;

@Temporal(TemporalType.DATE):

如果属性是时间类型,因为数据表对时间类型有更严格的划分,所以必须指定具体时间类型。在javax.persistence.TemporalType枚举中定义了3种时间类型:

1) DATE :等于java.sql.Date

2) TIME :等于java.sql.Time

3) TIMESTAMP :等于java.sql.Timestamp

继承关系

Topic和PollTopic是父子类,JPA 采用多种方法来支持实体继承。在父类中必须声明继承实体的映射策略。

对于继承的实体,在javax.persistence.InheritanceType定义了3种映射策略:

SINGLE_TABLE:

父子类都保存到同一个表中,通过字段值进行区分。这是我们Topic实体所采用的策略,

Topic和PollTopic都保存到同一张表中,通过TOPIC_TYPE字段进行区分,Topic在T_TOPIC表中对应TOPIC_TYPE= 1的记录,而PollTopic对应TOPIC_TYPE=2的记录(稍后在PollTopic实体中指定);

区别的字段通过 @DiscriminatorColumn 说明,区分字段对应该实体的值通过@DiscriminatorValue 指定;

JOINED:

父子类相同的部分保存在同一个表中,不同的部分分开存放,通过表连接获取完整数据;

TABLE_PER_CLASS:

每一个类对应自己的表,一般不推荐采用这种方式。

Java代码

@DiscriminatorColumn(name = "TOPIC_TYPE", discriminatorType =DiscriminatorType.INTEGER, length = 1) ②

@DiscriminatorValue(value="1")③

关联关系

JPA规范规定任何属性都默认映射到表中,所以虽然我们没有给multiple属性提供注解信息,但JPA将按照默认的规则对该字段进行映射:字段名和属性名相同,类型相同。

如果我们不希望将某个属性持久化到数据表中,则可以通过 @Transient 注解显式指定: @Transient

我们通过@OneToMany 指定了一个一对多的关联关系,一个PollTopic包括多个 PollOption对象(我们将在稍后的PollOption中通过ManyToOne描述PollOption和PollTopic的关系,以建立 PollTopic和PollOption的双向关联关系)。

Java代码

@OneToMany(mappedBy="pollTopic",cascade=CascadeType.ALL) ④

private Set options = new HashSet();

@OneToMany 中通过mappedBy属性指定“Many”方类引用“One”方类的属性名,这里mappedBy="pollTopic"表示PollOption实体拥有一个指定PollTopic的pollTopic属性。

Java代码

@ManyToOne ①

@JoinColumn(name="TOPIC_ID", nullable=false) ②

private PollTopic pollTopic;

在①处通过@ManyToOne描述了PollOption和PollTopic的多对一关联关系,并通过@JoinColumn指定关联PollTopic实体所对应表的“外键”,如②所示。

Lob字段

在JPA中Lob类型类型的持久化很简单,仅需要通过特殊的Lob注解就可以达到目的。下面,我们对Post中的Lob属性类型进行标注:

Java代码

@Lob ①-1

@Basic(fetch = FetchType.EAGER) ①-2

@Column(name = "POST_TEXT", columnDefinition = "LONGTEXT NOT NULL") ①-3

private String postText;

postText属性对应T_POST表的POST_TEXT字段,该字段的类型是LONTTEXT,并且非空。

JPA 通过@Lob将属性标注为Lob类型,如①-1和②-1所示。

通过@Basic指定Lob类型数据的获取策略,FetchType.EAGER表示非延迟加载,而FetchType. LAZY表示延迟加载,如①-2和②-2所示。

通过@Column的columnDefinition属性指定数据表对应的Lob字段类型,如①-3和② -3所示。

二、jpa哪个国家?

JPA是Java Persistence API的简称, 中文名为Java持久层API;

是JDK 5.0注解或XML描述对象-关系表的映射关系, 并将运行期的实体对象持久化到数据库中。

不是国家的名称

三、JPA是什么?

1.jpa的介绍

JPA是Java Persistence API的简称, 中文名为Java持久层API;

是JDK 5.0注解或XML描述对象-关系表的映射关系, 并将运行期的实体对象持久化到数据库中。

 JPA包括以下3方面的内容:

    1) 一套API标准。

         在javax.persistence的包下面, 用来操作实体对象, 执行CRUD操作, 框架在后台替代我们完成所有的事情, 开发者从烦琐的JDBC和SQL代码中解脱出来。

     2) 面向对象的查询语言: Java Persistence Query Language(JPQL) 。

         这是持久化操作中很重要的一个方面, 通过面向对象而非面向数据库的查询语言查询数据, 避免程序的SQL语句紧密耦合。

   3) ORM(object/relational metadata) 元数据的映射。

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

 总的来说:

    jpa是用于对象持久化的API;

    是jave EE5.0平台的标准ORM规范,其作用是使得应用程序以统一的方式来访问持久层;

    目前主要使用的jap实现是hibernate;

四、什么是JPA?

1. JPA概念Java persistence API的简称,中文名是Java持久层API,是JDK5.0注解或XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中。

2. JPA出现的原因

1.简化现有JavaEE和JavaSE应用的对象持久化的开发工作;

2.Sun希望整合ORM技术,实现在持久化领域的统一应用;

3. JPA提供的技术1.ORM映射元数据JPA支持XML和JDK5.0注解两种元数据的形式,元数据描述对象和表之间的映射关系框架据此将实体对象持久化到数据库表中;2.JPA的API用来操作实体对象,执行crud操作,框架在底层替我们完成所有的事情,开发者从繁琐的JDBC 和 SQL代码中解脱;3.查询语言通过面向对象而非面向数据库的查询语言查询数据,避免程序的SQL语句紧密耦合;

五、jpa是什么?

JPA是Java Persistence API的简称, 中文名为Java持久层API;

是JDK 5.0注解或XML描述对象-关系表的映射关系, 并将运行期的实体对象持久化到数据库中。

 JPA包括以下3方面的内容:

    1) 一套API标准。

         在javax.persistence的包下面, 用来操作实体对象, 执行CRUD操作, 框架在后台替代我们完成所有的事情, 开发者从烦琐的JDBC和SQL代码中解脱出来。

     2) 面向对象的查询语言: Java Persistence Query Language(JPQL) 。

         这是持久化操作中很重要的一个方面, 通过面向对象而非面向数据库的查询语言查询数据, 避免程序的SQL语句紧密耦合。

   3) ORM(object/relational metadata) 元数据的映射。

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

 总的来说:

    jpa是用于对象持久化的API;

    是jave EE5.0平台的标准ORM规范,其作用是使得应用程序以统一的方式来访问持久层;

    目前主要使用的jap实现是hibernate;

六、jpa是什么啤酒?

应该是Ipa吧。

IPA是现在最流行的一种精酿啤酒的缩写,India Pale Ale,翻译为印度淡色艾尔,但是这种啤酒并非源自印度,而是源于英国。

按照BJCP的说法,现代以美式为代表的IPA已经和这个名字毫无关系了,IPA只是代表一类以酒花味道为主的啤酒类型。

七、jpa的优缺点?

JPA优势

可持久化Java对象。JPA能够直接持久化复杂的Java对象,并能够使用JPQL语言进行复杂的查询。JPQL是JPA专用的查询语言,是类似于SQL的面向对象的查询语言。

使用简单。JPA使用注释(Annotation)定义Java对象与关系数据库之间的映射,而传统的ORM多使用xml配置文件。JPA使用起来比ORM要方便。使用JPA不用关注底层使用什么数据库。

规范标准化。JPA是JCP组织发布的,是Java官方规定的统一的API。目前已经有多种框架实现JPA标准。使用了JPA的系统可以自由选择遵循JPA标准的框架,并能够自由更换。

事务性、大数据量。JPA底层使用关系数据库进行存储,因此具备关系数据库的特点,例如事务性、数据完整性、并发访问、大数据量等。

与其他持久化技术相比,JPA有很大的技术优势。表列出了JPA与其他持久化技术的比较。

JPA的劣势

由于非常新,JPA 规范可能还需要进过重要发展才会变得很稳定。

JPA 是一个规范而不是一个产品。需要提供商提供一个实施,才能获得这些基于标准的 API 的优势。

八、jpa文件是什么?

JPA是Java Persistence API的简称,中文名Java持久层API,是JDK 5.0注解或XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中。

Sun引入新的JPA ORM规范出于两个原因:其一,简化现有Java EE和Java SE应用开发工作;其二,Sun希望整合ORM技术,实现天下归一。

九、语言学习属于什么学习?

现在英语学习非常流行,许多幼儿园都开设了英语课程。原版进口的幼儿英语教材让孩子们从小就学习英语教材。传统的英语语言学习,被粗暴地归为背单词和做题,而实际上真正的语言学习有更多的内容,那么英语语言学习是在学习什么呢,语言知识有哪些类型呢?

在二语习得理论中,关于语言知识的分类,学术界最具代表性的是Polanyi(1958)提出的显性知识与隐性知识分类说。“显性知识”是二语学习者能意识到、能说出来的语言规则知识,“隐性知识”则是二语学习者能用但表达不出来的直觉知识。由于学习是个动态的复杂过程,显性/隐性知识难以准确测量,因此很难界定,显/隐性知识之间有无接口,能否互相转化,也仍然存在很多争议。Bialystok(1994)认为通过不断地练习或训练,不但显性知识可以转换成隐性知识,而且隐性知识也可以显性化。国内一些关于显性/隐性知识关系的实证研究也显示:显性/隐性知识在一定的条件下可以相互转化。

相对于波兰尼(Polanyi)的知识分类,认知心理学的知识分类:陈述性知识与程序性知识,由于有着认知神经科学的依据(两种知识在人脑中分别有不同的表征区域)而显得更为明确。在语言学习中,语言结构知识(语音、词汇、语法的基本规则)属于陈述性知识,具有显性特征;而语用知识(如何在不同的语境中正确地使用语言结构知识的规则)属于程序性知识,具有隐性特征。显性知识与隐性知识的区别在于是否能进行外部表征(语言描述),而程序性知识与陈述性知识的区分则在于其内部表征的层次和区域不同。认知心理学认为,具有隐性属性的程序性知识是可以被外部表征的。这为语言知识的可视化提供了理论依据。

按照认知心理学的假设,知道或具有某种知识,那么你的头脑中必然存在着该事物的心理表征,也就是说你使用了知识表征(knowledge representation)。符号是表征的基本形式。表征可分为内部表征(internal representation)和外部表征(external representation)。其中,物理的、客观的表征形式构成知识的外部表征,体现为语言表征或图形表征等,比如,文字符号、地图和照片等。

十、如何学习C语言?

1、课前预习,课后复习,认真做课堂、课后的作业,理解理论知识。

2、记住语法规则。

3、加强逻辑思维。

4、多动手,通过练习上机了解它的运行过程。

5、实践—>理论—>再实践,刚开始学习C语言时,按示例练习,并推动理论的学习,然后再自己多思考,多上机实践。

顶一下
(0)
0%
踩一下
(0)
0%
相关评论
我要评论
用户名: 验证码:点击我更换图片