JPA通用Dao

12年前
 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();      }  }