https://github.com/yzmaodeng/java-keypointknowledge/tree/master/src/main/java/com/zl/Type/Demo
项目实战需求说明,在dao成有多个实例化的dao,例如userDao,orderDao,等等,里面都有增删该 查的需求,都是相同的,那么这样我们就考虑是不是可以定义统一的父类了实现这些方法呢baseDao。
1、抽象出来的接口
public interface IBaseDao<T> {
public void save(T entity);
public void delete(T entity);
public void update(T entity);
public T findById(Serializable id);
public List<T> findAll();
}
2、定义实现类
public class BaseDaoImpl<T> implements IBaseDao<T> {
// 实体类型
private Class<T> entityClass;
/**
* 在构造方法中动态获得操作的实体类型
*/
public BaseDaoImpl() {
// 获得父类(BaseDaoImpl<T>)类型
ParameterizedType genericSuperclass = (ParameterizedType) this
.getClass().getGenericSuperclass();
// 获得父类上的泛型数组
Type[] actualTypeArguments = genericSuperclass.getActualTypeArguments();
entityClass = (Class<T>) actualTypeArguments[0];
}
public void save(T entity) {
this.getHibernateTemplate().save(entity);
}
public void delete(T entity) {
this.getHibernateTemplate().delete(entity);
}
public void update(T entity) {
this.getHibernateTemplate().update(entity);
}
public T findById(Serializable id) {
return this.getHibernateTemplate().get(entityClass, id);
}
public List<T> findAll() {// FROM User
String hql = "FROM " + entityClass.getSimpleName();
return this.getHibernateTemplate().find(hql);
}
}
3、定义userDao
public interface IUserDao extends IBaseDao<User>{
public User findByUsernameAndPassword(String username, String password);
}
4、定义userDaoIMpl
@Repository
//@Scope("prototype")
public class UserDaoImpl extends BaseDaoImpl<User> implements IUserDao{
/**
* @Title: findByUsernameAndPassword
* @Description: TODO(这里用一句话描述这个方法的作用)
* @param @param username
* @param @param password
* @param @return 入参
* @author 臧亮
* @throws
* @date 2018年6月1日 上午10:58:33
* @version V1.0
*/
@Override
public com.xinghe.xbx.thirdparty.constant.User findByUsernameAndPassword(String username, String password) {
// TODO Auto-generated method stub
return null;
}
}