博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
分页和多条件查询功能
阅读量:6300 次
发布时间:2019-06-22

本文共 7107 字,大约阅读时间需要 23 分钟。

/** * 辅助拼接HQL声明工具 * @author G-Xia * */public class QueryHelper {	private String fromClause; // From子句	private String whereClause = ""; // Where子句	private String orderByClause = ""; // OrderBy子句	private List parameters = new ArrayList(); // 參数列表	/**	 * 生成From子句	 * 	 * @param clazz	 * @param alias	 *            别名	 */	public QueryHelper(Class clazz, String alias) {		fromClause = "FROM " + clazz.getSimpleName() + " " + alias;	}	/**	 * 拼接Where子句	 * 	 * @param condition	 * @param args	 */	public QueryHelper addWhereCondition(String condition, Object... args) {		// 拼接		if (whereClause.length() == 0) {			whereClause = " WHERE " + condition;		} else {			whereClause += " AND " + condition;		}		// 处理參数		if (args != null && args.length > 0) {			for (Object arg : args) {				parameters.add(arg);			}		}		return this;	}	/**	 * 假设第一个參数的值为true,就拼接Where子句	 * 	 * @param append	 * @param condition	 * @param args	 */	public QueryHelper addWhereCondition(boolean append, String condition, Object... args) {		if (append) {			addWhereCondition(condition, args);		}		return this;	}	/**	 * 拼接OrderBy子句	 * 	 * @param propertyName	 * @param asc	 *            true表示升序,false表示降序	 */	public QueryHelper addOrderByProperty(String propertyName, boolean asc) {		if (orderByClause.length() == 0) {			orderByClause = " ORDER BY " + propertyName + (asc ? " ASC" : " DESC");		} else {			orderByClause += ", " + propertyName + (asc ?

" ASC" : " DESC"); } return this; } /** * 假设第一个參数的值为true,就拼接OrderBy子句 * * @param append * @param propertyName * @param asc */ public QueryHelper addOrderByProperty(boolean append, String propertyName, boolean asc) { if (append) { addOrderByProperty(propertyName, asc); } return this; } /** * 获取查询数据列表的HQL语句 * * @return */ public String getQueryListHql() { return fromClause + whereClause + orderByClause; } /** * 获取查询总记录数的HQL语句(没有OrderBy子句) * * @return */ public String getQueryCountHql() { return "SELECT COUNT(*) " + fromClause + whereClause; } /** * 获取參数列表 * * @return */ public List<Object> getParameters() { return parameters; } /** * 准备PageBean对象到Struts2的栈顶 * @param service * @param pageNum */ public void preparePageBean(DaoSupport<?> service, int pageNum){ PageBean pageBean = service.getPageBean(pageNum, this); ActionContext.getContext().getValueStack().push(pageBean); } }

PageBean:分页用的页面信息

