分页技巧__设计分页用的QueryHelper辅助对象

FROM       必须

  实体名

WHERE       可选

  条件1 AND 条件2 AND ... 条件n

ORDER BY     可选

  属性1, 属性2, ... 属性n

QueryHelper.java

  1. /**
  2. * 用于辅助拼接HQL语句
  3. */
  4. public class QueryHelper {
  5. private String fromClause; // FROM子句
  6. private String whereClause = ""; // Where子句
  7. private String orderByClause = ""; // OrderBy子句
  8.  
  9. private List<Object> parameters = new ArrayList<Object>(); // 参数列表
  10. /**
  11. * 生成From子句
  12. * @param clazz
  13. * @param alias
  14. * 别名
  15. */
  16. public QueryHelper(Class clazz, String alias) {
  17. fromClause = "FROM " + clazz.getSimpleName() + " " + alias;
  18. }
  19. /**
  20. * 拼接Where子句
  21. * @param condition
  22. * @param params
  23. */
  24. public void addCondition(String condition, Object... params) {
  25. // 拼接
  26. if (whereClause.length() == 0) {
  27. whereClause = " WHERE " + condition;
  28. } else {
  29. whereClause += " AND " + condition;
  30. }
  31. // 参数
  32. if (params != null) {
  33. for (Object p : params) {
  34. parameters.add(p);
  35. }
  36. }
  37. }
  38. /**
  39. * 如果第一个参数为true,则拼接Where子句
  40. * @param append
  41. * @param condition
  42. * @param params
  43. */
  44. public void addCondition(boolean append, String condition,
  45. Object... params) {
  46. if (append) {
  47. addCondition(condition, params);
  48. }
  49. }
  50. /**
  51. * 拼接OrderBy子句
  52. * @param propertyName
  53. * 参与排序的属性名
  54. * @param asc
  55. * true表示升序,false表示降序
  56. */
  57. public void addOrderProperty(String propertyName, boolean asc) {
  58. if (orderByClause.length() == 0) {
  59. orderByClause = " ORDER BY " + propertyName
  60. + (asc ? " ASC" : " DESC");
  61. } else {
  62. orderByClause += ", " + propertyName + (asc ? " ASC" : " DESC");
  63. }
  64. }
  65. /**
  66. * 如果第一个参数为true,则拼接OrderBy子句
  67. * @param append
  68. * @param propertyName
  69. * @param asc
  70. */
  71. public void addOrderProperty(boolean append, String propertyName,
  72. boolean asc) {
  73. if (append) {
  74. addOrderProperty(propertyName, asc);
  75. }
  76. }
  77. /**
  78. * 获取生成的用于查询数据列表的HQL语句
  79. * @return
  80. */
  81. public String getListQueryHql() {
  82. return fromClause + whereClause + orderByClause;
  83. }
  84. /**
  85. * 获取生成的用于查询总记录数的HQL语句
  86. * @return
  87. */
  88. public String getCountQueryHql() {
  89. return "SELECT COUNT(*) " + fromClause + whereClause;
  90. }
  91. /**
  92. * 获取HQL中的参数值列表
  93. * @return
  94. */
  95. public List<Object> getParameters() {
  96. return parameters;
  97. }
  98. }

