1 什么是JPA
用于对象持久化的 API到数据库
Java EE 5.0 平台标准的 ORM 规范,使得应用程序以统一的方式访问持久层
2.JPA的hibernate区别
JPA它是ORM的规范,hibernate是其中一个实现框架
JDBC的缺点:
优点:操作数据库最底层,性能最高(前提是你要有相应的经验,并且是一个数据库高手)
缺点1.因为JAVA是面向对象的,JDBC没有做到使数据能够面向对象的编程,使程序员的思考仍停留在SQL语句上。
操作比较繁琐,很多代码需要重复写很多次。
如果遇到批量操作,频繁与数据库进行交互,容易造成效率的下降
2.移植数据库很麻烦,改动比较多
主键的生成方式不同(mysql使用自增,oracle使用序列sequence)
分页的sql语句也是不同(mysql使用limit,oracle使用ROWNUM)
JPA的优缺点:
优点
重复性代码不多 完成crud 只需要调用方法就可以搞定 比如保存 perisit(Employee employee)
merge
移植数据很方便,到时候只需要配置一些方言就可以搞定
提供的世界级缓存支持(一级缓存 二级缓存)
不用写sql ,会自动生成
面向对象操作,操作对象就相当于操作数据库,但是jpa也是支持sql
缺点:
1.不能干预sql语句的生成
entityManager.find(User.class, 1L);
find方法默认查询t_user表的所有字段
自动生成select user0_.id,user0_.name,user0_.age from t_user user0_ where user0_.id=?
2.一个项目中,如果对sql语句的优化要求比较高,不适合用JPA(不过可以使用JPA对原生sql的支持来解决)
3.如果一张表中有上亿级别的数据量,也不适合用JPA,其实也不适合用jdbc(可以使用数据库读写分离,分库分表方案解决)
2.JPA的完成CRUD
新增:persist --事务
修改:merge --事务
删除:remove --事务
查询:find
查询所有:使用jpql语句
工具类抽取
创建工厂
EntityManagerFactory f =Persistence.createEntityManagerFactory();
创建entitymanager对象
EntityManager eg = f.createEntityManager();
增删改需要事务
删除的对象是查出来的(最好判断是否为空)
查询所有(jpql) from Employee
3.JPA核心的类
1.Persistence:通过它我们可以得到EntityManagerFactory
Persistence.createEntityManagerFactory("cn.itsource.jpa")
2.EntityManagerFactory:实体管理工厂对象
作用:它是重量级的对象,因为它和数据库打交道,我们不要频繁的创建和销毁,如果我们频繁创建该对象或者销毁该对象,很损耗系统。尽量满足一个原则,1:1:1的应用程序对应1对应数据库 对应1个entityManagerFactory,尽量可以达到共享的效果,而且要注意线程安全问题(ThreadLocal)
3.EntityManager:(经常使用对象) 实体管理对象
可以完成CRUD
这个对象 你可以频繁创建和销毁,不会销毁太多性能 注意,如果多个操作 都在使用在对象,也会线程安全问题
4.维护了一个一级缓存
缓存(内存):容器,装数据 操作之前可以把数据,先从数据库读取出来,放入到缓存里面,下次来使用的,不需要查询数据库,直接从缓存里面取数据
怎么使用一级缓存?
缓存命中条件:同一个entityManagerFactory 同一个entityManager 同一个OID(实体对象主键id)