hibernate Dao层


public class BaseDao<T extends Serializable> {
    protected static final Logger logger = Logger.getLogger(BaseDao.class);
    private Class<T> clazz;
    private String clazzName;

    public BaseDao() {
        // 使用反射的方式获得类名(表名)
        Type type = this.getClass().getGenericSuperclass();
        if (type instanceof ParameterizedType) {
            ParameterizedType pt = (ParameterizedType) type;
            Type[] tps = pt.getActualTypeArguments();
            if (tps.length > 0) {
                this.clazz = (Class<T>) tps[0];
                this.clazzName = clazz.getName();
            }
        }
    }

    private HibernateTemplate hibernateTemplate;

    public HibernateTemplate getHibernateTemplate() {
        return hibernateTemplate;
    }

    public void setHibernateTemplate(HibernateTemplate hibernateTemplate) {
        this.hibernateTemplate = hibernateTemplate;
    }

    public Session getSession() {
        return hibernateTemplate.getSessionFactory().getCurrentSession();
    }

    private SessionFactory sessionFactory;
    public SessionFactory getSessionFactory() {
        return sessionFactory;
    }
    public void setSessionFactory(SessionFactory sessionFactory) {
        this.sessionFactory = sessionFactory;
    }

    /**
     * 保存或更新实体类
     * @param t 实体类
     * @return 实体类
     */
    public T saveOrUpdate(T t) {
        getSession().saveOrUpdate(t);
//      hibernateTemplate.saveOrUpdate(t);
        return t;
    }

    /**
     * 根据ID获取实体类
     * @param id
     * @return 实体类
     */
    public T get(Serializable id) {
        T t = (T) getSession().get(this.clazz, id);
        return t;
    }

    /**
     * 根据实体及ID获取实体类
     * @param clazz
     * @param id
     * @return 实体类
     */
    public T get(Class clazz, Serializable id) {
        T t = (T) getSession().get(clazz, id);
        return t;
    }


    /**
     * 根据实体类获取所有数据
     * @param entity 
     * @return 实体类集合
     */
    public List<T> getAll(Class clazz) {
        Query q = getSession().createQuery("from " + clazz.getName());
        return q.list();
    }

    /**
     * 根据实体类获取所有数据
     * @param entity 
     * @return 实体类集合
     */
    public List<T> getAll() {
        Query q = getSession().createQuery("from " + clazzName);
        return q.list();
    }

    /**
     * 根据ID删除实体类
     * @param id
     * @return 执行条数
     */
    public int del(long id) {
        Query q = getSession().createQuery("delete from " + clazzName + " where id = ?");
        return q.setParameter(0, id).executeUpdate();
    }
    /**
     * 根据ID删除实体类
     * @param id
     * 参数为String类型
     * @return 执行条数
     */
    public int del(String id) {
        Query q = getSession().createQuery("delete from " + clazzName + " where id = ?");
        return q.setParameter(0, id).executeUpdate();
    }
    /**
     * 根据实体类删除
     * @param t
     * @return 返回实体类(可作为验证)
     */
    public T del(T t) {
        getSession().delete(t);
        return t;
    }

    /**
     * 根据HQL查询List
     * @param hql
     * @return List
     */
    protected List<T> find(String hql) {
        Query q = getSession().createQuery(hql);
        return q.list();
    }

    /**
     * 执行HQL语句
     * @param hqlString HQL
     * @param values 不确定参数
     */
    public void queryHql(String hqlString, Object... values) {
        Query query = getSession().createQuery(hqlString);
        if (values != null) {
            for (int i = 0; i < values.length; i++) {
                query.setParameter(i, values[i]);
            }
        }
        query.executeUpdate();
    }

    /**
     * 执行SQL语句
     * @param sqlString SQL
     * @param values 不确定参数
     */
    public void querySql(String sqlString, Object... values) {
        Query query = getSession().createSQLQuery(sqlString);
        if (values != null) {
            for (int i = 0; i < values.length; i++) {
                query.setParameter(i, values[i]);
            }
        }
        query.executeUpdate();
    }

