Java --- Dao设计模式 --- 泛型

一、Dao设计模式

Dao设计模式是属于数据层的操作,使用Dao设计模式可以大量简化代码,增强程序的可移植性。

 

二、BaseDao接口

import java.io.Serializable;

public interface BaseDao {
	void add(T t);
	void update(T t);
	void deleteById(Serializable id); // String Integer 更加通用。联合主键
	T findById(Serializable id);
}

 

 

 

三、CustomerDao接口

public interface CustomerDao extends BaseDao{
	List findAll();
}

 

 

 

四、BaseDao接口实现类

//借助Hibernate框架
public class BaseDaoImpl implements Dao {
	//核心类。Connection
	//ORM:通过操作类,就相当于操作了数据库
	//比如:操作Customer类,就相当于存取Customer表(Hibernate来做)
	//操作Student类,就相当于存取Student表(Hibernate来做)
	//private Session session;
	
	private Class clazz;//实体类型,目的就是让Hibernate知道从哪个表中查数据
	public BaseDaoImpl(){
		//给成员变量clazz赋值,让BaseDao知道具体的操作的是什么类型的
		Type type = this.getClass().getGenericSuperclass();//获取当前对象的带有泛型类型的父类  BaseDaoImpl
		ParameterizedType ptype = (ParameterizedType)type;
		clazz = (Class)ptype.getActualTypeArguments()[0];
	}
	
	public void add(T t) {
		//session.save(t);
	}

	public void update(T t) {
		//session.update(t);
	}

	public void deleteById(Serializable id) {
		//T t = findById(id);
		//session.delete(t);
	}

	public T findById(Serializable id) {
		System.out.println(clazz.getName());
		//return (T)session.get(clazz, id);//第一个参数:操作的类的类型。第二个参数,主键
		return null;
	}

}

 

 

 

五、CustomerDao接口实现类

public class CustomerDaoImpl extends BaseDao implements CustomerDao {

	public List findAll() {
		return null;
	}

}

 

 

 

六、Test

public class Test {

	public static void main(String[] args) {
		CustomerDao customerDao = new CustomerDaoImpl();
		
		customerDao.add(null);
		//...
		
		customerDao.findById(1);
		
	}

}

 

 

 

你可能感兴趣的:(Java)