packagecom.learning.crm.base.impl;importjava.io.Serializable;importjava.lang.reflect.ParameterizedType;importjava.sql.SQLException;importjava.util.List;importorg.hibernate.HibernateException;importorg.hibernate.Query;importorg.hibernate.Session;importorg.springframework.orm.hibernate3.HibernateCallback;importorg.springframework.orm.hibernate3.support.HibernateDaoSupport;importcom.learning.crm.base.BaseDao;public class BaseDaoImpl extends HibernateDaoSupport implements BaseDao{private Class>clazz;public BaseDaoImpl() throwsInstantiationException, IllegalAccessException {//获得T
ParameterizedType parameterizedType= (ParameterizedType) this.getClass().getGenericSuperclass();//获得运行时的T类型
clazz = (Class>) parameterizedType.getActualTypeArguments()[0];
}
@Overridepublic List findAll(String condition,final Object[] objects, final int pageSize, final intcurrentPage) {final String hql="from "+clazz.getName()+" where 1=1 "+condition;return this.getHibernateTemplate().execute(new HibernateCallback>() {public List doInHibernate(Session session) throwsHibernateException, SQLException {
Query query=session.createQuery(hql);for (int i = 0; i < objects.length; i++) {
query.setParameter(i, objects[i]);
}
query.setFirstResult((currentPage-1)*pageSize);
query.setMaxResults(pageSize);returnquery.list();
}
});
}
@Overridepublic voidsave(T t) {this.getHibernateTemplate().save(t);
}
@Overridepublic voidupdate(T t) {this.getHibernateTemplate().update(t);
}
@Overridepublic ListfindAll() {return this.getHibernateTemplate().find(" from "+clazz.getName());
}
@OverridepublicT findById(Serializable id) {this.getHibernateTemplate().get(clazz, id);return null;
}
@Overridepublic voiddelete(T t) {this.getHibernateTemplate().delete(t);
}
}