Hibernate-BaseDaoImpl

作者: guodd369 | 来源:发表于2017-11-20 14:02 被阅读6次
    网络选图
    package cn.hacz.edu.dao.impl;
    
    import java.io.Serializable;
    import java.math.BigInteger;
    import java.time.LocalDateTime;
    import java.util.Collection;
    import java.util.List;
    import java.util.Map;
    
    import javax.persistence.EntityManager;
    import javax.persistence.PersistenceContext;
    
    import org.hibernate.Query;
    import org.hibernate.SQLQuery;
    import org.hibernate.Session;
    import org.hibernate.transform.Transformers;
    import org.springframework.stereotype.Repository;
    
    import cn.hacz.edu.dao.BaseDaoI;
    import cn.hacz.edu.entity.base.BaseEntity;
    import cn.hacz.edu.entity.base.PageHelper;
    
    @Repository(value = "baseDaoI")
    @SuppressWarnings("unchecked")
    public class BaseDaoImpl<T extends BaseEntity> implements BaseDaoI<T> {
    
        @PersistenceContext
        private EntityManager entityManager;
    
        @Override
        public Session getCurrentSession() {
            return entityManager.unwrap(Session.class);
        }
    
        @Override
        public Serializable save(T o) {
            if (o != null) {
                o.setCreateDateTime(LocalDateTime.now());
                o.setModifyDateTime(LocalDateTime.now());
                o.setDeleted(false);
                return getCurrentSession().save(o);
            }
            return null;
        }
    
        @Override
        public void saveOrUpdate(T o) {
            if (o != null) {
                o.setCreateDateTime(LocalDateTime.now());
                o.setModifyDateTime(LocalDateTime.now());
                o.setDeleted(false);
                getCurrentSession().saveOrUpdate(o);
            }
    
        }
    
        @Override
        public void delete(T o) {
            if (o != null) {
                getCurrentSession().delete(o);
            }
    
        }
    
        @Override
        public void update(T o) {
            if (o != null) {
                o.setModifyDateTime(LocalDateTime.now());
                getCurrentSession().update(o);
            }
    
        }
    
        @Override
        public T get(Class<T> c, Serializable id) {
            return (T) getCurrentSession().get(c, id);
        }
    
        @Override
        public T get(String hql) {
            Query query = getCurrentSession().createQuery(hql);
            List<T> list = query.list();
            if (list != null && list.size() > 0) {
                return list.get(0);
            }
            return null;
        }
    
        @Override
        public T get(String hql, Object... params) {
            Query query = getCurrentSession().createQuery(hql);
            if (params != null && params.length > 0) {
                for (int i = 0; i < params.length; i++) {
                    query.setParameter(i, params[i]);
                }
            }
            List<T> list = query.list();
            if (list != null && list.size() > 0) {
                return list.get(0);
            }
    
            return null;
        }
    
        @Override
        public T get(String hql, Map<String, Object> params) {
            Query query = getCurrentSession().createQuery(hql);
            if (params != null && !params.isEmpty()) {
                for (String key : params.keySet()) {
                    Object obj = params.get(key);
                    // 这里考虑传入的参数是什么类型,不同类型使用的方法不同
                    if (obj instanceof Collection<?>) {
                        query.setParameterList(key, (Collection<?>) obj);
                    } else if (obj instanceof Object[]) {
                        query.setParameterList(key, (Object[]) obj);
                    } else {
                        query.setParameter(key, obj);
                    }
                }
                List<T> l = query.list();
                if (l != null && l.size() > 0) {
                    return l.get(0);
                }
            }
            return null;
        }
    
        @Override
        public List<T> find(String hql) {
            Query query = getCurrentSession().createQuery(hql);
            return query.list();
        }
    
        @Override
        public List<T> find(String hql, PageHelper ph) {
            Query query = getCurrentSession().createQuery(hql);
            return query.setFirstResult(ph.getPage() - 1 + ph.getRows()).setMaxResults(ph.getRows()).list();
        }
    
        @Override
        public List<T> find(String hql, Object... params) {
            Query query = getCurrentSession().createQuery(hql);
            if (params != null && params.length > 0) {
                for (int i = 0; i < params.length; i++) {
                    query.setParameter(i, params[i]);
                }
            }
            return query.list();
        }
    
        @Override
        public List<T> find(String hql, Map<String, Object> params) {
            Query query = getCurrentSession().createQuery(hql);
            if (params != null && !params.isEmpty()) {
                for (String key : params.keySet()) {
                    Object obj = params.get(key);
                    // 这里考虑传入的参数是什么类型,不同类型使用的方法不同
                    if (obj instanceof Collection<?>) {
                        query.setParameterList(key, (Collection<?>) obj);
                    } else if (obj instanceof Object[]) {
                        query.setParameterList(key, (Object[]) obj);
                    } else {
                        query.setParameter(key, obj);
                    }
                }
            }
            return query.list();
        }
    
        @Override
        public List<T> find(String hql, Map<String, Object> params, PageHelper ph) {
            Query query = getCurrentSession().createQuery(hql);
            if (params != null && params.isEmpty()) {
                for (String key : params.keySet()) {
                    Object obj = params.get(key);
                    // 这里考虑传入的参数是什么类型,不同类型使用的方法不同
                    if (obj instanceof Collection<?>) {
                        query.setParameterList(key, (Collection<?>) obj);
                    } else if (obj instanceof Object[]) {
                        query.setParameterList(key, (Object[]) obj);
                    } else {
                        query.setParameter(key, obj);
                    }
                }
            }
            return query.setFirstResult(ph.getPage() - 1 + ph.getRows()).setMaxResults(ph.getRows()).list();
        }
    
        @Override
        public Long count(String hql) {
            Query query = getCurrentSession().createQuery(hql);
            return (Long) query.uniqueResult();
        }
    
        @Override
        public Long count(String hql, Object... params) {
            Query query = getCurrentSession().createQuery(hql);
            if (params != null && params.length > 0) {
                for (int i = 0; i < params.length; i++) {
                    query.setParameter(i, params[i]);
                }
            }
            return (Long) query.uniqueResult();
        }
    
        @Override
        public Long count(String hql, Map<String, Object> params) {
            Query query = getCurrentSession().createQuery(hql);
            if (params != null && !params.isEmpty()) {
                for (String key : params.keySet()) {
                    Object obj = params.get(key);
                    // 这里考虑传入的参数是什么类型,不同类型使用的方法不同
                    if (obj instanceof Collection<?>) {
                        query.setParameterList(key, (Collection<?>) obj);
                    } else if (obj instanceof Object[]) {
                        query.setParameterList(key, (Object[]) obj);
                    } else {
                        query.setParameter(key, obj);
                    }
                }
            }
            return (Long) query.uniqueResult();
        }
    
        @Override
        public int execute(String hql) {
            Query query = getCurrentSession().createQuery(hql);
            return query.executeUpdate();
        }
    
        @Override
        public int execute(String hql, Object... params) {
            Query query = getCurrentSession().createQuery(hql);
            if (params != null && params.length > 0) {
                for (int i = 0; i < params.length; i++) {
                    query.setParameter(i, params[i]);
                }
            }
            return query.executeUpdate();
        }
    
        @Override
        public int execute(String hql, Map<String, Object> params) {
            Query query = getCurrentSession().createQuery(hql);
            if (params != null && !params.isEmpty()) {
                for (String key : params.keySet()) {
                    Object obj = params.get(key);
                    // 这里考虑传入的参数是什么类型,不同类型使用的方法不同
                    if (obj instanceof Collection<?>) {
                        query.setParameterList(key, (Collection<?>) obj);
                    } else if (obj instanceof Object[]) {
                        query.setParameterList(key, (Object[]) obj);
                    } else {
                        query.setParameter(key, obj);
                    }
                }
            }
            return query.executeUpdate();
        }
    
        @Override
        public List<?> findBySql(String sql) {
            SQLQuery sqlQuery = getCurrentSession().createSQLQuery(sql);
            return sqlQuery.setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP).list();
        }
    
        @Override
        public List<?> findBySql(String sql, PageHelper ph) {
            SQLQuery sqlQuery = getCurrentSession().createSQLQuery(sql);
            return sqlQuery.setFirstResult((ph.getPage() - 1) * ph.getRows()).setMaxResults(ph.getRows()).setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP).list();
        }
    
        @Override
        public List<?> findBySql(String sql, List<Object> params) {
            SQLQuery sqlQuery = getCurrentSession().createSQLQuery(sql);
            if (params != null && params.size() > 0) {
                for (int i = 0; i < params.size(); i++) {
                    sqlQuery.setParameter(i, params.get(i));
                }
            }
            return sqlQuery.setFirstResult(0).setMaxResults(10).setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP).list();
        }
    
        @Override
        public List<?> findBySql(String sql, Map<String, Object> params) {
            SQLQuery sqlQuery = getCurrentSession().createSQLQuery(sql);
            if (params != null && !params.isEmpty()) {
                for (String key : params.keySet()) {
                    Object object = params.get(key);
                    // 这里考虑传入的参数是什么类型,不同类型使用的方法不同
                    if (object instanceof Collection<?>) {
                        sqlQuery.setParameterList(key, (Collection<?>) object);
                    } else if (object instanceof Object[]) {
                        sqlQuery.setParameterList(key, (Object[]) object);
                    } else {
                        sqlQuery.setParameter(key, object);
                    }
    
                }
            }
            return sqlQuery.setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP).list();
        }
    
        @Override
        public List<?> findBySql(String sql, Map<String, Object> params, PageHelper ph) {
            SQLQuery sqlQuery = getCurrentSession().createSQLQuery(sql);
            if (params != null && !params.isEmpty()) {
                for (String key : params.keySet()) {
                    Object object = params.get(key);
                    // 这里考虑传入的参数是什么类型,不同类型使用的方法不同
                    if (object instanceof Collection<?>) {
                        sqlQuery.setParameterList(key, (Collection<?>) object);
                    } else if (object instanceof Object[]) {
                        sqlQuery.setParameterList(key, (Object[]) object);
                    } else {
                        sqlQuery.setParameter(key, object);
                    }
    
                }
            }
            return sqlQuery.setFirstResult((ph.getPage() - 1) * ph.getRows()).setMaxResults(ph.getRows()).setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP).list();
        }
    
        @Override
        public BigInteger countBySql(String sql) {
            SQLQuery sqlQuery = getCurrentSession().createSQLQuery(sql);
            return (BigInteger) sqlQuery.uniqueResult();
        }
    
        @Override
        public BigInteger countBySql(String sql, Map<String, Object> params) {
            SQLQuery sqlQuery = getCurrentSession().createSQLQuery(sql);
            if (params != null && !params.isEmpty()) {
                for (String key : params.keySet()) {
                    Object obj = params.get(key);
                    // 这里考虑传入的参数是什么类型,不同类型使用的方法不同
                    if (obj instanceof Collection<?>) {
                        sqlQuery.setParameterList(key, (Collection<?>) obj);
                    } else if (obj instanceof Object[]) {
                        sqlQuery.setParameterList(key, (Object[]) obj);
                    } else {
                        sqlQuery.setParameter(key, obj);
                    }
                }
            }
            return new BigInteger(String.valueOf(sqlQuery.uniqueResult()));
        }
    
        @Override
        public int executeSql(String sql) {
            SQLQuery sqlQuery = getCurrentSession().createSQLQuery(sql);
            return sqlQuery.executeUpdate();
        }
    
        @Override
        public int executeSql(String sql, Map<String, Object> params) {
            SQLQuery sqlQuery = getCurrentSession().createSQLQuery(sql);
            if (params != null && !params.isEmpty()) {
                for (String key : params.keySet()) {
                    Object obj = params.get(key);
                    // 这里考虑传入的参数是什么类型,不同类型使用的方法不同
                    if (obj instanceof Collection<?>) {
                        sqlQuery.setParameterList(key, (Collection<?>) obj);
                    } else if (obj instanceof Object[]) {
                        sqlQuery.setParameterList(key, (Object[]) obj);
                    } else {
                        sqlQuery.setParameter(key, obj);
                    }
                }
            }
            return sqlQuery.executeUpdate();
        }
    
        @Override
        public void merge(T o) {
            if (o != null) {
                o.setCreateDateTime(LocalDateTime.now());
                o.setModifyDateTime(LocalDateTime.now());
                o.setDeleted(false);
                getCurrentSession().merge(o);
            }
            
            
        }
    
    }
    

    相关文章

      网友评论

        本文标题:Hibernate-BaseDaoImpl

        本文链接:https://www.haomeiwen.com/subject/awdvvxtx.html