    /**
     * 根据HQL查询唯一实体
     * @param hqlString HQL
     * @param values 不确定参数
     * @return 实体类
     */
    public T getByHQL(String hqlString, Object... values) {
        Query query = getSession().createQuery(hqlString);
        if (values != null) {
            for (int i = 0; i < values.length; i++) {
                query.setParameter(i, values[i]);
            }
        }
        return (T) query.uniqueResult();
    }

    /**
     * 根据SQL查询唯一实体
     * @param sqlString SQL
     * @param values 不确定参数
     * @return 实体类
     */
    public T getBySQL(String sqlString, Object... values) {
        Query query = getSession().createSQLQuery(sqlString);
        if (values != null) {
            for (int i = 0; i < values.length; i++) {
                query.setParameter(i, values[i]);
            }
        }
        return (T) query.uniqueResult();
    }

    /**
     * 根据HQL查询List
     * @param hqlString HQL
     * @param values 不确定参数
     * @return List
     */
    public List<T> getListByHQL(String hqlString, Object... values) {
        Query query = getSession().createQuery(hqlString);
        if (values != null) {
            for (int i = 0; i < values.length; i++) {
                query.setParameter(i, values[i]);
            }
        }
        return query.list();
    }

    /**
     * 根据HQL分页查询List
     * @param hqlString HQL
     * @param values 不确定参数
     * @return List
     */
    public List<T> getPageListByHQL(String hqlString, Integer pageNo, Integer pageSize, Object... values) {
        Query query = getSession().createQuery(hqlString);
        if (values != null) {
            for (int i = 0; i < values.length; i++) {
                query.setParameter(i, values[i]);
            }
        }
        List<T> itemList = query.setFirstResult(pageNo).setMaxResults(pageSize).list();
        if (itemList == null) {
            itemList = new ArrayList<T>();
        }
        return itemList;
    }

    /**
     * 根据SQL查询List
     * @param sqlString SQL
     * @param values 不确定参数
     * @return List
     */
    public List<T> getListBySQL(String sqlString, Object... values) {
        Query query = getSession().createSQLQuery(sqlString);
        if (values != null) {
            for (int i = 0; i < values.length; i++) {
                query.setParameter(i, values[i]);
            }
        }
        return query.list();
    }

    /**
     * 根据HQL获取记录数
     * @param hql
     * @param values 不确定参数
     * @return 总数
     */
    public Long countByHql(String hql, Object... values) {
        hql = "select count(*) "+hql;
        Query query = getSession().createQuery(hql);
        if (values != null) {
            for (int i = 0; i < values.length; i++) {
                query.setParameter(i, values[i]);
            }
        }
        return (Long) query.uniqueResult();
    }

    /**
     * HQL分页查询
     * @param hql
     * @param pageNo 页数
     * @param pageSize 条数
     * @param values 不确定参数
     * @return page
     */
    public Page<T> findPageByHql(String hql, int pageNo, int pageSize, Object... values) {
        Page<T> retValue = new Page<T>();
        Query query = getSession().createQuery(hql);
        if (values != null) {
            for (int i = 0; i < values.length; i++) {
                query.setParameter(i, values[i]);
            }
        }
        int currentPage = pageNo > 1 ? pageNo : 1;
        retValue.setCurrentPage(currentPage);
        retValue.setPageSize(pageSize);

        Long count = countByHql(hql, values);
        retValue.setTotalCount(count.intValue());
        retValue.resetPageNo();
        List<T> itemList = query.setFirstResult((currentPage - 1) * pageSize).setMaxResults(pageSize).list();
        if (itemList == null) {
            itemList = new ArrayList<T>();
        }
        retValue.setResults(itemList);
        return retValue;
    }

}

猜你喜欢

转载自blog.csdn.net/plazyj/article/details/80985386