天天看點

CRM-BaseDao的抽取CRM-BaseDao的抽取

CRM-BaseDao的抽取

本次開發中,為了避免每次都編寫重複的Dao代碼,對每種Dao相似的代碼進行了抽取,形成BaseDao。

其他Dao隻需要繼承BaseDao即可,這樣我們可以對其他的Dao隻需要編寫特定Dao操作即可(根據業務層的需求)。

具體代碼實作如下:

//BaseDao的實作
    public abstract class BaseDaoImpl<T> extends HibernateDaoSupport implements BaseDao<T> {

        Class<T> clazz;

        public BaseDaoImpl(){
            ParameterizedType pt =  (ParameterizedType)this.getClass().getGenericSuperclass();//BaseDaoImpl<User>
            clazz = (Class<T>)pt.getActualTypeArguments()[];
        }

        @Override
        public void save(T entity) {
            getHibernateTemplate().save(entity);
        }

        @Override
        public void update(T entity) {
            getHibernateTemplate().update(entity);
        }

        @Override
        public void delete(Serializable id) {
            getHibernateTemplate().delete(findObjectById(id));
        }

        @Override
        public T findObjectById(Serializable id) {
            return getHibernateTemplate().get(clazz, id);
        }

        @Override
        public List<T> findObjects() {
            Query query = getSession().createQuery("FROM " + clazz.getSimpleName());
            return query.list();
        }

    }

    //UserDao接口
    public interface IUserDao extends BaseDao<User> {


    }

    //UserDao的實作, 繼承BaseDao實作, 實作UserDao接口
    public class UserDaoImpl extends BaseDaoImpl<User> implements IUserDao {


    }