public PageResult<T> findPageResult(final BaseQuery baseQuery) {
//创建pageResult对象
final PageResult<T> result=new PageResult<T>(baseQuery.getCurrentPage(),baseQuery.getPageSize(),this.getCount(baseQuery));
final StringBuffer stringBuffer = new StringBuffer();
stringBuffer.append("from "+this.clazz.getSimpleName());
stringBuffer.append(" where 1=1 ");
//在map中封装的查询条件
final Map<String, Object>keyValue=baseQuery.getKeyValues();
//添加查询条件
for (Entry<String, Object> entry : keyValue.entrySet()) {
stringBuffer.append(" and "+entry.getKey()+"=:"+entry.getKey());
}
//handler模式
return this.hibernateTemplate.execute(new HibernateCallback<PageResult<T>>() {
@Override
public PageResult<T> doInHibernate(Session session) throws HibernateException {
Query query =session.createQuery(stringBuffer.toString());
//添加查询条件值
for (Entry<String, Object> entry : keyValue.entrySet()) {
query.setParameter(entry.getKey(), entry.getValue());
}
//设置当前页的第一行在集合的位置
int firstResult=(baseQuery.getCurrentPage()-1)*baseQuery.getPageSize();
//设置每页显示的行数
int maxResult=baseQuery.getPageSize();
//分页语句
query.setFirstResult(firstResult).setMaxResults(maxResult);
List<T>list = query.list();
result.setRows(list);
return result;
}
});
}
BaseQuery
/**
* 1.提供一个抽象方法,让子类完成,把具体的页面上的表单元素封装成Map
* 2.提供一个Map供子类使用
* @author sh
* @Time 下午9:32:27
*/
public abstract class BaseQuery {
/**
* 当前页数,初始化的值为1
*/
private int currentPage=1;
/**
* 一页显示的条数
*/
private int pageSize=2;
public int getCurrentPage() {
return currentPage;
}
public void setCurrentPage(int currentPage) {
this.currentPage = currentPage;
}
public int getPageSize() {
return pageSize;
}
public void setPageSize(int pageSize) {
this.pageSize = pageSize;
}
/**
* 把页面上的表单元素封装成Map
*/
private Map<String, Object> keyValues=new HashMap<String, Object>();
public Map<String, Object> getKeyValues() {
return keyValues;
}
public void setKeyValues(Map<String, Object> keyValues) {
this.keyValues = keyValues;
}
/**
* 把页面上的查询条件封装成一个Map<String,Object>
* 并且返回
* @return
*/
public abstract Map<String, Object> buildWhere();
}
public int getCount(final BaseQuery baseQuery) {
return this.hibernateTemplate.execute(new HibernateCallback<Integer>() {
@Override
public Integer doInHibernate(Session session) throws HibernateException {
StringBuffer stringBuffer=new StringBuffer();
stringBuffer.append("select count("+classMetadata.getIdentifierPropertyName()+") from "+clazz.getSimpleName());
stringBuffer.append(" where 1=1 ");
//获取所有的查询条件
Map<String, Object>keyValue=baseQuery.buildWhere();
//where 条件的拼接
System.out.println(stringBuffer.toString());
for (Entry<String, Object> entry : keyValue.entrySet()) {
stringBuffer.append("and "+entry.getKey()+"=:"+entry.getKey());
}
Query query =session.createQuery(stringBuffer.toString());//存放一个hql语句
//where 值的拼接
for (Entry<String, Object> entry : keyValue.entrySet()) {
query.setParameter(entry.getKey(), entry.getValue());
}
Long count = (Long)query.uniqueResult();
return count.intValue();
}
});
}
学习中遇到的好的方法的合集!