Dao层抽取BaseDao公共方法

设计IBseDao接口,定义公共的CRUD方法。

Dao层抽取BaseDao公共方法

// IBaseDao 接口,定义公共的CRUD方法
public interface IBaseDao<T> {
    
    public void add(T t);
    public void update(T t);
    public void delete(T t);
    public T getById(int id);
    public List<T> getList(int startIndex,int pageSize);
    public int getTotalCount();

}
// BaseDaoImpl接口,实现公共的CRUD方法
public class BaseDaoImpl<T> extends HibernateDaoSupport implements IBaseDao<T> {
    private Class<T> entityClass;

    // 子类的实例化需调用父类的无参构造方法,通过构造方法获取父类的泛型类型
    public BaseDaoImpl() {

        // this.getClass() --> 子类的class对象, getGenericSuperclass() ---> 获取父类的Type
        ParameterizedType pType = (ParameterizedType) this.getClass().getGenericSuperclass();

        // 获取第一个类型参数的真实类型,只有一个泛型参数,所以写0
        // ParameterizedType 参数化类型, getActualTypeArguments(),返回表示此类型实际类型参数的Type对象的数组
        entityClass = (Class<T>) pType.getActualTypeArguments()[0];

    }

    @Override
    public void add(T t) { // 增加
        this.getHibernateTemplate().save(t);
    }

    @Override
    public void update(T t) {// 修改
        this.getHibernateTemplate().update(t);
    }

    @Override
    public void delete(T t) {// 删除
        this.getHibernateTemplate().delete(t);
    }

    @Override
    public T getById(int id) { // 查询单个对象
        return this.getHibernateTemplate().get(entityClass, id);
    }

    @Override
    public List<T> getList(int startIndex, int pageSize) { // 分页查询
        return this.getHibernateTemplate().execute(new HibernateCallback<List<T>>() {

            @Override
            public List<T> doInHibernate(Session session) throws HibernateException {
                Query query = session.createQuery("from " + entityClass.getName());
                query.setFirstResult(startIndex);
                query.setMaxResults(pageSize);
                return query.list();
            }
        });
    }

    @Override
    public int getTotalCount() { // 查询总记录数
        return this.getHibernateTemplate().execute(new HibernateCallback<Integer>() {

            @Override
            public Integer doInHibernate(Session session) throws HibernateException {
                Query query = session.createQuery("select count(*) from " + entityClass.getName());
                Long count = (Long) query.uniqueResult();
                return count.intValue();
            }
        });
    }

}

 

// IUserDao 继承 IBaseDao接口
public interface IUserDao extends IBaseDao<User> {

}

 

// UserDaoImpl 继承BaseDaoImpl类,实现 IUserDao接口
public class UserDaoImpl extends BaseDaoImpl<User> implements IUserDao {
    
}

 

上一篇:C# 获取枚举的特性描述


下一篇:Odoo中一个算法的优化方案