B站 尚硅谷 jpa 初级入门 https://www.bilibili.com/video/BV1vW411M7zp?p=6

简介

JPA java persistence API 用于对象持久化API

统一java应用程序访问ORM的方式,是ORM的一种规范,不是ORM框架

JPA是hibernate的一个抽象:JPA是规范,hibernate是实现

JPA是注解式的,JPQL查询语言


JPA使用步骤

创建工程,导入依赖(hibernate的require里的包)

1.创建persisitence.xml文件(persistence-unit标签下properties标签)

  • 指定交互数据库(driver、url、user、pwd)

  • 指定JPA使用那个持久化框架和配置框架基本属性(properties-生成数据表的策略hbm2db.auto、显示和格式化sql ;provider标签-配置PersistenceProvider的实现类比如hibernatePersistenceProvider)

2.创建实体类,使用annotation来描述实体类和db表之间的映射关系

配置注解

  • 表@Entity @Table(name=)

  • 字段@Id @GennerrateValue(strategy=)@column(字段名一样不用写)

  • 配置文件,添加持久化类(class标签,类名)

3.使用JPA API 增删改查

  • 创建EntityManagerFactory(对应hibernate的sessionFactory)

  • 创建EntityMangager(对应hibernate的session)

  • 开启事务

  • 持久化操作

  • 提交事务

  • 关闭EntityMangager

  • 关闭EntityManagerFactory


基本注解

@Entity 映射实体类和db表,表名和类名不一样加@Table

@Id 主键 @GennerrateValue 主键生成策略

MYSQL对应auto sqlserver对应identity

-AUTO jpa默认选项

-IDENTITY 数据库ID自增方式,oracle不支持

-SEQUENCE 通过序列产生主键 @SequenceGennerator注解指定序列名,mysql不支持

-TABLE 通过表产生主键,矿建借由表模拟序列产生主键,放标数据库移植

@Basic 表示类属性到db表的字段映射,对没有注解的get方法,默认basic,所以加不加都行

-fetch:属性读取策略,有eager和lazy,表示主支抓取和延迟加载。默认eager

-option:属性是否允许为null,默认true允许

@column

实体属性和db表的字段不同时使用,可以和@Id一起使用

常用属性是name,映射表名。还有unique、nullable、length,

这个注解可以用getter方法上

@Transient

工具方法,不需要映射为数据表的一列。因为默认@Basic的,所以工具方法需要加这个注解

@Temporal

确定Date类型的精度,数据库中Date精度为DATE\TIME\TIMESTAMP对应日期、时间和两者兼备。用这个注解调整精度


Tbale 主键生成策略 用的不多

TODO


JPA API

persistence类是用于获取entitymanagerfactory实例,该类包含静态方法createentitymanagerFactory,这个方法两个重载版本:

-带有一个参数方法以jpa配置文件persistence.xml中持久化单元名为参数

-带有两个参数的方法:前一个参数一样,后一个map是jpa相关属性

entitymanagerfactory接口主要用来创建entitymanager实例。主要四个方法

1.创建2.带配置创建3.判断是否开启4.关闭factory


增删改查API

find方法:调用就查询(类似hibernate的get)

getReference方法:懒加载,使用时候再查询。如果连接关闭后再调用,会出现代理加载异常

(类似hibernate的load方法)

save方法:hibernate保存,如果有就插入

persistence方法:保存,对象有id则会抛出异常,不会insert

delete:hibernate的,可以删除持久化对象和游离对象。

remove方法:删除db持久化对象,但是不能移除游离对象。想删除可以先find,关联对象,再删除


实体状态:

-新建:未拥有持久化主键,也叫临时态/子哟态

-持久化:拥有持久化主键,持久化简历了上下文环境,加入了session缓存中内外部状态都有。例如save方法

-游离状态:拥有持久化主键,但是没有持久化建立上下文环境。不再处于session缓存中,有内外部状态,由手工管理内外部状态同步,当session关闭时候

-删除状态:拥有持久化主键,持久化建立上下文环境,但是从数据库中删除

hibernate参考图


merge(T entity) 数据库插入更新操作 saveorupdate,返回T

1.T临时对象,没有主键。创建一个新的对象,把java中的临时临时对象属性copy到新对象中,然后对新对象持久化,执行一个insert

2.T游离对象,有主键。若entitymananger缓存中没有对象,且db中没有对应记录,jpa会创建一个新对象,然后把当前游离对象属性赋值到新对象中,对新对象执行insert

3.T游离对象,若entitymananger缓存中没有对象,db有对应记录,jpa会查询对应记录,返回记录的一个对象,然后把游离对象属性复制到这个返回对象中,然后对这个对象update

4.T游离对象,缓存中有对应对象,jpa把游离对象属性复制到缓存对象中,对其update

hibernate中session不能对两个相同id关联,这里是错误的,但是jpa会查询复制。


EM 方法

、 

hibernate参考图

flush()方法

和hibernatesession的flush方法一样,将save update delete等方法信息同步到db中,并清空缓存。如果不提交事务,只flush,执行sql,但是db信息不改变。

setFlushMode(FlushModeType flushMode)设置持久化上下文环境的FlUSH模式,参数取2个枚举

-FlushModeType .AUTO 自动更新db实体

-FlushModeType .COMMIT 为直到提交事务才更新db记录

getFlushMode():获取持久化上下文的Flush模式,返回FlushModeType类的枚举值

refresh(entity)更新实例属性值从db

clear()清除持久化上下文,端开所有关联实体,未提交的更新会被撤消

