DAO设计模式
源代码
Dao.java
public interface Dao<T> {
void add(T t);
void update(T t);
void delete(Serializable id);
T findOne(Serializable id);
}
CustomerDao.java
public interface CustomerDao extends Dao<Customer>{
List<Customer> findCustomers(int startIndex,int offset);
}
DaoImpl.java
这个是实现类,类中方法是Hibernate中的,可以删除
public abstract class BaseDao<T> implements Dao<T> {
private Class clazz;//查询的是哪个实体类
public BaseDao(){
//知道子类到底操作的是什么类型的JavaBean。即给clazz赋值
Type type = this.getClass().getGenericSuperclass();// new BookDaoImpl(); BaseDao<Book>
ParameterizedType ptype = (ParameterizedType)type;// BaseDao<Book>
Type types[] = ptype.getActualTypeArguments();// Book
clazz = (Class)types[0];
// System.out.println(clazz);
}
public void add(T t) {
Session s = HibernateUtil.getSession();
Transaction tx = s.beginTransaction();
s.save(t);
tx.commit();
s.close();
}
public T findOne(Serializable id) {
Session s = HibernateUtil.getSession();
return (T) s.get(clazz, id);
}
public void update(T t) {
Session s = HibernateUtil.getSession();
Transaction tx = s.beginTransaction();
s.update(t);
tx.commit();
s.close();
}
public void delete(Serializable id) {
T bean = findOne(id);
Session s = HibernateUtil.getSession();
Transaction tx = s.beginTransaction();
s.delete(bean);
tx.commit();
s.close();
}
}
CustomerDaoImpl.java
public class CustomerDaoImpl extends BaseDao<Customer> implements CustomerDao {
public List<Customer> findCustomers(int startIndex, int offset) {
return null;
}
}
总结:JAVA是面向接口开发的,接口是一种规范,实现的类必须实现接口所有的方法。接口可以继承接口(多个),类(包括抽象类)是实现接口的。无论是接口,还是普通类,只要是继承,父类的方法和属性都可以直接调用,如果继承的是抽象类,则必须实现其父类的抽象方法,不然,该子类必须定义成抽象类。
如果一个类继承了一个抽象类并实现了一个接口,
可以理解成“这是个什么东西(抽象类)可以干什么事(实现接口方法)