文档章节

ssh的带多参数查询的分页查询记录

小泽玛丽罗
 小泽玛丽罗
发布于 2015/07/28 11:12
字数 2217
阅读 39
收藏 0

大致思路是这样的,前端用一个Page类来进行封装,包括基本的数据,当前页,查询参数等信息。

public class Page<T> {
	private int everyPage=10;
	private int totalCount;
	private int totalPage;
	private int currentPage=1;
	private int beginIndex;
	private boolean hasNextPage;
	private boolean hasPrePage;
	private String order;
	private Map<String, String> params=new HashMap<String, String>();
	private List<T> result;
	public Page(int everyPage, int totalCount, int totalPage, int currentPage,
			int beginIndex, boolean hasPrePage, boolean hasNextPage) {
		this.everyPage = everyPage;
		this.totalCount = totalCount;
		this.totalPage = totalPage;
		this.currentPage = currentPage;
		this.beginIndex = beginIndex;
		this.hasPrePage = hasPrePage;
		this.hasNextPage = hasNextPage;
	}
	
	

	public String getOrder() {
		return order;
	}


	
	public void setOrder(String order) {
		this.order = order;
	}



	public Map<String, String> getParams() {
		return params;
	}

	public void setParams(Map<String, String> params) {
		this.params = params;
	}

	public List<T> getResult() {
		return result;
	}

	public void setResult(List<T> result) {
		this.result = result;
	}

	public Page() {
		super();
	}

	public int getEveryPage() {
		return everyPage;
	}

	public void setEveryPage(int everyPage) {
		this.everyPage = everyPage;
	}

	public int getTotalCount() {
		return totalCount;
	}

	public void setTotalCount(int totalCount) {
		this.totalCount = totalCount;
	}

	public int getTotalPage() {
		return totalPage;
	}

	public void setTotalPage(int totalPage) {
		this.totalPage = totalPage;
	}

	public int getCurrentPage() {
		return currentPage;
	}

	public void setCurrentPage(int currentPage) {
		this.currentPage = currentPage;
	}

	public int getBeginIndex() {
		return beginIndex;
	}

	public void setBeginIndex(int beginIndex) {
		this.beginIndex = beginIndex;
	}

	public boolean isHasNextPage() {
		return hasNextPage;
	}

	public void setHasNextPage(boolean hasNextPage) {
		this.hasNextPage = hasNextPage;
	}

	public boolean isHasPrePage() {
		return hasPrePage;
	}

	public void setHasPrePage(boolean hasPrePage) {
		this.hasPrePage = hasPrePage;
	}
	
	public void initPage(int everyPage,int totalCount,int currentPage){
		setTotalCount(totalCount);
		setEveryPage(everyPage);
		setCurrentPage(currentPage==0?1:currentPage);
		int totalPage=0;
		if(totalCount%everyPage==0){
			totalPage=totalCount/everyPage;
		}else {
			totalPage=totalCount/everyPage+1;
		}
		setTotalPage(totalPage);
		setBeginIndex((getCurrentPage()-1)*everyPage);
		setHasPrePage(currentPage==1?false:true);
		setHasNextPage(currentPage==getTotalPage()|| totalPage==0?false:true);
		
		
	}
}

然后在action的类中是这样写的

private Page<KhFormGenerated> pageZpNew=new Page<KhFormGenerated>();
private Page<KhFormState> pageKhNew=new Page<KhFormState>();
...对应的get,set
public String dxFormState(){
		dxList=khDxService.findKhDxs();
		/*formGList=khFormService.findKhFormGAll(zpfPage,10,zpdxId,zpfYear);*/
		/*pageZp=khFormService.findKhFormGAll(zpfPage,10,zpdxId,zpfYear);
		pageKh=khFormService.findAllFormState(khfPage,10,dxId,khfYear);*/
		String zphqlString=ProjectUtils.getHql("select khbg from KhFormGenerated khbg  ", pageZpNew.getParams());
		String khhqlString=ProjectUtils.getHql("select khbs from KhFormState khbs ", pageKhNew.getParams());
		pageZpNew=khFormGService.page(zphqlString,pageZpNew);
		pageKhNew=khFormStateService.page(khhqlString, pageKhNew);
		return Action.SUCCESS;
	}

