JPA-01
- jpa介绍
1、什么是jpa?
jpa:Java Persistence API它就是orm的规范(对象关系映射(ORM) 规范)
2、jpa与Hibernate的关系
JPA它是一个orm规范,而hibernate是其最完美的实现,因为JPA和hibernate都是同一个作者
3、jpa与JDBC的优缺点
1.JPA它底层是基于jdbc实现的,它是面向对象的编程,如果你要操作crud,直接调用其api文档传递对象,它会自动生成对应的sql语句
优点:
1.操作非常方便
2.它给我们提供了缓存(1级缓存/2级缓存)
缺点:因为sql语句是自动生成,所以性能不好控制
2.JDBC它是操作数据库的唯一技术,它是各大数据库厂商实现的,我们在做crud的时候,必须手动编写sql语句
优点:性能好控制
缺点:操作太过于麻烦了
jdbc和jpa都不适合用于大型项目,只适用于小型项目,中大型项目还是使用mybatis来做
二、jpa程序及配置
1、使用jpa的步骤
1.导入jar包
2.配置jpa的核心文件
1).配置持久化单元
2).配置jpa的基本属性
1.用户名
2.密码
3.驱动
4.url地址
5.方言
6.是否显示sql语句
7.建表策略
3.创建domain
4.抽取EntityManagerFactory对象----》因为整个应用系统中,我们只需要一个该对象就可以了
核心方法:
添加: persist
修改: merge
删除: remove()只能传递对象
查询: find/query
2、ORM的概念
持久 英文即 persistence。就是把数据保存到可掉电式存储设备中。持久层就是dao层,原来叫数据访问层,现在一般叫持久层,是一个意思
Object Relational Mapping, 对象关系映射框架,ORM 就是通过将Java对象映射到数据库表,通过操作Java对象,就可以完成对数据表的操作
三、jpa的CRUD
1、提取工具类
public class JPAUtils {
// 保证EntityManagerFactory是单例
private static EntityManagerFactory entityManagerFactory;
static {
try {
// 对应配置文件里面的persistence-unit name="cn.itsource.jpa"
entityManagerFactory = Persistence.createEntityManagerFactory("cn.itsource.jpa");
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException("解析配置文件或者映射配置出现异常:" + e.getMessage());
}
}
public static EntityManager getEntityManager() {
return entityManagerFactory.createEntityManager();
}
}
2、jpa里面的CRUD方法
1.persist持久化方法,保存方法
2.merge方法,修改,必须要有id值
3.remove方法,删除,必须要有id值,先从数据库查出来,还要判断这个对象是否为空
4.查询方法可以不要事务,提高性能
5.find方法,通过主键获取domain对象,传入的参数一定要和domain的id的类型匹配
6.jpql是JPA的查询语言,hql是hibernate的查询语言
jpql:不能出现表名,列名,*,只能是Java的类名,属性名,别名
如果在jpql出现的sql关键字,大小写不敏感,Java的类名,属性名,别名大小写敏感
3、jpa的建表策略
1.create: 先删除表,再创建表 使用场景: 测试阶段,学习阶段
2.create-drop: 先删除表,再创建表,再删除表(EntityManagerFactory要关闭) 使用场景: 测试阶段,学习阶段
3.update: 只增不减(使用场景:真实开发就用它)
4.validate:校验,检查domain中的字段和表中的列是否对应的(个数,类型,名字) 校验标准是根据domain来判断的(使用场景:别人把表给你创建好了,你要根据表生成对应的domain)
四、jpa的核心对象
1、Persistence
主要负责创建EntityManagerFactory对象
2、EntityManagerFactory
它是一个重量级对象
1.二级缓存
2.连接池
3.管理着所有的doamin
4.解析xml,把xml里面的值都放到EntityManagerFactory中
5.它存储预定义jpql语句
使用EntityManagerFactory的规则,遵循1:1:1 1个项目对应一个EntityManagerFactory对应1个数据库
EntityManagerFactory的生命周期: 随着tomcat的启动而创建,tomcat关闭而销毁 EntityManagerFactory是线程安全的
3、EntityManager
它是一个轻量级对象
1.一级缓存
2.连接对象
EntityManager的生命周期: 应该随着你的访问而创建,访问结束之后再销毁 EntityManager是线程不安全的
4、Transactions事务对象
在同一个EnittyManager中拿到都是同一个事务对象
五、缓存
1、一级缓存
EntityManager的一级缓存
查询对象执行的原理: 通过oid在一级缓存中去查询对应的对象,如果没找到,则发送sql语句到数据库中进行查找,它会把查找的对象放到一级缓存中
如果在一级缓存中找到了,直接引用
一级缓存命中的条件
1.同一个oid
2.同一个EntityManager
3.同一个EntityManagerFactory