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 {
}