JAP学习笔记(1)之概述、基本用法和基本注释

本文介绍了JPA的基础知识,包括JPA是什么、与Hibernate的关系,以及JPA的主要技术内容。同时,详细讲解了JPA的基本注解,如@Entity、@Table、@Id、@GeneratedValue等,帮助理解JPA如何实现对象持久化到数据库的映射。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

JPA概述

什么是JPA

1.        JPA:(Java Persistence API)用于对象持久化的API。

2.        作用:提供了标准的ORM规范,使得应用程序以统一的方式访问持久层。

 

JPA与Hibernate的关系

1.        PA 是 hibernate 的一个抽象(就像JDBCJDBC驱动的关系)

1)        JPA 是规范:JPA 本质上就是一种  ORM 规范,不是ORM 框架 —— 因为 JPA 并未提供 ORM 实现,它只是制订了一些规范,提供了一些编程的 API 接口,但具体实现则由 ORM 厂商提供实现

2)        Hibernate 是实现:Hibernate 除了作为 ORM 框架之外,它也是一种 JPA 实现

2.        从功能上来说, JPA 是 Hibernate 功能的一个子集

JPA技术内容

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

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

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

JPA基本使用方法

1.创建JPA工程

2.导入JPA底层依赖的实现类的包及数据库驱动包

        

3.        配置JPA的配置文件persistence.xml

1)        persistence.xml文件必须在META-INF目录下,且文件名称固定。

2)        配置内容如下:


4.        创建持久化类

1)        需要指定实体化类所对应的表。

2)        表中的主键,及主键增长方式。

3)        也可也可以指定属性所对应表中的列名称,不指定列名称默认与属性名相同。


5.        实现持久化操作

1)        创建EntityManagerFactory对象

String persistenceUnitName = "jpa-1";

EntityManagerFactory entityManagerFactory =                               Persistence.createEntityManagerFactory(persistenceUnitName);

2)        创建EntityManager对象

EntityManager entityManager = entityManagerFactory.createEntityManager();

3)        开启事务

EntityTransaction transaction =entityManager.getTransaction();

                   transaction.begin();

4)        持久化操作

entityManger.persist(customer);

5)        提交事务

entityTransaction.commit();

6)        关闭

entityManger.close();

entityMangerFactory.close();

小结

1.        创建persistence.xml, 在这个文件中配置持久化单元

1)        需要指定跟哪个数据库进行交互;

2)        需要指定 JPA 使用哪个持久化的框架以及配置该框架的基本属性

2.        创建实体类, 使用 annotation 来描述实体类跟数据库表之间的映射关系.

3.        使用 JPA API 完成数据增加、删除、修改和查询操作

1)        创建EntityManagerFactory (对应 Hibernate 中的SessionFactory);

2)        创建 EntityManager(对应 Hibernate 中的Session);

JPA基本注解

@Entity

作用:@Entity标注用于实体类声明语句之前,指出该Java类我实体类,将映射到指定的数据库表

@Table

1.        作用:该标注与@Entity标注并列使用,用于指定实体类对象所对应的表名称。

1)        Name属性:用于指明数据库的表名称。

2)        Catalog和schema属性:用于设置表所属的数据库目录或模式,通常为数据库名。

2.        @Table可省略,生成的表名与实体类名称相同。


@Id

1.        作用:用于声明一个实体类的属性映射为数据库的主键列。

2.        位置:置于属性的getter方法之前。


@GeneratedValue

1.        作用:用于标注主键的生成策略,通过strategy属性指定。在默认情况下,自动选择一个最合适底层数据库的主键生成策略。

1)        IDENTITY:采用数据库 ID自增长的方式来自增主键字段,Oracle 不支持这种方式。

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

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

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

@Basic

1.        作用:表示一个简单的属性到数据库表的字段的映射,对于没有任何标注的 getXxxx()方法,默认即为@Basic。

1)        fetch: 表示该属性的读取策略,有 EAGER 和 LAZY 两种,分别表示主支抓取和延迟加载,默认为 EAGER。

2)        optional:表示该属性是否允许为null, 默认为true

@Column

1.        作用:为实体类的属性设置其映射的数据库表的列名称。省略不写属性名=列名称。

1)        Name:用于设置映射数据库表的列名。此外,该标注还包含其它多个属性,如:uniquenullablelength 等。

2)        columnDefinition:表示该字段在数据库中的实际类型。通常 ORM 框架可以根据属性类型自动判断数据库中字段的类型。

a)        对于Date类型仍无法确定数据库中字段类型究竟是DATE,TIME还是TIMESTAMP.。

b)        String的默认映射类型为VARCHAR, 如果要将 String 类型映射到特定数据库的 BLOB 或TEXT 字段类型

2.        位置:置于属性的getter方法之前。

@Transient

1.        作用:表示所标注的属性不映射为表中的列。

@Temporal

1.        作用:在核心的 Java API中并没有定义 Date 类型的精度(temporal precision).  而在数据库中,表示 Date 类型的数据有 DATE, TIME, 和 TIMESTAMP 三种精度(即单纯的日期,时间,或者两者 兼备).在进行属性映射时可使用@Temporal注解来调整精度。

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值