【jpa】简介和项目生成、API-初级入门
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-初级入门相关推荐
- 为TypeScript项目生成API文档
为TypeScript项目生成文档 使用typedoc为TypeScript项目生成API文档. 1. 使用typedoc生成HTML文档 需要安装 typedoc. npm i typedoc 可以 ...
- 短链服务问题解决-跳转问题-短链生成方案初级入门(二) 连载持续更新中
目录 1.问题一:长链的关系和短链的关系是一对一还是一对多? 2.问题二:前端访问短链是如何跳转到对应的页面的? 3.问题三:短链码如何是如何生成的 为什么要用62进制转换,不是64进制? 1.问题一 ...
- 将项目生成api及maven依赖,用feign暴露接口给外部调用
首先写一个某接口的feign,对外暴露接口 1.controller @Api(tags = "用户管理内部接口") @RestController @RequestMapping ...
- 短链服务和应用场景介绍-初级入门(一) 连载持续更新中
目录 1.什么是短链? 2.为什么需要这种短链服务? 3.短链组成 4.最简单的方式 5.短链创建者和访问者周期 6.短链URL生成服务里面的问题你能提前想到哪些? 1.什么是短链? 协议://短链域 ...
- uni-app项目开发-----初级入门教程(从0到1制作打包自己的app)
uni-app项目开发-----初级入门教程(从0到1制作打包自己的app) uni-app实现了一套代码,同时运行到多个平台.支持iOS模拟器.Android模拟器.H5.微信开发者工具.支付宝小程 ...
- springfox源码_【开源项目】springfox-bridge:随心所欲地为非restful接口生成API文档...
一.引言 目前,利用swagger框架为restful接口编写API文档非常流行,在spring web项目中,利用springfox+swagger更是可以通过注解的方式直接进行API文档的生成,这 ...
- conan入门(七):将自己的项目生成conan包
conan 将自己的项目生成conan包 Conan 是 C 和 C++ 语言的依赖项和包管理器.它是免费和开源的,适用于所有平台(Windows.Linux.OSX.FreeBSD.Solaris ...
- Spring 2 和 JPA 简介
Spring 2 和 JPA 简介 用 Eclipse 和 DB2 Express-C 研究 Spring 2 框架和 Java 持久性 API 第 1 页,共 16 页 对本教程的评价 帮助我们改进 ...
- python全栈工程师 pdf_python全栈工程师项目开发实例实战入门教程百度云
python全栈工程师项目开发实例实战入门教程百度云 课程目录: 开学典礼 pycharm的基本使用 Python基本语法 数值类型数据及运算 字符串的基本操作 字符串的常用方法 列表的基本使用 列表 ...
- hibernate 和 jpa简介
hibernate 和 jpa简介 小引 什么是ORM思想? Hibernate概述 JPA概述 hibernate 和 jpa的关系 jpa的常用对象 JPA中的主键生成策略 JPA的入门案例 配置 ...
最新文章
- 验证数字的正则表达式集
- Android stado 运行项目,apk does not exist on disk.
- 第二次结对编程之软件测试
- ML之FE:特征工程之数据处理常用案例总结(数值型数据处理、类别型数据处理)及其代码实现
- VTK:图表之VisualizeGraph
- 弗拉明戈舞_百度百科
- C语言错误: HEAP CORRUPTION DETECTED
- 每日一题:leetcode1579.保证图可完全遍历
- 从1.5k到18k, 一个程序员的5年成长之路
- 为什么有的老板可以一整天都待在他自己的办公室里不出来
- Linux 块与文件大小
- iOS开源项目周报0302
- PHP nodejs session,Nodejs中session的简单使用及通过session实现身份验证的方法
- iphone GCDAsyncSocket 详解
- js实现抽饭系统(类似抽检系统)双按钮控制系统
- 电阻(1)电阻种类篇
- 数字孪生城市的2个技术关键点 优锘ThingJS
- excel加水印,由于excel没有加水印功能,实际上操作是将图片丢进去
- 使用邮箱教学|邮箱是什么?办公中是怎么使用的
- ZYNQ开发系列——hw_platform包和BSP包中的一些理解