ProjectUtils.getHql是根据Page对象里的查询参数来生成hql语句

public static String getHql(String head,Map<String, String> params){
		int countNotNull=0;
		for (String param : params.keySet()) {
			if (!params.get(param).equals("")&&params.get(param)!=null&&Integer.parseInt(params.get(param)+"")!=0) {
				countNotNull++;
			}
			if(params.get(param)==null||params.get(param).equals("")){
				params.put(param, "0");
			}
		}
		int count=0; 
		for (String param : params.keySet()) {
			if (Integer.parseInt(params.get(param))!=0) {
				if(count==0)
					head+="where ";
				if(countNotNull>=1 &&count!=countNotNull-1){
					head+=param+"=? and ";
				}else{
					head+=param+"=? ";
				}
				count++;
			}
		}
		return head;
	}

jsp页面,用struts标签,然后将对应的参数写到Page对象的params里面去,下面是怎么写的例子

<form action="dxFormState.action" method="post" >
	对象: <select  name="pageZpNew.params['khbg.khDx.khDxId']"
		style="height:30px;width:120px;margin-right:20px;">
		<option value="0">请选择</option>
		<s:iterator value="dxList" id="dx"  status="stu">
		<option value=<s:property value="#dx.khDxId" /> <s:if test="pageZpNew.params['khbg.k                    hDx.khDxId']==#dx.khDxId">selected="selected" </s:if> ><s:property value="#dx.kh                    DxName" />
		</option>
		</s:iterator>
		</select> 
	年度: <select  name="pageZpNew.params['khbg.khForm.year']" style="height:30px;width:80px;margin-right:20px;"><option value="0">请选择</option>
		<option value="2014"
    		<s:if test="pageZpNew.params['khbg.khForm.year']==2014">selected="selected" </s:if>>2014</option><option value="2015"<s:if test="pageZpNew.params['khbg.khForm.year']==2015">selected="selected" </s:if>>2015</option><option value="2016"<s:if test="pageZpNew.params['khbg.khForm.year']==2016">selected="selected" </s:if>>2016</option><option value="2017"<s:if test="pageZpNew.params['khbg.khForm.year']==2017">selected="selected" </s:if>>2017</option><option value="2018"<s:if test="pageZpNew.params['khbg.khForm.year']==2018">selected="selected" </s:if>>2018</option><option value="2019"s:if test="pageZpNew.params['khbg.khForm.year']==2019">selected="selected" </s:if>>2019</option><option value="2020"<s:if test="pageZpNew.params['khbg.khForm.year']==2020">selected="selected" </s:if>>2020</option>
		</select>
	核表状态: <select  name="pageZpNew.params['khbg.zpState']"style="height:30px;width:100px;margin-right:20px;"><option value="0"  <s:if test="pageZpNew.params['khbg.zpState']==0">selected="selected" </s:if>  >请选择</option><option value="1" <s:if test="pageZpNew.params['khbg.zpState']==1">selected="selected" </s:if>>未填写</option><option value="2" <s:if test="pageZpNew.params['khbg.zpState']==2">selected="selected" </s:if>>暂时保存</option><option value="3" <s:if test="pageZpNew.params['khbg.zpState']==3">selected="selected" </s:if>>提交</option>
		</select>
					
					<button  type="submit" class="btn btn-primary mr_20">查询</button>
					共<s:property value="pageZpNew.totalCount" />条记录,共<s:property value="pageZpNew.totalPage"/>页
					<button type="button" <s:if test='pageZpNew.hasPrePage==false'> disabled="disabled"</s:if> class="pagePre btn btn-default ml_20 mr_10 ">上一页</button>
					第<s:property value="pageZpNew.currentPage"/>页 <input  name="pageZpNew.currentPage" class="hidden currentPage" value=<s:property value="pageZpNew.currentPage"/> >
					<button type="button" <s:if test='pageZpNew.hasNextPage==false'> disabled="disabled"</s:if> class="pageNext btn btn-default ml_10">下一页</button>
					</form>

