JPA通用Dao
import java.util.List; import java.util.Map; import javax.persistence.EntityManager; import javax.persistence.Parameter; import javax.persistence.Query; import javax.persistence.TypedQuery; /** * * <一句话功能简述> * Dao是一个普通类,事物及EntityManager由调用方管理。 * * @author s00120886 * @version [版本号, 2011-7-20] * @see [相关类/方法] * @since [产品/模块版本] */ public class Dao { private EntityManager em; public Dao(EntityManager em) { this.em = em; } public <T> List<T> fetchAll(Class<T> entity) { String jpql = "SELECT o FROM " + entity.getName() + " AS o"; TypedQuery<T> query = em.createQuery(jpql, entity); return query.getResultList(); } public <T> List<T> fetchByNamedQuery(String jpqlName, Map<String, ?> parameters, Class<T> entity) { TypedQuery<T> query = em.createNamedQuery(jpqlName, entity); for (Parameter<?> sqlParam : query.getParameters()) { query.setParameter(sqlParam.getName(), parameters.get(sqlParam.getName())); } return query.getResultList(); } public <T> List<T> fetch(String jpql, Map<String, ?> parameters, Class<T> entity) { TypedQuery<T> query = em.createQuery(jpql, entity); for (Parameter<?> sqlParam : query.getParameters()) { query.setParameter(sqlParam.getName(), parameters.get(sqlParam.getName())); } return query.getResultList(); } public int executeUpdate(String jpql, Map<String, ?> parameters) { Query query = em.createQuery(jpql); for (Parameter<?> sqlParam : query.getParameters()) { query.setParameter(sqlParam.getName(), parameters.get(sqlParam.getName())); } return query.executeUpdate(); } public <T> T find(Class<T> entityClass, Object primaryKey) { return this.em.find(entityClass, primaryKey); } /** * <一句话功能简述> * 只实现单个对象的持久化,如果批量持久化,由调用方控制何时flush或clear。 * @param <T> * @param obj [参数说明] * * @return void [返回类型说明] * @exception throws [违例类型] [违例说明] * @see [类、类#方法、类#成员] */ public <T> void persist(T obj) { em.persist(obj); } public <T> void persist(List<T> objList) { for(T obj: objList) em.persist(obj); } public <T> void remove(T obj) { em.remove(obj); } public void flush() { em.flush(); } public void clear() { em.clear(); } }