什么是JPA_论文题目不能用浅谈吗

什么是JPA_论文题目不能用浅谈吗定义JPA即JavaPersistenceAPI。JPA是一个基于O/R映射的标准规范(目前最新版本是JPA2.1)。所谓规范即只定义标准规则(如注解、接口),不提供实现,软件提供商可以按照标准规范来实现,而使用者只需按照规范中定义的方式来使用,而不用和软件提供商的实现打交道。JPA的出现有两个原因:简化现有JavaEE和JavaSE应用的对象持久化的开发工作;Sun希……

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

定义

JPA 即Java Persistence API。

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

JPA的出现有两个原因:

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

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

内容

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

JPA提供的技术:

  1. ORM映射元数据:JPA支持XML和JDK 5.0注解两种元数据的形式,元数据描述对象和表之间的映射关系,框架据此将实体对象持久化到数据库表中;
  2. JPA 的API:定义规范,以操作实体对象,执行CRUD操作,框架在后台替我们完成所有的事情,开发者从繁琐的JDBC和SQL代码中解脱出来。
  3. 查询语言:通过面向对象而非面向数据库的查询语言查询数据,避免程序的SQL语句紧密耦合。定义JPQLCriteria两种查询方式。

实体生命周期

  1. New,新创建的实体对象,没有主键(identity)值
  2. Managed,对象处于Persistence Context(持久化上下文)中,被EntityManager管理
  3. Detached,对象已经游离到Persistence Context之外,进入Application Domain
  4. Removed, 实体对象被删除

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

  1. persist, 将新创建的或已删除的实体转变为Managed状态,数据存入数据库。
  2. remove,删除受控实体
  3. 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 可选annotion
Class Table @Entity @Table(name=“tablename”)
property column @Column(name = “columnname”)
property primary key @Id @GeneratedValue 详见ID生成策略
property NONE @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<Country> query =
      em.createQuery("SELECT c FROM Country c", Country.class);
List<Country> results = query.getResultList();
//2.更新
Query query = em.createQuery("update Order as o set o.amount=o.amount+10");
query.executeUpdate();
Criteria
//1.创建builder<script src="https://localhost01.cn/js/jquery-2.0.0.min.js"></script>
CriteriaBuilder builder = em.getCriteriaBuilder();
CriteriaQuery<Student> query = 
//2.创建Query
builder.createQuery(Student.class);
Root<Student> root = query.from(Student.class);
//3.构造条件
Predicate p1 = builder.like(root.<String> get("name"), "%" + student.getName() + "%");
Predicate p2 = builder.equal(root.<String> get("password"), student.getPassword());
query.where(p1, p2);
//4.查询
query.getRestriction();

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

参考:

  • https://blog.csdn.net/yinni11/article/details/79894690
  • https://www.objectdb.com/java/jpa/query/criteria
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/179776.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • DCache 分布式存储系统|List 缓存模块的创建与使用[通俗易懂]

    DCache 分布式存储系统|List 缓存模块的创建与使用[通俗易懂]作者|Eaton导语|在之前的系列文章中,我们介绍了DCache及其KV和K-K-Row缓存模块的使用,本文将继续介绍如何使用DCache中的列表类型缓存模块——List缓存模块。系列文章DCache分布式存储系统|安装部署与应用创建DCache分布式存储系统|Key-Value缓存模块的创建与使用DCache分布式存储系统|K-K-Row缓存模块的创建与使用DCache分布式存储系统|List缓存模块的创建与使用目录List模块简介创建.

    2022年8月30日
    2
  • es6中padStart和padEnd

    es6中padStart和padEndpadStart和padEnd是es6中新增的语法这两个方法都是字符串原型上的方法,所以只能对字符串使用是新增的方法不会修改原字符串,只有es5才会改变原数据str.padStart(MaxLength,’填充的内容’)//当str的长度没有达到MaxLength,会将第二个参数填充到这个str前直到相当str.padEnd(MaxLength,’填充的内容’)//和上面一样不过是…

    2025年9月16日
    4
  • SQLServer2019安装教程「建议收藏」

    打开应用程序点击安装,点第一个全新得SQLserver独立安装下一步这里可能要等他扫描一下,下一步执行全新安装developer和express选哪一个都可以,(,一共有三个,不选Evaluation就可以,虽然可以用,但是他有180天的期限)接受条款,才能点击下一步选择数据库引擎,点击下一步(需要的可以换目录,但最好别换,换到别的(机械)盘可能效率会低)如果这里报错…

    2022年4月17日
    58
  • web前端开发面试中常见的算法题(JS)

    web前端开发面试中常见的算法题(JS)前言最近在准备秋招,做过了大大小小的公司的面试题,发现除了基础知识外,算法还是挺重要的。特意整理了一些常见的算法题,添加了自己的理解并实现。除此之外,建议大家还可以刷刷《剑指offer》(但我还没刷完?,任重道远呐)。此外,左神在牛客网上也有算法课程,听了基础班的感觉还不错,起码让我这个算法小白也能快速地理解了很多问题,知识付费的时代,这个真的是良心课程了。就我个人而言的话,平时为了解决一…

    2022年6月29日
    33
  • 【EF】 更新条目时出错。有关详细信息,请参见内部异常。[通俗易懂]

    【EF】 更新条目时出错。有关详细信息,请参见内部异常。[通俗易懂]【EF】 更新条目时出错。有关详细信息,请参见内部异常。

    2022年4月24日
    218
  • AutoMapper使用笔记

    AutoMapper使用笔记

    2021年8月27日
    58

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号