把参数都写到form表单,并封装到pageZpNew对象中去

这样从前端,到action控制层就都有了,接下来是dao层和service层,采用泛型实现basedao和baseservice,然后将对应的dao和service集成basedao和baseservice,然后用具体的daoimpl和serviceimpl来实现对应的dao和service 并分别继承basedaoimpl和baseserviceimpl

下面是basedao

public interface BaseDao<T> {
	public abstract void delete(int id);
	public abstract void delete(T entity);
	public abstract T getById(int id);
	public abstract List<T> findAll();
	public abstract List<T> findByIds(String[] ids);
	public abstract int save(T entity);
	public abstract void update(T entity);
	public abstract List<T> find(String hql);
	public abstract List<T> find(String hql,Object... values);
	public abstract List<T> query(String hql);
	public abstract List<T> query(String hql,int page,int pageSize);
	public abstract List<T> query(String hql,Object...objects);
	public abstract void saveOrUpdate(T entity);
	public abstract void saveOrUpdateAll(List<T> list);
	public abstract int update(String hql,Object...objects);
	public abstract int update(String hql);
	public abstract int excudeSqlUpdate(String sql,Object...objects);
	public abstract int excudeSql(String sql);
	public abstract List<T> pageQuery(String hql,int page,int pageSize,Object... objects);
	public abstract Page<T> page(String hql,Page<T> page);
	public abstract List<T> createCriteria(int page,int pageSize,Map<String, Object> map);
	public abstract List<T> createCriteria(Map<String, Object> map);
}

basedaoimpl

@Transactional
@Repository
public class BaseDaoImpl<T> extends HibernateDaoSupport implements BaseDao<T> {
	protected Log logger =LogFactory.getLog(BaseDaoImpl.class);
	@SuppressWarnings("unchecked")
	protected Class<T> clazz=GenericsUtils.getSuperClassGenricType(this.getClass()); ;
	
	
	

	@Override
	public void delete(int id) {
		Object object=(Object) getCSession().get(clazz, id);
		getCSession().delete(object);
	}

	@SuppressWarnings("unchecked")
	@Override
	public T getById(int id) {
		return (T)getCSession().get(clazz, id);
	}
	
	@SuppressWarnings("unchecked")
	@Override
	public List<T> findAll() {
		return getCSession().createQuery("from "+clazz.getSimpleName()).list();
	}
	
	@Override
	public List<T> findByIds(String[] ids) {
		
		return null;
	}

	@Override
	public int save(T entity) {
		int id=(Integer) getCSession().save(entity);
		return id;
	}
	
	@Override
	public void update(T entity) {
		getCSession().update(entity);
	}
	
	public Session getCSession(){
		return getHibernateTemplate().getSessionFactory().getCurrentSession();
	}
	
	@SuppressWarnings("unchecked")
	@Override
	public List<T> find(String hql) {
		
		return getHibernateTemplate().find(hql);
		
	}
	
	@Override
	public List<T> find(String hql, Object... values) {
		@SuppressWarnings("unchecked")
		List<T> lists=(List<T>)this.getHibernateTemplate().find(hql, values);
		return lists;
	}

	@SuppressWarnings("unchecked")
	@Override
	public List<T> query(String hql) {
		
		return createQuery(hql).list();
	}
	
	@SuppressWarnings("unchecked")
	@Override
	public List<T> query(String hql, int page, int pageSize) {

		return createQuery(hql, page,pageSize).list();
	}
	
	
	@SuppressWarnings("unchecked")
	@Override
	public List<T> query(String hql, Object... objects) {

		return createQuery(hql, objects).list();
	}
	
