JPA入门
1 .JPA的认识
1.1 什么是JPA–理解
JPA是Java Persistence API的简称,中文名 Java持久层API,它和学的jdbc或者spring-jdbc同一个层次
持久层:dao层 操作数据库那层
1.2 JPA再次理解–理解
(1)JPA它做持久层API
(2)它是对象关系映射(ORM) 规范
ORM:对象 关系 映射
[外链图片转存失败(img-5Q7ZcJhm-1568814643146)(C:\Users\JAVA\AppData\Roaming\Typora\typora-user-images\1568772969907.png)]
(3) JPA的hibernate区别
JPA它是ORM的规范,hibernate是其中一个实现框架
(4)为什么要JPA,不用jdbc? --比较jpa和jdbc优缺点 – 面试题
jdbc:
缺点:
代码重复性比较高
封装数据 比较麻烦
移植数据库比较麻烦
没有缓存—提高的访问速度
面向sql。不是面向对象操作
好处:
如果是sql高手,使用jdbc相当爽 操作数据库最底层技术,其他的框架技术都是在jdbc上面进行封装
在实现缓存 就需要在内存里面存储数据 --? Map(key,value)
JPA:
好处:
重复性代码不多 完成crud 只需要调用方法就可以搞定 比如保存 perisit(Employee employee)
merge
移植数据很方便,到时候只需要配置一些方言就可以搞定
提供的世界级缓存支持(一级缓存 二级缓存)
不用写sql ,会自动生成
面向对象操作,操作对象就相当于操作数据库,但是jpa也是支持sql
缺点:
有时候,我们不能干预sql的生成,如果你对sql要求比较高,不适合使用jpa,而已数据量太大,比如表里面有上亿条数据,也不是我们jpa。有些性能无法控制 select * from ,怎么办?用mybatis
JPA 一些中小型的项目
SSM(springmvc spring mybatis)
1.3 jpa小结
jpa 是什么:java perisitence api java持久层的api
jpa和hibernate关系:jpa是ORM对象关系映射的规范,hibernate是其中一个实现
jpa和jdbc的区别:
2 使用JPA
2.1JPA基本使用(掌握)
(1)下载
(2)导入包–了解pom.xml
[外链图片转存失败(img-KalgYAsT-1568814643159)(C:\Users\JAVA\AppData\Roaming\Typora\typora-user-images\1568776897291.png)]
(3)配置文件
persistence.xml配置文件
配置连接数据库配置
(4)测试
得到EntityManagerFactory
2.2 JPA的完成CRUD(掌握)
新增:persist --事务
修改:merge --事务
删除:remove --事务
查询:find
查询所有:使用jpql语句
工具类抽取
2.3 JPA的自动创建表策略(理解)
`数据库的建表策略
create: 创建策略 表示每次操作的时候,都要先删除表,在创建表 – 测试上面
create-drop:创建删除策略 每次在操作的时候,先删除表 在创建表 在删除表 --没有用 比较临时表上面
update : 更新策略 --测试最多的 没有会跟我在数据库创建出来 --掌握
validate : 验证策略 – 验证数据库配置和实体对象配置是否一致,如果不一致就会报错
比如数据库没有表,有对应的实体对象 报错
数据库表有多余字段 ,对应的实体对象没有字段 也不会错误
数据库少字段 username,实体对象有username ,会报错 --假如数据库已经把所有表创建好,我们自己在代码在创建好
2.4 JPA核心的类
Persistence:通过它我们可以得到EntityManagerFactory
Persistence.createEntityManagerFactory("cn.itsource.jpa")
EntityManagerFactory:实体管理工厂对象
作用:它是重量级的对象,因为它和数据库打交道,我们不要频繁的创建和销毁,如果我们频繁创建该对象或者销毁该对象,很损耗系统。尽量满足一个原则,1:1:1
1的应用程序对应1对应数据库 对应1个entityManagerFactory,尽量可以达到共享的效果,而且要注意线程安全问题(ThreadLocal)
(1)包含数据库的连接池在这里
(2)包含二级缓存–(用不到 明天用)
(3)包含预定义的jpql或者sql (PreparedStatement)–(jpql在用)
(4)管理实体的之间关系 Employee(员工) Department(部门) 多对一(第三天)
EntityManager:(经常使用对象) 实体管理对象
(1)可以完成CRUD
这个对象 你可以频繁创建和销毁,不会销毁太多性能 注意,如果多个操作 都在使用在对象,也会线程安全问题
比如转账 强哥 --> $10000 -->hanghang -->entityManager
健健 取钱 -->entityManager
–事务并发带来的问题(后面讲)
(2)维护了一个一级缓存
缓存(内存):容器,装数据 操作之前可以把数据,先从数据库读取出来,放入到缓存里面,下次来使用的,不需要查询数据库,直接从缓存里面取数据
怎么使用一级缓存?
缓存命中条件:同一个entityManagerFactory 同一个entityManager 同一个OID(实体对象主键id)
EntityTransaction(了解)
实体事务对象:
事务:一组操作 同生共死