hibernateentitydao.java

来自「anewssystem新闻发布系统集成使用了spring hibernate f」· Java 代码 · 共 204 行

JAVA
204
字号
package anni.core.dao.hibernate;

import java.io.Serializable;

import java.util.Collection;
import java.util.List;

import anni.core.utils.GenericsUtils;

import org.hibernate.Criteria;

import org.hibernate.criterion.Criterion;


/**
 * 负责为单个Entity对象提供CRUD操作的Hibernate DAO基类.
 * <p/>
 * 子类只要在类定义时指定所管理Entity的Class, 即拥有对单个Entity对象的CRUD操作.
 * <pre>
 * public class UserManager extends HibernateEntityDao<User> {
 * }
 * </pre>
 *
 * @author calvin
 * @see HibernateGenericDao
 */
@SuppressWarnings("unchecked")
public class HibernateEntityDao<T> extends HibernateGenericDao {
    protected Class<T> entityClass; // DAO所管理的Entity类型.

    /**
     * 在构造函数中将泛型T.class赋给entityClass.
     */
    public HibernateEntityDao() {
        entityClass = GenericsUtils.getSuperClassGenricType(getClass());
    }

    /**
     * 取得entityClass.JDK1.4不支持泛型的子类可以抛开Class<T> entityClass,重载此函数达到相同效果。
     */
    protected Class<T> getEntityClass() {
        return entityClass;
    }

    /**
     * 根据ID获取对象.
     *
     * @see HibernateGenericDao#get(Class,java.io.Serializable)
     */
    public T get(Serializable id) {
        return get(getEntityClass(), id);
    }

    /**
     * 根据ID获取对象.
     *
     * @see HibernateGenericDao#load(Class,java.io.Serializable)
     */
    public T load(Serializable id) {
        return load(getEntityClass(), id);
    }

    /**
     * 获取全部对象
     *
     * @see HibernateGenericDao#getAll(Class)
     */
    public List<T> getAll() {
        return getAll(getEntityClass());
    }

    /**
     * 获取全部对象,带排序参数.
     *
     * @see HibernateGenericDao#getAll(Class,String,boolean)
     */
    public List<T> getAll(String orderBy, boolean isAsc) {
        return getAll(getEntityClass(), orderBy, isAsc);
    }

    /**
     * 根据ID移除对象.
     *
     * @see HibernateGenericDao#removeById(Class,Serializable)
     */
    public void removeById(Serializable id) {
        removeById(getEntityClass(), id);
    }

    /**
     * 清空表.
     */
    public void removeAll() {
        removeAll(getAll());
    }

    /**
     * 取得Entity的Criteria.
     *
     * @see HibernateGenericDao#createCriteria(Class,Criterion[])
     */
    public Criteria createCriteria(Criterion... criterions) {
        return createCriteria(getEntityClass(), criterions);
    }

    /**
     * 取得Entity的Criteria,带排序参数.
     *
     * @see HibernateGenericDao#createCriteria(Class,String,boolean,Criterion[])
     */
    public Criteria createCriteria(String orderBy, boolean isAsc,
        Criterion... criterions) {
        return createCriteria(getEntityClass(), orderBy, isAsc, criterions);
    }

    /**
     * 根据属性名和属性值查询对象.
     *
     * @return 符合条件的对象列表
     * @see HibernateGenericDao#findBy(Class,String,Object)
     */
    public List<T> findBy(String propertyName, Object value) {
        return findBy(getEntityClass(), propertyName, value);
    }

    /**
     * 根据属性名和属性值查询对象,带排序参数.
     *
     * @return 符合条件的对象列表
     * @see HibernateGenericDao#findBy(Class,String,Object,String,boolean)
     */
    public List<T> findBy(String propertyName, Object value,
        String orderBy, boolean isAsc) {
        return findBy(getEntityClass(), propertyName, value, orderBy, isAsc);
    }

    /**
     * 根据属性名和属性值查询单个对象.
     *
     * @return 符合条件的唯一对象 or null
     * @see HibernateGenericDao#findUniqueBy(Class,String,Object)
     */
    public T findUniqueBy(String propertyName, Object value) {
        return findUniqueBy(getEntityClass(), propertyName, value);
    }

    /**
     * 判断对象某些属性的值在数据库中唯一.
     *
     * @param uniquePropertyNames 在POJO里不能重复的属性列表,以逗号分割 如"name,loginid,password"
     * @see HibernateGenericDao#isUnique(Class,Object,String)
     */
    public boolean isUnique(Object entity, String uniquePropertyNames) {
        return isUnique(getEntityClass(), entity, uniquePropertyNames);
    }

    /**
     * 消除与 Hibernate Session 的关联
     * @param entity
     */
    public void evit(Object entity) {
        getHibernateTemplate().evict(entity);
    }

    /**
     * 获得完成初始化的实体beans.
     *
     * @param id 主键
     * @return T 实体bean
     */
    public T initialize(Serializable id) {
        return initialize(getEntityClass(), id);
    }

    /**
     * 获得总数.
     * @return Long
     */
    public Long getCount() {
        return getCount(getEntityClass());
    }

    /**
     * 获得总数.
     */
    public Long getCountBy(String name, Object value) {
        return getCount(getEntityClass(), name, value);
    }

    /**
     * sum.
     */
    public Long getSum(String fieldName) {
        return getSum(getEntityClass(), fieldName);
    }

    /**
     * sum.
     */
    public Long getSumBy(String fieldName, String name, Object value) {
        return getSum(getEntityClass(), fieldName, name, value);
    }
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?