离线查询对象使用(web层的Action中)
DetachedCriteria dc = DetachedCriteria.forClass(Customer.class); if(Strings.isNotBlank(customer.getCust_name())){ dc.add(Restrictions.like("cust_name", "%"+customer.getCust_name()+"%")); }
离线查询对象获取总记录数
错误写法(获取的是所有数据,每个数据是一个对象,所以非常浪费资源)
public Integer getTotalCount(DetachedCriteria dc) { List<Customer> customerList = (List<Customer>) getHibernateTemplate().findByCriteria(dc); return customerList.size(); }
正确写法
public Integer getTotalCount(DetachedCriteria dc) { //设置查询的聚合函数,总计路数 dc.setProjection(Projections.rowCount()); List<Long> list = (List<Long>) getHibernateTemplate().findByCriteria(dc); //清空之前设置的聚合函数(防止再次使用dc) dc.setProjection(null); if(list!=null && list.size() > 0){ Long count = list.get(0); return count.intValue(); } else { return null; } }
通过离线查询对象获取分页中的显示数据(list)
public List<Customer> getPageList(DetachedCriteria dc, int start, Integer pageSize) { //start 从第几条开始显示 pageSize页面显示的条数 List<Customer> lsit = (List<Customer>) getHibernateTemplate().findByCriteria(dc, start, pageSize); return lsit; }
获取运行时的泛型类型
public class BaseDaoImpl<T> extends HibernateDaoSupport implements BaseDao<T> { private Class clazz;//用于接收运行期泛型类型 public BaseDaoImpl(){ //获得当前类型的带有泛型类型的父类 ParameterizedType pd = (ParameterizedType) this.getClass().getGenericSuperclass(); clazz = (Class) pd.getActualTypeArguments()[0]; } } //clazz.getClass()就可以获取到运行时的类型