用Hibernate写底层接接口的时候,为了使dao层的代码便于维护,增加代码的复用性,会写一个dao层的基类以及基类的接口。
在这里我举一个通过ID查询实体的方法基类的写法:
用ID查询收据库得到实体的方法:(调用dao层基类)
public void findObjectById() {
IElecTextDao elecTextDao=(IElecTextDao) ServiceProvider.getService(IElecTextDao.SERVICE_NAME);
Serializable elecTextID="402881e756e388b60156e38ccae40005";
ElecText elecText=elecTextDao.findObjectByID(elecTextID);
System.out.println(elecText.getTextName()+"#########"+elecText.getTextRemark());
}
调用的接口为public interface ICommonDao<T> {
ElecText findObjectByID(Serializable serializable);
}
接口实现类为:
public class CommonDaoImpl<T> extends HibernateDaoSupport implements
ICommonDao<T> {
public ElecText findObjectByID(Serializable serializable) {
return (ElecText) this.getHibernateTemplate().get(ElecText.class, serializable);
}
}
注:serializable是数据类性的父类,可以兼容int,long,String数据类型
这种写法可实现查找实体类型为ElecText的一个实体,但是如果想通过findObjectByID()方法 获得其他类型就需要重新写另外的一个方法
我们可以通过转换为泛型改装这个方法实现我们的目的:改装后代码
调用的接口为public interface ICommonDao<T> {
T findObjectByID(Serializable serializable);
}
接口实现类为:
public T findObjectByID(Serializable serializable) {
ParameterizedType tp=(ParameterizedType) this.getClass().getGenericSuperclass();
Class entity=(Class) tp.getActualTypeArguments()[0];
return (T) this.getHibernateTemplate().get(entity, serializable);
}
可以把 这个方法抽取出来放到一个单独的类中,很多地方也会用到
在这里我举一个通过ID查询实体的方法基类的写法:
用ID查询收据库得到实体的方法:(调用dao层基类)
public void findObjectById() {
IElecTextDao elecTextDao=(IElecTextDao) ServiceProvider.getService(IElecTextDao.SERVICE_NAME);
Serializable elecTextID="402881e756e388b60156e38ccae40005";
ElecText elecText=elecTextDao.findObjectByID(elecTextID);
System.out.println(elecText.getTextName()+"#########"+elecText.getTextRemark());
}
调用的接口为public interface ICommonDao<T> {
ElecText findObjectByID(Serializable serializable);
}
接口实现类为:
public class CommonDaoImpl<T> extends HibernateDaoSupport implements
ICommonDao<T> {
public ElecText findObjectByID(Serializable serializable) {
return (ElecText) this.getHibernateTemplate().get(ElecText.class, serializable);
}
}
注:serializable是数据类性的父类,可以兼容int,long,String数据类型
这种写法可实现查找实体类型为ElecText的一个实体,但是如果想通过findObjectByID()方法 获得其他类型就需要重新写另外的一个方法
我们可以通过转换为泛型改装这个方法实现我们的目的:改装后代码
调用的接口为public interface ICommonDao<T> {
T findObjectByID(Serializable serializable);
}
接口实现类为:
public T findObjectByID(Serializable serializable) {
ParameterizedType tp=(ParameterizedType) this.getClass().getGenericSuperclass();
Class entity=(Class) tp.getActualTypeArguments()[0];
return (T) this.getHibernateTemplate().get(entity, serializable);
}
可以把 这个方法抽取出来放到一个单独的类中,很多地方也会用到