一、Dao设计模式
Dao设计模式是属于数据层的操作,使用Dao设计模式可以大量简化代码,增强程序的可移植性。
二、BaseDao接口
import java.io.Serializable;
public interface BaseDao<T> {
void add(T t);
void update(T t);
void deleteById(Serializable id); // String Integer 更加通用。联合主键
T findById(Serializable id);
}
三、CustomerDao接口
public interface CustomerDao extends BaseDao<Customer>{
List<Customer> findAll();
}
四、BaseDao接口实现类
//借助Hibernate框架
public class BaseDaoImpl<T> implements Dao<T> {
//核心类。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<Customer>
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<Customer> implements CustomerDao {
public List<Customer> findAll() {
return null;
}
}
六、Test
public class Test {
public static void main(String[] args) {
CustomerDao customerDao = new CustomerDaoImpl();
customerDao.add(null);
//...
customerDao.findById(1);
}
}