	@SuppressWarnings("unchecked")
	@Override
	public List<T> pageQuery(String hql, int page, int pageSize, Object... objects) {
		return createQuery(hql, page, pageSize, objects).list();
	}
	
	public Query createQuery(String hql){
		Query query=getCSession().createQuery(hql);
		return query;
	}
	
	public Query createQuery(String hql,Object...objects){
		Query query=getCSession().createQuery(hql);
		for(int i=0;i<objects.length;i++){
			query.setParameter(i, objects[i]);
		}
		return query; 
	}
	
	public Query createQuery(String hql,int page,int PageSize){
		Query query=getCSession().createQuery(hql);
		query.setFirstResult((page-1)*PageSize);
		query.setMaxResults(PageSize);
		return query;
	}
	public Query createQuery(String hql,int page,int PageSize,Object... objects){
		Query query=getCSession().createQuery(hql);
		query.setFirstResult((page-1)*PageSize);
		query.setMaxResults(PageSize);
		for(int i=0;i<objects.length;i++){
			query.setParameter(i, objects[i]);
		}
		return query;
	}

	@Override
	public List<T> createCriteria(int page, int pageSize,
			Map<String, Object> map) {
		@SuppressWarnings("unchecked")
		List<T> list=getCSession().createCriteria(getClass())
		.add( Restrictions.allEq(map))
		.setFirstResult((page-1)*pageSize)
		.setMaxResults(pageSize).list();
		return list;
	}

	@Override
	public List<T> createCriteria(Map<String, Object> map) {
		@SuppressWarnings("unchecked")
		List<T> list=getCSession().createCriteria(getClass())
				.add(Restrictions.allEq(map))
				.list();
		return list;
	}

	@Override
	public int excudeSqlUpdate(String sql, Object... objects) {
		Query query=getCSession().createSQLQuery(sql);
		for(int i=0;i<objects.length;i++){
			query.setParameter(i, objects[i]);
		}
		return query.executeUpdate();
	}
	
	@Override
	public int update(String hql, Object... objects) {
		Query query=getCSession().createQuery(hql);
		for(int i=0;i<objects.length;i++){
			query.setParameter(i, objects[i]);
		}
		return query.executeUpdate();
	}
	
	private int getRowCount(String hql,Object...objects){
		
		return getHibernateTemplate().find(hql, objects).size();
	}

	@SuppressWarnings({ "rawtypes", "unchecked" })
	@Override
	public Page<T> page(String hql,Page<T> page) {
		Query query=getCSession().createQuery(hql);
		Map<String, String> params=page.getParams();
		int position=0;
		for (String param : params.keySet()) {
			if(Integer.parseInt(params.get(param))!=0){
				if(!param.endsWith("year")&&!param.endsWith("Id")&&!param.endsWith("id")&&!param.endsWith("score")&&!param.endsWith("Score")&&!param.endsWith("State")&&!param.endsWith("state")&&!param.endsWith("ype")){
					query.setParameter(position, params.get(param));
				}else{
					query.setParameter(position, Integer.parseInt(params.get(param)));
				}
				position++;
			}
		}
		
		int rowCount=query.list().size();
		query.setFirstResult((page.getCurrentPage()-1)*page.getEveryPage());
		query.setMaxResults(page.getEveryPage()); 
		List<T> list=query.list();
		
		page.initPage(page.getEveryPage(), rowCount, page.getCurrentPage());
		page.setResult(list);
		return page;
	}
	
	
	@Override
	public int update(String hql) {
		Query query=getCSession().createQuery(hql);
		return  query.executeUpdate();
	}

	@Override
	public int excudeSql(String sql) {
		Query query=getCSession().createSQLQuery(sql);
		
		return query.executeUpdate();
	}

	@Override
	public void saveOrUpdateAll(List<T> list) {
		getHibernateTemplate().saveOrUpdateAll(list);
	}

