JPA学习笔记 二级缓存

        User user=entityManager.find(User.class,5);
        User user2=entityManager.find(User.class,5);

输出

Hibernate: 
    select
        user0_.id as id1_6_0_,
        user0_.name as name2_6_0_ 
    from
        user user0_ 
    where
        user0_.id=?

很显然,只向数据库发起一次查询,这就是一级缓存的作用

        User user=entityManager.find(User.class,5);
        entityManager.close();
        entityManager=entityManagerFactory.createEntityManager();
        User user2=entityManager.find(User.class,5);

会查两次,EntityManager关闭了,缓存也就失效了

Hibernate: 
    select
        user0_.id as id1_6_0_,
        user0_.name as name2_6_0_ 
    from
        user user0_ 
    where
        user0_.id=?
Hibernate: 
    select
        user0_.id as id1_6_0_,
        user0_.name as name2_6_0_ 
    from
        user user0_ 
    where
        user0_.id=?

使用二级缓存
所谓的二级缓存,也就是可以跨entityManager的缓存,也就是说:就算你关闭了entityManager,缓存也依然在。

在配置文件persistence.xml中配置





启用二级缓存:
缓存需要以下包


image.png

引入jar包时注意jar包版本

1.在实体类上加注解@Cacheable(true)

@Cacheable(true)
@Table(name="USER")
@Entity
public class User ...

在persistence.xml文件中配置二级缓存的策略


ENABLE_SELECTIVE

注意该配置要放在provider和class节点的后边
输出,只查了一次

Hibernate: 
    select
        user0_.id as id1_6_0_,
        user0_.name as name2_6_0_ 
    from
        user user0_ 
    where
        user0_.id=?

你可能感兴趣的:(JPA学习笔记 二级缓存)