jpa——学习

总结精炼于http://www.yiibai.com/jpa/jpa_architecture.html
其他不错的文章:介绍Jpa注解(注意Mybatis可没有实现Jpa)http://blog.csdn.net/u014421556/article/details/52040263
JPA(Java持久性API)是存储业务实体关联的实体的来源。它显示了如何定义一个面向普通Java对象(POJO)作为一个实体,以及如何与管理关系实体。
类疾病的结构图如下

192R64962-0.png

单元 描述
EntityManagerFactory 这是一个EntityManager的工厂类。它创建并管理多个EntityManager实例。
EntityManager 这是一个接口,它管理的持久化操作的对象。它的工作原理类似工厂的查询实例。
Entity 实体是持久性对象是存储在数据库中的记录。
EntityTransaction 它与EntityManager是一对一的关系。对于每一个EntityManager,操作是由EntityTransaction类维护。
Persistence 这个类包含静态方法来获取EntityManagerFactory实例。
Query 该接口由每个JPA供应商,能够获得符合标准的关系对象。
——————
类和接口之间的关系属于javax.persistence包。下图显示了它们之间的关系。
192R61c4-1.png

EntityManagerFactory和EntityManager的关系是1对多。这是一个工厂类EntityManager实例。
EntityManager和EntityTransaction之间的关系是1对1。对于每个EntityManager操作,只有一个EntityTransaction实例。
EntityManager和Query之间的关系是1对多。查询数众多可以使用一个EntityManager实例执行。
EntityManager实体之间的关系是1对多。一个EntityManager实例可以管理多个实体。
————————
对象关系映射
对象关系映射(ORM)简要地告诉什么是ORM以及它是如何工作。 ORM是从对象类型的数据隐蔽到关系型,反之亦然编程能力。
ORM主要特征是映射或绑定一个目的是它的数据库中的数据。而映射,我们要考虑的任何其他表中的数据,数据的类型,并具有自一个或多个实体的关系。
高级功能
惯用的持久性:它使您能够编写使用面向对象的类持久性类。
高性能:它有许多抓取技术和充满希望的锁定技术。
可靠的:它是高度稳定的,被很多专业程序员。
ORM架构
在ORM架构如下所示。
194HR940-0.png

