1. spring data jpa 自身的方法
2. 扩展spring data jpa 的方法
3.完全自己用EntityManager 写语句的缓存.
其实现方式,基本如下,用代码表示
public interface UserDao extends CrudRepository,UserCustomer{
/**
* 第一种情况的缓存,处理spring data jpa自身的方法
* @param id
* @return
*/
@QueryHints({ @QueryHint(name = "org.hibernate.cacheable", value ="true") })
public User findById(long id);
/**
* 第二种情况缓存,处理能根据 spring data jpa 扩展的方法.
* @return
*/
@Query("from User")
@QueryHints({ @QueryHint(name = "org.hibernate.cacheable", value ="true") })
List findAllCached();
}
如果是自己写语句的缓存,用如下方式
public class UserDaoImpl implements UserCustomer {
@PersistenceContext
private EntityManager em;
/**
* 第三种缓存,采用 setHint 的方式处理.
*/
public User findByCustomizeId() {
return (User) em.createQuery("from User p where p.id=1")
.setHint("org.hibernate.cacheable", true).getSingleResult();
}
当然在实体类上也要注明,使用缓存
@Cache(usage = CacheConcurrencyStrategy.READ_ONLY,region="mycache")
@Cacheable(true)
@Entity
@Table(name="XUSER")
public class User {
...........
}
至于ehcache 的配置很简单的几行xml 配置,比如
在这几种情况下,测试,一旦缓存之后,是看不到发出sql语句的,说明确实使用了缓存.