	@Override
	public void saveOrUpdate(T entity) {
		getHibernateTemplate().saveOrUpdate(entity);
	}

	@Override
	public void  delete(T entity) {
		getHibernateTemplate().delete(entity);
	}
	
}

baseservice

public interface BaseService<T> {
	public abstract void delete(int id);
	public abstract void delete(T entity);
	public abstract T getById(int id);
	public abstract List<T> findAll();
	public abstract List<T> findByIds(String[] ids);
	public abstract int save(T entity);
	public abstract void update(T entity);
	public abstract List<T> find(String hql);
	public abstract List<T> find(String hql,Object... objects);
	public abstract List<T> query(String hql);
	public abstract List<T> query(String hql,int page,int pageSize);
	public abstract List<T> query(String hql,Object...objects);
	public abstract void saveOrUpdate(T entity);
	public abstract void saveOrUpdateAll(List<T> list);
	public abstract int update(String hql);
	public abstract int update(String hql,Object...objects);
	public abstract int excudeSqlUpdate(String sql,Object...objects);
	public abstract int excudeSqlUpdate(String sql);
	public abstract List<T> pageQuery(String hql,int page,int pageSize,Object... objects);
	public abstract Page<T> page(String hql,Page<T> page);
	public abstract List<T> query(String hql,int page,int pageSize,Object[] objects);
	public abstract List<T> createCriteria(int page,int pageSize,Map<String, Object> map);
	public abstract List<T> createCriteria(Map<String, Object> map);
}

baseserviceimpl

public class BaseServiceImpl<T> implements BaseService<T> {
		
	private BaseDao<T> dao;
	
	
	public BaseDao<T> getDao() {
		return dao;
	}
	
	public void setDao(BaseDao<T> dao) {
		this.dao = dao;
	}

	@Override
	public void delete(int id) {
		dao.delete(id);
	}

	@Override
	public T getById(int id) {
		return dao.getById(id);
	}

	@Override
	public List<T> findAll() {
		return dao.findAll();
	}

	@Override
	public List<T> findByIds(String[] ids) {
		return dao.findByIds(ids);
	}

	@Override
	public int save(T entity) {
		return dao.save(entity);
	}
	
	@Override
	public void update(T entity) {
		dao.update(entity);
	}

	@Override
	public List<T> find(String hql) {
		return dao.find(hql);
	}

	@Override
	public List<T> find(String hql, Object... objects) {
		return dao.find(hql, objects);
	}

	@Override
	public List<T> query(String hql) {
		return dao.query(hql);
	}

	@Override
	public List<T> query(String hql, int page, int pageSize) {
		return dao.query(hql, page, pageSize);
	}

	@Override
	public List<T> query(String hql, Object... objects) {
		return dao.query(hql, objects);
	}

	@Override
	public List<T> query(String hql, int page, int pageSize, Object[] objects) {
		return dao.query(hql, page, pageSize, objects);
	}

	@Override
	public List<T> createCriteria(int page, int pageSize,
			Map<String, Object> map) {
		return dao.createCriteria(page, pageSize, map);
	}

	@Override
	public List<T> createCriteria(Map<String, Object> map) {
		return dao.createCriteria(map);
	}

	@Override
	public int excudeSqlUpdate(String sql, Object... objects) {
		return dao.excudeSqlUpdate(sql, objects);
	}

	@Override
	public int update(String hql, Object... objects) {
		return dao.update(hql, objects);
	}

	@Override
	public List<T> pageQuery(String hql, int page, int pageSize,
			Object... objects) {
		return dao.pageQuery(hql, page, pageSize, objects);
	}

	@Override
	public Page<T> page(String hql,Page<T> page) {
		return dao.page(hql, page);
	}

	@Override
	public int update(String hql) {
		return dao.update(hql);
	}

	@Override
	public int excudeSqlUpdate(String sql) {
		return dao.excudeSql(sql);
	}

	@Override
	public void saveOrUpdateAll(List<T> list) {
		dao.saveOrUpdateAll(list);
	}

