jpa

jpa

**1jpa入门**

JPA是Java Persistence API的简称,中文名 Java持久层API,它和学的jdbc或者spring-jdbc同一个层次
持久层:dao层 操作数据库那层
JPA它做持久层API
它是对象关系映射(ORM) 规范
ORM:对象 关系 映射

JPA的hibernate区别

JPA它是ORM的规范,hibernate是其中一个实现框架

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)

JPA的自动创建表策略

数据库的建表策略
create: 创建策略 表示每次操作的时候,都要先删除表,在创建表 – 测试上面
create-drop:创建删除策略 每次在操作的时候,先删除表 在创建表 在删除表 --没有用 比较临时表上面
update : 更新策略 --测试最多的 没有会跟我在数据库创建出来 --掌握
validate : 验证策略 – 验证数据库配置和实体对象配置是否一致,如果不一致就会报错
比如数据库没有表,有对应的实体对象 报错
数据库表有多余字段 ,对应的实体对象没有字段 也不会错误
数据库少字段 username,实体对象有username ,会报错 --假如数据库已经把所有表创建好,我们自己在代码在创建好

JPA核心的类

Persistence:通过它我们可以得到EntityManagerFactory

 Persistence.createEntityManagerFactory("cn.itsource.jpa")			

EntityManagerFactory:实体管理工厂对象

作用:它是重量级的对象,因为它和数据库打交道,我们不要频繁的创建和销毁,如果我们频繁创建该对象或者销毁该对象,很损耗系统。尽量满足一个原则,1:1:1
1的应用程序对应1对应数据库 对应1个entityManagerFactory,尽量可以达到共享的效果,而且要注意线程安全问题(ThreadLocal)
(1)包含数据库的连接池在这里
(2)包含二级缓存
(3)包含预定义的jpql或者sql
(4)管理实体的之间关系 Employee(员工) Department(部门) 多对一

EntityManager:(经常使用对象) 实体管理对象

缓存命中条件:
同一个entityManagerFactory 同一个entityManager 同一个OID(实体对象主键id)

EntityTransaction
实体事务对象:
事务:一组操作 同生共死

EntityTransaction transaction = entityManager.getTransaction();

你可能感兴趣的:(java)