hibernate条件查询service层和daoceng底层封装

用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);


}


可以把 这个方法抽取出来放到一个单独的类中,很多地方也会用到
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值