	@Override
	public void saveOrUpdate(T entity) {
		dao.saveOrUpdate(entity);
	}

	@Override
	public void delete(T entity) {
		dao.delete(entity);
	}

}

具体的其他dao和service就是分别继承basedao和baseservice,daoimpl和serviceimpl分别集成basedaoimpl和baseserviceimpl和实现接口就可以了

© 著作权归作者所有

小泽玛丽罗
粉丝 11
博文 57
码字总数 17545
作品 0
杭州
私信 提问
hibernate中带查询条件的分页

所谓分页,从数据库中分,则是封装一个分页类。利用分页对象进行分页。 但,分页往往带查询条件。 分页类的三个重要数据:【当前页码数】,【数据库中的总记录数】,【每页显示的数据的条数】...

无信不立
2014/07/01
0
0
简单易用的分页查询 - mybatis-pager

为 SpringBoot(基于 Servlet 的 Web 项目) + Mybatis 提供简单易用的分页查询支持 功能说明 以前要做一个分页查询需要做的: 每个接口都需要接收分页参数 写一个查询特定页数据的 写一个查询...

Cat7373
03/11
0
0
我的第一个python web开发框架(29)——定制ORM(六)

  在开发中,查询操作是使用最多的,而查询列表是其中之一,查询列表可分为分页查询和不分页查询(它们之间多了一次总记录数查询),还可以分为单表查询和多表关联查询,返回的结构体根据前...

AllEmpty
2018/08/15
0
0
nbfujx/Goku.WebService.Bus

Goku.WebService.Bus 基于SpringBoot + Spring + Apache CXF +Mybatis 开发SOAP的 WebService 服务 备注 版本 说明 1.0.0版本 2.0.0版本 springboot启动 原理 Mybatis基于动态代理实现Mappe...

nbfujx
2018/01/02
0
0
MyBatis3.2 使用Interceptor进行分页

本文主要介绍如何使用Mybaits的拦截器 对Sql进行改造,以便支持分页。 关于mybatis的拦截器使用以及原理可以参考我的另外一篇文章(http://www.cnblogs.com/daxin/p/3544188.html)。 首先说...

微wx笑
2018/04/13
0
0

没有更多内容

加载失败,请刷新页面

加载更多

GitLab Auto DevOps功能与Kubernetes集成教程

介 绍 在这篇文章中,我们将介绍如何将GitLab的Auto DevOps功能与Rancher管理的Kubernetes集群连接起来,利用Rancher v2.2.0中引入的授权集群端点的功能。通过本文,你将能全面了解GitLab如何...

RancherLabs
9分钟前
1
0
基本类型 引用类型的问题

用concat()拷贝了个数组 ,原数组包含了引用类型, tempAee === this.dynacArr[0][this.dynacArr[1]][0] //false 虽然拷贝了个数组 , tempAee[0] === this.dynacArr[0][this.dynacArr[1]][......

东东笔记
10分钟前
0
0
Linux下Java运行.class文件,报错找不到或无法加载主类

Linux下Java运行.class文件,报错找不到或无法加载主类 classpath配置的错误,所以找不到.class文件。 原先的etc/profile中的classpath配置 export CLASSPATH=$JAVA_HOME/lib/tools.jar 更改...

Mr_Tea伯奕
21分钟前
0
0
vue 日期计算

搞开发少不了对时间进行加减操作,尤其是前端对日期操作不能单纯的加减,不然31+1 变成32号就扯了。比如推算前几分钟、后几分钟,,前几天、后几天,前几月、后几月等等相关操作。 百度找半天...

朝如青丝暮成雪
33分钟前
0
0
非递归实现后序遍历二叉树

问题描述 从键盘接受输入先序序列,以二叉链表作为存储结构,建立二叉树(以先序来建立)并对其进行后序遍历,然后将遍历结果打印输出。要求采用非递归方法实现。 解题思路 Push根结点到第一...

niithub
46分钟前
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部