一级缓存:
session级别,同一次session,同sql只执行一次,调用多次走一级缓存
注意:要开启事物或者手动维护一次session才会有一级缓存!!并且jps的find之类的方法不是,只有通过EntityManager执行的sql才会有一级缓存
比如:
// 一级缓存不生 效
@Test
@Transactional
public void t1() {userDao.findAll();userDao.findAll();userDao.findAll();
}
// 一级缓存生效
@Test
@Transactional
public void t1() {entityManager.find(User.class, 1l);entityManager.find(User.class, 1l);entityManager.find(User.class, 1l);
}
二级缓存:
1:实体类直接打上 javax.persistence.Cacheable 标记。
只要打上JPA的@cacheable标记即可默认开启该实体的2级缓存
@Entity
@Table(name ="dict")
@Cacheable
public class Dict extends IdEntity{}
2.ehcache来实现二级缓存