在上述体系结构解释了如何对象数据存储到关系数据库中的三个阶段。
第1阶段
第一阶段,命名为对象数据阶段,包括POJO类,服务接口和类。它是主要的业务组件层,其具有业务逻辑操作和属性。
例如,让我们举个员工数据库的架构。
Employee POJO类包含属性,如ID,姓名,工资和标识。它也包含类似属性setter和getter方法。
Employee DAO/服务类包含服务方法,如建立员工,发现员工和删除员工。
第2阶段
第二阶段,称为映射或持久性的阶段,包括JPA提供者,映射文件(orm.xml),JPA装载器和对象网格。
JPA提供者:这是一个包含了JPA(javax.persistence)供应的产品。例如EclipseLink,Toplink,Hibernate等。
映射文件:映射文件(orm.xml中)包含在关系数据库中的一个POJO类的数据和数据之间的映射配置。
JPA装载器:在JPA加载器的工作原理就像一个高速缓冲存储器。它可以加载关系网格数据。它的工作原理类似数据库的副本与服务类POJO数据(POJO类的属性)进行交互。
对象网格:它是可存储的关系数据的副本,如高速缓冲存储器的临时位置。对数据库的所有查询首先被实现在对象网格的数据。只有提交它才会影响到主数据库。
第3阶段
第三阶段是关系数据相关。它包含在逻辑上连接到所述业务组件的关系数据。如上所讨论的,仅当业务组件提交该数据,它被存储到数据库中的物理。在此之前,已修改的数据被存储在高速缓冲存储器作为一个网格格式。在获取数据的过程和存储数据是相同的。
上述三个阶段的编程交互的机制被称为对象关系映射。
————————
http://www.yiibai.com/jpa/jpa_orm_components.html#article-start
mapping.xml文件指示JPA的供应者来映射实体类与数据库表。
也可以用注解。
注解 描述
@Entity 声明类为实体或表。
@Table 声明表名。
@Basic 指定非约束明确的各个字段。
@Embedded 指定类或它的值是一个可嵌入的类的实例的实体的属性。
@Id 指定的类的属性,用于识别(一个表中的主键)。
@GeneratedValue 指定如何标识属性可以被初始化,例如自动,手动,或从序列表中获得的值。
@Transient 指定的属性,它是不持久的,即,该值永远不会存储在数据库中。
@Column 指定持久属性栏属性。
@SequenceGenerator 指定在@GeneratedValue注解中指定的属性的值。它创建了一个序列。
@TableGenerator 指定在@GeneratedValue批注指定属性的值发生器。它创造了的值生成的表。
@AccessType 这种类型的注释用于设置访问类型。如果设置@AccessType(FIELD),然后进入FIELD明智的。如果设置@AccessType(PROPERTY),然后进入属性发生明智的。
@JoinColumn 指定一个实体组织或实体的集合。这是用在多对一和一对多关联。
@UniqueConstraint 指定的字段和用于主要或辅助表的唯一约束。
@ColumnResult 参考使用select子句的SQL查询中的列名。
@ManyToMany 定义了连接表之间的多对多一对多的关系。
@ManyToOne 定义了连接表之间的多对一的关系。
@OneToMany 定义了连接表之间存在一个一对多的关系。
@OneToOne 定义了连接表之间有一个一对一的关系。
@NamedQueries 指定命名查询的列表。
@NamedQuery 指定使用静态名称的查询。
Java Bean标准
Java类封装了实例的值及其行为为对象称为一个单元。 Java Bean是一个临时的存储和可重用的组件或对象。它是有一个默认的构造函数和getter和setter方法来初始化实例序列化的类单独的属性。
Bean约定
bean包含其默认构造函数或包含序列化实例的文件。因此,一个bean可以实例化另一个bean。
bean属性可以被隔离成布尔属性或者非布尔属性。
非布尔属性包含getter和setter方法。
布尔属性包含setter和方法。
任何字段的getter方法应从小字母get(Java方法的公约)开始,之后使用大写字母开头的字段名。例如,字段名为salary,因此这一字段的getter方法为getSalary()。
任何属性的setter方法应该先从小字母的集合(Java方法公约)开始,继续以大写字母,参数值设置为字段开头的字段名。例如,字段名为salary,因此这一字段的setter方法是setSalary(double sal )。
对于布尔型属性,方法是检查它是否是 true 或 false。例如,Boolean属性为空,则该字段的就是方法isEmpty()。
————————————————————
JPA实体管理器
就是几个例子。
创建:
public class CreateEmployee
{
public static void main( String[ ] args )
{
EntityManagerFactory emfactory = Persistence.
createEntityManagerFactory( "Eclipselink_JPA" );
EntityManager entitymanager = emfactory.
createEntityManager( );
entitymanager.getTransaction( ).begin( );

Employee employee = new Employee( ); 
employee.setEid( 1201 );
employee.setEname( "Gopal" );
employee.setSalary( 40000 );
employee.setDeg( "Technical Manager" );
entitymanager.persist( employee );
entitymanager.getTransaction( ).commit( );

entitymanager.close( );
emfactory.close( );

}
}
更新Employee:
public class UpdateEmployee
{
public static void main( String[ ] args )
{
EntityManagerFactory emfactory = Persistence.
createEntityManagerFactory( "Eclipselink_JPA" );
EntityManager entitymanager = emfactory.
createEntityManager( );
entitymanager.getTransaction( ).begin( );
Employee employee=entitymanager.
find( Employee.class, 1201 );
//before update
System.out.println( employee );
employee.setSalary( 46000 );
entitymanager.getTransaction( ).commit( );
//after update
System.out.println( employee );
entitymanager.close();
emfactory.close();
}
}

————————————
还有持久化语言:JPQL
public class ScalarandAggregateFunctions
{
public static void main( String[ ] args )
{
EntityManagerFactory emfactory = Persistence.
createEntityManagerFactory( "Eclipselink_JPA" );
EntityManager entitymanager = emfactory.
createEntityManager();
//Scalar function
Query query = entitymanager.
createQuery("Select UPPER(e.ename) from Employee e");
List<String> list=query.getResultList();

for(String e:list)
{
    System.out.println("Employee NAME :"+e);
}
//Aggregate function
Query query1 = entitymanager.
        createQuery("Select MAX(e.salary) from Employee e");
Double result=(Double) query1.getSingleResult();
System.out.println("Max Employee Salary :"+result);

}
}
————
再高级映射,就是支持继承,支持一对一、多对多之类的。
————
还有表中API。就是用方法进行CURD操作。
————

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,539评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,911评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,337评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,723评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,795评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,762评论 1 294
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,742评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,508评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,954评论 1 308
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,247评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,404评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,104评论 5 340
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,736评论 3 324
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,352评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,557评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,371评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,292评论 2 352

推荐阅读更多精彩内容