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()[0];
}
@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 {
}