contains(entity) 判断实例是否属于上下文环境管理的实体

isopen()判断当前entitymanager是否打开

getTransaction()返回资源层的事务对象。entityTransaction实例用于开始和提交多个事务

close()关闭entitymanager。关闭后使用em都会抛出IllegalstateException异常,除了getTransaction()和isopen(返回false)。不过调用EM在事务完成之前处于被管理状态。


EntityTransaction 事务

该接口用于EM的事务操作,通过getTransaction()获得实例

JPA需要getTransaction-beggin-commit事务

hibernate:beggin-commit

commit() rollback()

setRollbackOnly() 当前事务只能被撤销

getRollbackOnly()查看当前事务是否设置成上面那个条件

【jpa】简介和项目生成、API-初级入门相关推荐

  1. 为TypeScript项目生成API文档

    为TypeScript项目生成文档 使用typedoc为TypeScript项目生成API文档. 1. 使用typedoc生成HTML文档 需要安装 typedoc. npm i typedoc 可以 ...

  2. 短链服务问题解决-跳转问题-短链生成方案初级入门(二) 连载持续更新中

    目录 1.问题一:长链的关系和短链的关系是一对一还是一对多? 2.问题二:前端访问短链是如何跳转到对应的页面的? 3.问题三:短链码如何是如何生成的 为什么要用62进制转换,不是64进制? 1.问题一 ...

  3. 将项目生成api及maven依赖,用feign暴露接口给外部调用

    首先写一个某接口的feign,对外暴露接口 1.controller @Api(tags = "用户管理内部接口") @RestController @RequestMapping ...

  4. 短链服务和应用场景介绍-初级入门(一) 连载持续更新中

    目录 1.什么是短链? 2.为什么需要这种短链服务? 3.短链组成 4.最简单的方式 5.短链创建者和访问者周期 6.短链URL生成服务里面的问题你能提前想到哪些? 1.什么是短链? 协议://短链域 ...

  5. uni-app项目开发-----初级入门教程(从0到1制作打包自己的app)

    uni-app项目开发-----初级入门教程(从0到1制作打包自己的app) uni-app实现了一套代码,同时运行到多个平台.支持iOS模拟器.Android模拟器.H5.微信开发者工具.支付宝小程 ...

  6. springfox源码_【开源项目】springfox-bridge:随心所欲地为非restful接口生成API文档...

    一.引言 目前,利用swagger框架为restful接口编写API文档非常流行,在spring web项目中,利用springfox+swagger更是可以通过注解的方式直接进行API文档的生成,这 ...

  7. conan入门(七):将自己的项目生成conan包

    conan 将自己的项目生成conan包 Conan 是 C 和 C++ 语言的依赖项和包管理器.它是免费和开源的,适用于所有平台(Windows.Linux.OSX.FreeBSD.Solaris ...

  8. Spring 2 和 JPA 简介

    Spring 2 和 JPA 简介 用 Eclipse 和 DB2 Express-C 研究 Spring 2 框架和 Java 持久性 API 第 1 页,共 16 页 对本教程的评价 帮助我们改进 ...

  9. python全栈工程师 pdf_python全栈工程师项目开发实例实战入门教程百度云

    python全栈工程师项目开发实例实战入门教程百度云 课程目录: 开学典礼 pycharm的基本使用 Python基本语法 数值类型数据及运算 字符串的基本操作 字符串的常用方法 列表的基本使用 列表 ...

  10. hibernate 和 jpa简介

    hibernate 和 jpa简介 小引 什么是ORM思想? Hibernate概述 JPA概述 hibernate 和 jpa的关系 jpa的常用对象 JPA中的主键生成策略 JPA的入门案例 配置 ...

最新文章

  1. 验证数字的正则表达式集
  2. Android stado 运行项目,apk does not exist on disk.
  3. 第二次结对编程之软件测试
  4. ML之FE:特征工程之数据处理常用案例总结(数值型数据处理、类别型数据处理)及其代码实现
  5. VTK:图表之VisualizeGraph
  6. 弗拉明戈舞_百度百科
  7. C语言错误: HEAP CORRUPTION DETECTED
  8. 每日一题:leetcode1579.保证图可完全遍历
  9. 从1.5k到18k, 一个程序员的5年成长之路
  10. 为什么有的老板可以一整天都待在他自己的办公室里不出来
  11. Linux 块与文件大小
  12. iOS开源项目周报0302
  13. PHP nodejs session,Nodejs中session的简单使用及通过session实现身份验证的方法
  14. iphone GCDAsyncSocket 详解
  15. js实现抽饭系统(类似抽检系统)双按钮控制系统
  16. 电阻(1)电阻种类篇
  17. 数字孪生城市的2个技术关键点 优锘ThingJS
  18. excel加水印,由于excel没有加水印功能,实际上操作是将图片丢进去
  19. 使用邮箱教学|邮箱是什么?办公中是怎么使用的
  20. ZYNQ开发系列——hw_platform包和BSP包中的一些理解

热门文章

  1. PMBOK项目管理知识体系包括哪几个知识领域?
  2. darknet源码理解(二)---图片的读取
  3. 什么是PaaS平台 ?
  4. android 中角度计算
  5. oracle错误信息提示中英文显示切换
  6. 计算机网络体系结构各层中的网络设备
  7. 烈日炎炎,向亲爱的爸爸说声辛苦了
  8. linux新建用户和目录权限设置密码,用户创建及权限管理
  9. lae界面开发工具入门之介绍十--如何打包资源文件?
  10. 2021-04-15 三级管npn和pnp的区别