分页技巧__设计分页用的QueryHelper辅助对象的更多相关文章

  1. 分页技巧__在项目中使用QueryHelper辅助对象实现分页效果

    分页技巧__在项目中使用QueryHelper辅助对象实现分页效果 QueryHelper 用于辅助拼接HQL语句 addCondition("t.type=?", "精 ...

  2. 分页技巧_测试并继续改进分页用的QueryHelper辅助对象

    分页技巧_测试并继续改进分页用的QueryHelper辅助对象 QueryHelper.java /** * 用于辅助拼接HQL语句 */ public class QueryHelper { pri ...

  3. 分页技巧_改进JSP页面中的公共分页代码_实现分页时可以有自定义的过滤与排序条件

    分页技巧__改进JSP页面中的公共分页代码 自定义过滤条件问题 只有一个url地址不一样写了很多行代码 public>>pageView.jspf添加 分页技巧__实现分页时可以有自定义的 ...

  4. 分页技巧_抽取出公共的分页用的Service方法

    分页技巧_抽取出公共的分页用的Service方法 TopicAction.java ForumAction.java 放在父类中DaoSupport.java DaoSupportImpl.java ...

  5. 基于WPF系统框架设计(10)-分页控件设计

    背景 最近要求项目组成员开发一个通用的分页组件,要求是这个组件简单易用,通用性,兼容现有框架MVVM模式,可是最后给我提交的成果勉强能够用,却欠少灵活性和框架兼容性. 设计的基本思想 传入数据源,总页 ...

  6. pagebean pagetag java 后台代码实现分页 demo 前台标签分页 后台java分页

    java 后台代码实现分页 demo 实力 自己写的 标签分页 package com.cszoc.sockstore.util; import java.util.HashMap;import ja ...

  7. MvcPager 概述 MvcPager 分页示例 — 标准Ajax分页 对SEO进行优化的ajax分页 (支持asp.net mvc)

    该示例演示如何使用MvcPager最基本的Ajax分页模式. 使用AjaxHelper的Pager扩展方法来实现Ajax分页,使用Ajax分页模式时,必须至少指定MvcAjaxOptions的Upda ...

  8. php分页类代码带分页样式效果(转)

    php分页类代码,有漂亮的分页样式风格 时间:2016-03-16 09:16:03来源:网络 导读:不错的php分页类代码,将类文件与分页样式嵌入,实现php查询结果的精美分页,对研究php分页原理 ...

  9. PHP+jQuery 列表分页类 ( 支持 url 分页 / ajax 分页 )

    /* ******* 环境:Apache2.2.8 ( 2.2.17 ) + PHP5.2.6 ( 5.3.3 ) + MySQL5.0.51b ( 5.5.8 ) + jQuery-1.8.3.mi ...

随机推荐

  1. 【小程序】微信小程序之地图功能

    转载请注明出处:http://blog.csdn.net/crazy1235/article/details/55004841 基本使用 地图组件使用起来也很简单. .wxml <map id= ...

  2. Ubuntu下添加新分区并设置挂载点

    Ubuntu下添加新分区并设置挂载点   最近在做Android项目,可是解压根文件系统以后,就报警说硬盘不够.当初设置使用的大小为15G.不过扩展分区还是很方便的.当然首先你得设置添加使用的硬盘大小 ...

  3. 委托与事件代码详解与(Object sender,EventArgs e)详解

    委托与事件代码详解 using System;using System.Collections.Generic;using System.Text; namespace @Delegate //自定义 ...

  4. python --subprocess 范例

    范例1:查看ipconfig -all命令的输出,并将将输出保存到文件tmp.log中: import subprocess handle = open(r'd:\tmp.log','w') p=su ...

  5. 【C语言】二维数组中的查找,杨氏矩阵

    //二维数组中的查找,杨氏矩阵 //在一个二维数组中,每行都依照从左到右的递增的顺序排序.每列都依照从上到下递增的顺序排序. //请完毕一个函数.输入这种一个数组和一个数,推断数组中是否包括这个数. ...

  6. WIN10 无法访问2003 server共享

    With Windows 10 v1803 or Spring Creators update released I have decided to do a fresh installation o ...

  7. node定时任务——node-schedule模块使用说明

    在实际开发项目中,会遇到很多定时任务的工作.比如:定时导出某些数据.定时发送消息或邮件给用户.定时备份什么类型的文件等等. 一般可以写个定时器,来完成相应的需求,在node.js中自已实现也非常容易, ...

  8. Webkit初始化以及载入URL过程中各种对象的建立时序以及DOM树的建立详情分析

            众所周知,Webkit须要创建DOM树. 为此它须要创建WebView, Chrome,Page,Frame, Document. Document Parser, DOM Tree ...

  9. vue中config/index.js:配置的详细理解

    当我们需要和后台分离部署的时候,必须配置config/index.js: 用vue-cli 自动构建的目录里面  (环境变量及其基本变量的配置) var path = require('path') ...

  10. python学习笔记(7)--爬虫隐藏代理

    说明: 1. 好像是这个网站的代理http://www.xicidaili.com/ 2. 第2,3行的模块不用导入,之前的忘删了.. 3. http://www.whatismyip.com.tw/ ...