public class PageBean {	// 传递的參数或配置的值	private int currentPage; // 当前页	private int pageSize; // 每页显示的记录数	// 查询数据库	private int recordCount; // 总记录数	private List recordList; // 本页的数据列表	// 计算出来的	private int pageCount; // 总页数	private int beginPageIndex; // 页面列表的開始索引	private int endPageIndex; // 页面列表的结束索引	/**	 * 仅仅接受前4个必要的属性的值,会自己主动的计算出后3个属性的值	 * 	 * @param currentPage	 * @param pageSize	 * @param recordCount	 * @param recordList	 */	public PageBean(int currentPage, int pageSize, int recordCount, List recordList) {		this.currentPage = currentPage;		this.pageSize = pageSize;		this.recordCount = recordCount;		this.recordList = recordList;		// 计算pageCount		pageCount = (recordCount + pageSize - 1) / pageSize;		// 计算begPageIndex和endPageIndex		// a, 总页数不超过10页,就所有显示		if (pageCount <= 10) {			beginPageIndex = 1;			endPageIndex = pageCount;		}		// b, 总页数超过了10页,就显示当前页附近的共10个页码(前4个 + 当前页 + 后5个)		else {			// 显示当前页附近的共10个页码(前4个 + 当前页 + 后5个)			beginPageIndex = currentPage - 4; // 7 - 4 = 3			endPageIndex = currentPage + 5; // 7 + 5 = 12			// 当前面不足4个页码时,就显示前10页			if (beginPageIndex < 1) {				beginPageIndex = 1;				endPageIndex = 10;			}			// 当后面不足5个页码时。就显示后10页			else if (endPageIndex > pageCount) {				endPageIndex = pageCount;				beginPageIndex = pageCount - 10 + 1; // 注意在显示的时候是包括两个边界的			}		}	}	public int getCurrentPage() {		return currentPage;	}	public void setCurrentPage(int currentPage) {		this.currentPage = currentPage;	}	public int getPageCount() {		return pageCount;	}	public void setPageCount(int pageCount) {		this.pageCount = pageCount;	}	public int getPageSize() {		return pageSize;	}	public void setPageSize(int pageSize) {		this.pageSize = pageSize;	}	public int getRecordCount() {		return recordCount;	}	public void setRecordCount(int recordCount) {		this.recordCount = recordCount;	}	public List getRecordList() {		return recordList;	}	public void setRecordList(List recordList) {		this.recordList = recordList;	}	public int getBeginPageIndex() {		return beginPageIndex;	}	public void setBeginPageIndex(int beginPageIndex) {		this.beginPageIndex = beginPageIndex;	}	public int getEndPageIndex() {		return endPageIndex;	}	public void setEndPageIndex(int endPageIndex) {		this.endPageIndex = endPageIndex;	}}

/**	 * 公共的查询分页信息的方法(终于版)	 * 	 * @param pageNum	 * @param queryHelper	 *            查询语句 + 參数列表	 * @return	 */	public PageBean getPageBean(int pageNum, QueryHelper queryHelper) {		System.out.println("------------> DaoSupportImpl.getPageBean( int pageNum, QueryHelper queryHelper )");		// 获取pageSize等信息		int pageSize = Configuration.getPageSize();		List parameters = queryHelper.getParameters();		// 查询一页的数据列表		Query query = getSession().createQuery(queryHelper.getQueryListHql());		if (parameters != null && parameters.size() > 0) { // 设置參数			for (int i = 0; i < parameters.size(); i++) {				query.setParameter(i, parameters.get(i));			}		}		query.setFirstResult((pageNum - 1) * pageSize);		query.setMaxResults(pageSize);		List list = query.list(); // 查询		// 查询总记录数		query = getSession().createQuery(queryHelper.getQueryCountHql()); // 注意空格。		if (parameters != null && parameters.size() > 0) { // 设置參数			for (int i = 0; i < parameters.size(); i++) {				query.setParameter(i, parameters.get(i));			}		}		Long count = (Long) query.uniqueResult(); // 查询		return new PageBean(pageNum, pageSize, count.intValue(), list);	}

// 准备分页的数据 -- 使用QueryHelper		new QueryHelper(Topic.class, "t")//				.addWhereCondition("t.forum=?", forum)//				.addWhereCondition((viewType == 1), "t.type=?", Topic.TYPE_BEST) // 1 表示仅仅看精华帖				.addOrderByProperty((orderBy == 1), "t.lastUpdateTime", asc) // 1 表示仅仅按最后更新时间排序				.addOrderByProperty((orderBy == 2), "t.postTime", asc) // 表示仅仅按主题发表时间排序				.addOrderByProperty((orderBy == 3), "t.replyCount", asc) // 表示仅仅按回复数量排序				.addOrderByProperty((orderBy == 0), "(CASE t.type WHEN 2 THEN 2 ELSE 0 END)", false)//				.addOrderByProperty((orderBy == 0), "t.lastUpdateTime", false) // 0 表示默认排序(全部置顶帖在前面。并按最后更新时间降序排列)				.preparePageBean(topicService, pageNum);

JSP中页面信息

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><%@ taglib prefix="s" uri="/struts-tags" %><%-- 分页信息 --%>
页次:${currentPage}/${pageCount }页   每页显示:${pageSize }条   总记录数:${recordCount }条
<%-- 页码列表 --%>
<%-- 非当前页,有链接 --%>
${num}
<%-- 当前页,没有链接 --%>
${num}
转到:
<%-- 让select默认选中当前页 --%>

id=${id}&pageNum=" + pageNum; // alert("请实现gotoPage()方法!"); // 方式二: $("#pageForm").append("<input type='hidden' name='pageNum' value='" + pageNum + "'>"); // 加入pageNum表单字段 $("#pageForm").submit(); // 提交表单 } </script>

版权声明:本文博客原创文章,博客,未经同意,不得转载。

你可能感兴趣的文章
Confluence 6 有关 AD 的一些特殊说明
查看>>
IDEA环境下SSM整合------注解开发
查看>>
Docker的魔力,Make Apps Work Everywhere
查看>>
open文件操作
查看>>
论文 | 自然语言处理顶会ACL 2018该关注什么?蚂蚁金服专家告诉你!
查看>>
第6章 Spring Boot数据库集成
查看>>
专家教你使用MaxCompute玩转大数据分析!
查看>>
1-SII--SharedPreferences完美封装
查看>>
Idea_学习_09_Idea 方法自动生成参数默认名
查看>>
4-SII--☆Android缓存文件(带有效时长)封装
查看>>
go-fastdfs v1.2.5 发布,支持图片缩放,高性能、高可靠分布式文件系统
查看>>
第一章 十天干,十二地支
查看>>
Unity 3D-AR开发-Vuforia教程手册
查看>>
05.企业信息化战略与实施
查看>>
iOS设置拍照retake和use按钮为中文简体
查看>>
.NET快速信息化系统开发框架 V3.2-&amp;gt;Web版本新增“文件管理中心”集上传、下载、文件共享等一身,非常实用的功能...
查看>>
解决因为ssh秘钥权限问题导致的Connection closed by 192.168.1.31 port 2222
查看>>
区块链开发公司谈区块链有哪些算法
查看>>
移动端H5的简单时间轴效果
查看>>
error: only position independent executables (PIE) are supported.
查看>>