泛型 七 实战应用

https://github.com/yzmaodeng/java-keypointknowledge/tree/master/src/main/java/com/zl/Type/Demo


项目实战需求说明,在dao成有多个实例化的dao,例如userDao,orderDao,等等,里面都有增删该 查的需求,都是相同的,那么这样我们就考虑是不是可以定义统一的父类了实现这些方法呢baseDao。


1、抽象出来的接口

public interface IBaseDao {
public void save(T entity);
public void delete(T entity);
public void update(T entity);
public T findById(Serializable id);
public List findAll();

}


2、定义实现类

public class BaseDaoImpl  implements IBaseDao {
// 实体类型
private Class entityClass;

/**
* 在构造方法中动态获得操作的实体类型
*/
public BaseDaoImpl() {
// 获得父类(BaseDaoImpl)类型
ParameterizedType genericSuperclass = (ParameterizedType) this
.getClass().getGenericSuperclass();
// 获得父类上的泛型数组
Type[] actualTypeArguments = genericSuperclass.getActualTypeArguments();
entityClass = (Class) 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 findAll() {// FROM User
String hql = "FROM  " + entityClass.getSimpleName();
return this.getHibernateTemplate().find(hql);

}

}


3、定义userDao

public interface IUserDao extends IBaseDao{
public User findByUsernameAndPassword(String username, String password);
}


4、定义userDaoIMpl


@Repository
//@Scope("prototype")
public class UserDaoImpl extends BaseDaoImpl 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;
}




}

你可能感兴趣的:(泛型)