根据JPA的EntityManager封装DAO

import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;
import javax.persistence.TypedQuery;

import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang.StringUtils;
import org.hibernate.SQLQuery;
import org.hibernate.transform.Transformers;

/**
* @author 作者 zxy
* @version 创建时间:2018年11月12日 上午10:06:29
* 类说明 : Dao的基本操作
*/
public abstract class AbstractDao {

    @PersistenceContext
     private EntityManager em;
    
    /**新增
     * @param entity
     */
    public <T> void insert(T entity) {
        em.persist(entity);
    }
    
    
    /**删除
     * @param entity
     */
    public <T> void delete(T entity) {
        em.remove(entity);
    }
    
    /**更新
     * @param entity
     */
    public <T> void update(T entity) {
         em.merge(entity);
    }


    /**执行sql查询语句
     * @param sql
     * @param params
     * @return
     */
    @SuppressWarnings("unchecked")
    public List<Map<String, Object>> executeSqlQuery(String sql, Map<String, Object> params) {
        Query query = em.createNativeQuery(sql);
        List<Map<String,Object>> list=null;
        if(params!=null && !params.isEmpty()) {
            for(Entry<String, Object> entry:params.entrySet()) {
                String key = entry.getKey();
                Object value =entry.getValue();
                if("start".equals(key) && StringUtils.isNotEmpty(value.toString())) {
                    query.setFirstResult(Integer.parseInt(value.toString()));
                }else if("end".equals(key) && StringUtils.isNotEmpty(value.toString())) {
                    query.setMaxResults(Integer.parseInt(value.toString()));
                }else if(sql.contains(":"+key)){
                    query.setParameter(key, value);
                }
            }
        }
        query.unwrap(SQLQuery.class).setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP);
        list = query.getResultList();
        return list;
    }
    
    /**执行sql查询语句
     * @param sql
     * @param params
     * @return
     */
    @SuppressWarnings("unchecked")
    public int executeSqlQueryCount(String sql, Map<String, Object> params) {
        Query query = em.createNativeQuery(sql);
        List<Map<String,Object>> list=null;
        if(params!=null && !params.isEmpty()) {
            for(Entry<String, Object> entry:params.entrySet()) {
                String key = entry.getKey();
                Object value =entry.getValue();
                if(sql.contains(":"+key)){
                    query.setParameter(key, value);
                }
            }
        }
        query.unwrap(SQLQuery.class).setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP);
        list = query.getResultList();
        if(CollectionUtils.isEmpty(list)) {
            return 0;
        }
        return list.size();
    }
    
    
    /**执行hql语句
     * @param hql
     * @param params
     * @param classz
     * @return
     * @throws Exception
     */
    public <T> List<T> executeHqlQuery(String hql, Map<String, Object> params,Class<T> classz) throws Exception {
        TypedQuery<T> createQuery = em.createQuery(hql, classz);
        if(params!=null) {
            for(Entry<String, Object> entry:params.entrySet()) {
                String key = entry.getKey();
                Object value =entry.getValue();
                if("start".equals(key) && StringUtils.isNotEmpty(value.toString())) {
                    createQuery.setFirstResult(Integer.parseInt(value.toString())); 
                }else if("end".equals(key) && StringUtils.isNotEmpty(value.toString())) {
                    createQuery.setMaxResults(Integer.parseInt(value.toString()));
                }else if(hql.contains(":"+key)){
                    createQuery.setParameter(key, value);
                }
            }
        }
         List<T> resultList = createQuery.getResultList();
        return resultList;
    }
    
    /**执行原生SQL的更新(更新、删除语句)
     * @param sql
     * @param params
     * @return
     */
    public  int executeSqlUpdate(String sql,Map<String,Object> params) {
        Query query = em.createNativeQuery(sql);
        if(params!=null && !params.isEmpty()) {
            for(Entry<String, Object> entry:params.entrySet()) {
                String key = entry.getKey();
                Object value =entry.getValue();
                if(sql.contains(":"+key)) {
                    query.setParameter(key, value);
                }
            }
        }
        int executeUpdate = query.executeUpdate();
        return executeUpdate;
    }
    
}
 

猜你喜欢

转载自blog.csdn.net/z793397795/article/details/84616244