JPA
概念
是什么
JPA(Java Persistence API)是Sun官方提出的Java持久化规范。它为Java开发人员提供了一种对象/关系映射工具来管理Java应用中的关系数据他的作用是简化对mysql的操作
优点
- JPA的主要目标之一就是提供更加简单的编程模型
- JPA拥有可媲美JDBC的查询能力
- JPA的查询语言是面向对象而非面向数据库的,它以面向对象的自然语法构造查询语句
缺点
-
不能干预sql语句的生成
-
一个项目中,如果对sql语句的优化要求比较高,不适合用JPA
-
如果一张表的数据非常大的时候也不能用JPA
ORM
ORM框架采用元数据来描述对象一关系映射细节,元数据一般采用XML格式,并且存放在专门的对象一映射文件中。只要提供了持久化类与表的映射关系,ORM框架在运行时就能参照映射文件的信息,把对象持久化到数据库中
配置
导入依赖
<!-- hibernate的包 -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>4.3.8.Final</version>
</dependency>
<!-- hibernate对于jpa的支持包 -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-entitymanager</artifactId>
<version>4.3.8.Final</version>
</dependency>
<!-- mysql驱动 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.6</version>
</dependency>
<!-- junit -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
配置数据库
实例
实体
保存操作
缓存
一级缓存
同一个entityManager中不用重复在数据库中查询同一个数据
Customer customer1 = entityManager.find(Customer.class, 1);
Customer customer2 = entityManager.find(Customer.class, 1);
*只会查询一次因为第二次其实已经在一级缓存中了
二级缓存
节点:若 JPA 实现支持二级缓存,该节点可以配置在当前的持久化单元中是否启用二级缓存,可配置如下值:
- ALL:所有的实体类都被缓存
- NONE:所有的实体类都不被缓存.
- ENABLE_SELECTIVE:标识 @Cacheable(true) 注解的实体类将被缓存
- DISABLE_SELECTIVE:缓存除标识 @Cacheable(false) 以外的所有实体类
- UNSPECIFIED:默认值,JPA 产品默认值将被
1.添加jar包
hibernate-ehcache
2.修改persistence.xml配置文件
3.添加ehcache.xml配置文件
4.启动ehcache.xml配置文件,在persistence.xml配置文件中配置
<!-- 二级缓存相关 -->
<property name="hibernate.cache.use_second_level_cache" value="true" />
<property name="hibernate.cache.region.factory_class" value="org.hibernate.cache.ehcache.EhCacheRegionFactory" />
<property name="hibernate.cache.use_query_cache" value="true" />
5.需要缓存的类上添加注解