我可以: 邀请好友来看>>
ZOL星空(中国) > 技术星空(中国) > Java技术星空(中国) > Hibernate反射DAO模式(二)
帖子很冷清,卤煮很失落!求安慰
返回列表
签到
手机签到经验翻倍!
快来扫一扫!

Hibernate反射DAO模式(二)

33浏览 / 0回复

zrzy_etc

zrzy_etc

0
精华
5
帖子

等  级:Lv.1
经  验:47
  • Z金豆: 0

    千万礼品等你来兑哦~快点击这里兑换吧~

  • 城  市:北京
  • 注  册:2013-03-19
  • 登  录:2013-08-06
发表于 2013-07-19 09:22:27
电梯直达 确定
楼主

通过这些复杂的过程,我们可以获取反射序列化的具体Class实例类型,这样就可以通过该Class实例来获取具体查询的结果集合。

因此实现类的代码大致如下:

public class GenericHibernateDaoextends Serializable,ID extends Serializable>

extends HibernateDaoSupport implements IGenericDao {

Class persistentClass;

public GenericHibernateDao() {

this.persistentClass=(Class) ((ParameterizedType)getClass().getGenericSuperclass()).getActualTypeArguments()[0];

}

public Class getPersistentClass() {

return persistentClass;

}

public void setPersistentClass(Class persistentClass) {

this.persistentClass = persistentClass;

}

@Override

public T create(T entity) {

return (T) this.getHibernateTemplate().save(entity);

}

@Override

public void delete(ID id) {

System.out.println("IDD "+id);

this.getHibernateTemplate().delete(this.findById(id));

}

@Override

public void update(T entity) {

this.getHibernateTemplate().update(entity);

}

@Override

public T findById(ID id) {

return this.getHibernateTemplate().get(persistentClass, id);

}

@Override

public List findAll() {

return this.getHibernateTemplate().loadAll(persistentClass);

}

@Override

public List findByObject(String hql, Object[] param) {

return this.getHibernateTemplate().find(hql, param);

}

@Override

public PageBean findByPageBean(final String hql,final Object[] param,final int currentpage,final int pageSize) {

return this.getHibernateTemplate().execute(new HibernateCallback() {

@Override

public PageBean doInHibernate(Session session)throws HibernateException, SQLException {

PageBean pb=new PageBean();

Query qu=session.createQuery(hql);

if(param.length>0){

for (int i = 0; i < param.length; i++) {

qu.setParameter(i, param);

}

}

qu.setFirstResult((currentpage-1)*pageSize);

qu.setMaxResults(pageSize);

pb.setData(qu.list());

qu=session.createQuery("select count(*) "+hql.substring(hql.toLowerCase().indexOf("from")));

if(param.length>0){

for (int j = 0; j < param.length; j++) {

qu.setParameter(j, param[j]);

}

}

pb.setTotalRows(Integer.parseInt(qu.uniqueResult().toString()));

pb.setCurrentPage(currentpage);

pb.setPageSize(pageSize);

return pb;

}

});

}

@Override

public void bulkUpdate(String bulk, Object[] param) {

this.getHibernateTemplate().bulkUpdate(bulk,param);

}

@Override

public Integer countByObject(final String hql,final Object[] param) {

return this.getHibernateTemplate().execute(new HibernateCallback() {

@Override

public Integer doInHibernate(Session session)throws HibernateException, SQLException {

Query qu=session.createQuery(hql);

for (int i = 0; i < param.length; i++) {

qu.setParameter(i, param);

高级模式
星空(中国)精选大家都在看24小时热帖7天热帖大家都在问最新回答

针对ZOL星空(中国)您有任何使用问题和建议 您可以 联系星空(中国)管理员查看帮助  或  给我提意见

快捷回复 APP下载 返回列表