浅谈JPA一:JPA是什么?

您所在的位置:网站首页 验房是干嘛的 浅谈JPA一:JPA是什么?

浅谈JPA一:JPA是什么?

2024-07-11 16:50| 来源: 网络整理| 查看: 265

定义

JPA 即Java Persistence API。

JPA 是一个基于O/R映射的标准规范(目前最新版本是JPA 2.1 )。所谓规范即只定义标准规则(如注解、接口),不提供实现,软件提供商可以按照标准规范来实现,而使用者只需按照规范中定义的方式来使用,而不用和软件提供商的实现打交道。

JPA的出现有两个原因:

简化现有Java EE和Java SE应用的对象持久化的开发工作;Sun希望整合对ORM技术,实现持久化领域的统一。

JPA 的主要实现有Hibernate、EclipseLink 和OpenJPA 等,这也意味着我们只要使用JPA 来开发,无论是哪一个开发方式都是一样的。

内容

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

JPA提供的技术: ORM映射元数据:JPA支持XML和JDK 5.0注解两种元数据的形式,元数据描述对象和表之间的映射关系,框架据此将实体对象持久化到数据库表中;JPA 的API:定义规范,以操作实体对象,执行CRUD操作,框架在后台替我们完成所有的事情,开发者从繁琐的JDBC和SQL代码中解脱出来。查询语言:通过面向对象而非面向数据库的查询语言查询数据,避免程序的SQL语句紧密耦合。定义JPQL和Criteria两种查询方式。 实体生命周期 New,新创建的实体对象,没有主键(identity)值Managed,对象处于Persistence Context(持久化上下文)中,被EntityManager管理Detached,对象已经游离到Persistence Context之外,进入Application DomainRemoved, 实体对象被删除

EntityManager提供一系列的方法管理实体对象的生命周期,包括:

persist, 将新创建的或已删除的实体转变为Managed状态,数据存入数据库。remove,删除受控实体merge,将游离实体转变为Managed状态,数据存入数据库。

如果使用了事务管理,则事务的commit/rollback也会改变实体的状态。

ID生成策略

ID对应数据库表的主键,是保证唯一性的重要属性。JPA提供了以下几种ID生成策略

GeneratorType.AUTO ,由JPA自动生成GenerationType.IDENTITY,使用数据库的自增长字段,需要数据库的支持(如SQL Server、MySQL、DB2、Derby等)GenerationType.SEQUENCE,使用数据库的序列号,需要数据库的支持(如Oracle)GenerationType.TABLE,使用指定的数据库表记录ID的增长 需要定义一个TableGenerator,在@GeneratedValue中引用。例如:@TableGenerator( name=“myGenerator”, table=“GENERATORTABLE”, pkColumnName = “ENTITYNAME”, pkColumnValue=“MyEntity”, valueColumnName = “PKVALUE”, allocationSize=1 )@GeneratedValue(strategy = GenerationType.TABLE,generator=“myGenerator”) 实体关系映射(ORM) 基本映射 对象端数据库端annotion可选annotionClassTable@Entity@Table(name=“tablename”)propertycolumn–@Column(name = “columnname”)propertyprimary key@Id@GeneratedValue 详见ID生成策略propertyNONE@Transient 映射关系

JPA定义了one-to-one、one-to-many、many-to-one、many-to-many 4种关系。可使用joinColumns来标注外键、使用 @Version来实现乐观锁。

关联关系还可以定制延迟加载和级联操作的行为。

通过设置fetch=FetchType.LAZY 或 fetch=FetchType.EAGER来决定关联对象是延迟加载或立即加载。通过设置cascade={options}可以设置级联操作的行为。

其中options可以是以下组合:

CascadeType.MERGE 级联更新CascadeType.PERSIST 级联保存CascadeType.REFRESH 级联刷新CascadeType.REMOVE 级联删除CascadeType.ALL 级联上述4种操作 查询方式 对于简单的静态查询 - 可能优选基于字符串的JPQL查询(例如Named Queries)非查询类型安全对于在运行时构建的动态查询 - 可能首选Criteria API查询类型安全 JPQL //1.查询 TypedQuery query = em.createQuery("SELECT c FROM Country c", Country.class); List results = query.getResultList(); //2.更新 Query query = em.createQuery("update Order as o set o.amount=o.amount+10"); query.executeUpdate(); Criteria //1.创建builder CriteriaBuilder builder = em.getCriteriaBuilder(); CriteriaQuery query = //2.创建Query builder.createQuery(Student.class); Root root = query.from(Student.class); //3.构造条件 Predicate p1 = builder.like(root. get("name"), "%" + student.getName() + "%"); Predicate p2 = builder.equal(root. get("password"), student.getPassword()); query.where(p1, p2); //4.查询 query.getRestriction();

jpa动态查询方式,过程大致就是,创建builder => 创建Query => 构造条件 => 查询

参考:

https://blog.csdn.net/yinni11/article/details/79894690https://www.objectdb.com/java/jpa/query/criteria


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3