package org.xmx0632.deliciousfruit.repository.impl; import java.util.List; import javax.persistence.EntityManager; import javax.persistence.EntityManagerFactory; import javax.persistence.TypedQuery; import org.springframework.beans.factory.annotation.Autowired; import org.xmx0632.deliciousfruit.entity.Config; import org.xmx0632.deliciousfruit.repository.ConfigCachedDao; /** * 自定义Dao实现类例子 * * @author xmx0632 * */ public class ConfigDaoImpl implements ConfigCachedDao { private static final String ORG_HIBERNATE_CACHEABLE = "org.hibernate.cacheable"; @Autowired(required = true) private EntityManagerFactory entityManagerFactory; private EntityManager entityManager; public EntityManager getEntityManager() { if (entityManager == null) { System.out.println("create entityManager"); entityManager = entityManagerFactory.createEntityManager(); } return entityManager; } @Override public Config findByNameCachedJpa(String name) { TypedQuery<Config> query = getEntityManager().createQuery( "from Config where name = :name", Config.class); query.setParameter("name", name); query.setHint(ORG_HIBERNATE_CACHEABLE, Boolean.TRUE); return query.getSingleResult(); } @Override public Config findByNameCachedHibernate(String name) { TypedQuery<Config> query = getEntityManager().createQuery( "from Config where name = :name", Config.class); org.hibernate.Query hquery = query.unwrap(org.hibernate.Query.class); hquery.setParameter("name", name); hquery.setCacheable(true); return (Config) hquery.uniqueResult(); } @Override public List<Config> findAllByNameCachedJpa(String name) { TypedQuery<Config> query = getEntityManager().createQuery( "from Config where name = :name", Config.class); query.setParameter("name", name); query.setHint(ORG_HIBERNATE_CACHEABLE, Boolean.TRUE); return query.getResultList(); } @Override public List<Config> findAllByNameCachedHibernate(String name) { TypedQuery<Config> query = getEntityManager().createQuery( "from Config where name = :name", Config.class); org.hibernate.Query hquery = query.unwrap(org.hibernate.Query.class); hquery.setParameter("name", name); hquery.setCacheable(true); return hquery.list(); } }