JPA通用Dao

johon 13年前發布 | 3K 次閱讀 Rocks
 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();
    }
}

 本文由用戶 johon 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!