javaEE 分页功能最终代码优化(二)

上次进行了分页代码的优化(http://blog.csdn.net/u013082989/article/details/51025255),但是不足之处就是在Action层中写hql语句,如果hql语句比较复杂,例如条件查询,会有一些参数的判断,是非常容易出错的。下面对分页查询进一步优化,将会变得非常简单。

下面我们就完成一个带条件的查询,如下图,可以选择部门、按照姓名、按照账号进行条件查询,同时分页。

一:还是先看简单的,jsp界面代码的进一步抽取。

(1)之前已经把公共的页码显示的代码抽取出去了,但是每个界面还是要写一段javascript代码,来指定对应的xxx.action

其实也可以直接定义一个form,

然后得到form,提交form即可,所以以后直接写个form标签,指定action即可

我们要完成条件查询,将内容放在form标签内,提交表单在Action层就得到对应的属性值了

二:下面就是解决在Action层写hql语句的问题,可以定义一个QueryHelper类,将来通过这个类来拼接hql语句和传递参数列表,处理好之后作为参数传递给PageBean处理即可(关于PageBean请看上一篇博客)

(1)需要拼接from(必须要有的语句)、where、orderby语句,定义这三个属性,还有需要得到对应的参数列表

(2)定义构造函数,在Action层new一个对象的时候就传递from语句的参数(就是类名)

(3)拼接where语句,Action层需要传递条件和参数列表,注意这里的参数是可变参数,因为是不确定的,具体看下面注释。

刚刚定义属性的时候对whereClause和orderByClause初始化为空字符串,所以第一次调用此方法拼接是from xxx where xxx.yyy=?,下面再调用就是where xxx.yyy=?and xxx.zzz=?

还有这里方法的类型都是QueryHelper类型的,return this;表示返回类的对象,这样就可以接着调用自己的方法增加条件了,不用一个语句一个语句的分开写了(具体看下面Action层中的调用)

(3)下面一个方法的主要作用是判断是否要去拼接where语句,这么做的原因是因为界面的条件是多个,用户可能不全部选择,那么就需要在Action中判断了,if(xxx) 调用拼接;所以这么做就可以直接一路调用下来,不用在Action中if判断了

(4)同理orderby也是如此,这里就不列出了,此次条件查询不需排序。

得到hql语句的方法:

(5)得到查询总记录条数的hql语句和参数列表的语句:

三:

(1)在Action中,声明界面传递过来的属性,实现get、set方法

(2)构造一个QueryHelp对象,如下图:(就是这里可以通过"."就可以调用自己的方法了),

要得到PageBean对象将QueryHelp对象作为参数传递过去即可

(3)这里可以进一步优化,因为每个Action中都需要service调用getPageBean()方法,然后将得到的PageBean对象放到栈顶。所以可以将其抽取到QueryHepler类中,直接写个方法就完成此功能。

如下图:

所以这里直接一路下来就可以得到分页的信息并将其放到了栈顶。完毕。

四:总结

至此分页相关的代码优化基本差不多了,之后再写分页的操作将会非常的容易而且不易出错。

时间: 2024-08-03 23:44:54

javaEE 分页功能最终代码优化(二)的相关文章

如何用angularjs制作一个完整的表格之二__表格分页功能

接上一次,这次主要介绍表格分页功能,由于项目需要这个案例是关于前端分页的方式,现在很少会这么用了,但如有需要可以参考其中的思路 html: 1.通过UL来展示页标,其中每个页标的li是通过异步加载从获取到不同的表格数据来动态生成的. <div class="pagination"> <ul style="float:right"> <li id="previous"><a href=""

MVC5+EF6 (附加分页功能)

我们对之前的Views à Account à Index.cshtml 进行修改以完成今天的示例. 界面样式修改前: 下面对Views à Account à Index.cshtml进行如下修改: 应用布局页 _LayoutAdmin.cshtml 2. 将HTML部分body之外的全部删掉,只留下正文内容,运行这个页面. 对样式做一些小调整,最终变成如下样式. (调整样式的步骤略,大家可以直接查看源码) 通过Create New 新建两条测试数据,为后面分页做准备,后面每3条分一页. 目前

Ecmall系统自带的分页功能

在Ecmall的二次开发中,分页是必不可少的.这个系统已经自带了分页功能,下面来看看如何使用这个分页. 下面是一个自定义的类,用于查看订单的详细情况.关键在于get_order_data()这个方法,分页的使用也在这个方法的内部了.应该有的注释都有了,应该会比较容易懂,我不就多说了. <?php define('NUM_PER_PAGE', 15); // 每页显示数量 class NowaMagicApp extends MallbaseApp { public function index(

jsp、js分页功能的简单总结

一.概述 首先,我们要明确为何需要分页技术,主要原因有以下: 1.分页可以提高客户体验度,适当地选择合适的数据条数,让页面显得更有条理,使得用户体验感良好,避免过多数据的冗余. 2.提高性能的需要.分页技术,有选择的加载某部分数据,在数据量较大的时候,分部分加载数据.显示数据,可以有效提高程序的性能,当然,单纯的js的分页技术并没有这种效果. 所以,分页技术是web技术中比较常用的技术,而下面讨论的主要是两种分页技术:一种是jsp的分页技术,其读取数据分批次读取,操作页数跳转的时候才加载相应页面

基于asp.net + easyui框架,一步步学习easyui-datagrid——实现分页和搜索(二)

http://blog.csdn.net/jiuqiyuliang/article/details/19967031 目录: 基于asp.net + easyui框架,一步步学习easyui-datagrid——界面(一) 基于asp.net + easyui框架,一步步学习easyui-datagrid——实现分页和搜索(二) 基于asp.net + easyui框架,一步步学习easyui-datagrid——实现添加.编辑.删除(三) 基于asp.net + easyui框架,一步步学习e

JDBC使用数据库来完成分页功能

本篇讲诉如何在页面中通过操作数据库来完成数据显示的分页功能.当一个操作数据库进行查询的语句返回的结果集内容如果过多,那么内存极有可能溢出,所以在大数据的情况下分页是必须的.当然分页能通过很多种方式来实现,而这里我们采用的是操作数据库的方式,而且在这种方式中,最重要的是带限制条件的查询SQL语句: select name from user limit m,n 其中m与n为数字.n代表需要获取多少行的数据项,而m代表从哪开始(以0为起始),例如我们想从user表中先获取前五行数据项(1-5)的na

Mybatis Generator实现分页功能

Mybatis Generator实现分页功能 分类: IBATIS2013-07-17 17:03 882人阅读 评论(1) 收藏 举报 mybatisibatisgeneratorpage分页 众所周知,Mybatis本身没有提供基于数据库方言的分页功能,而是基于JDBC的游标分页,很容易出现性能问题.网上有很多分页的解决方案,不外乎是基于Mybatis本机的插件机制,通过拦截Sql做分页.但是在像Oracle这样的数据库上,拦截器生成的Sql语句没有变量绑定,而且每次语句的都要去拦截,感觉

自己做过分页功能吗?我们一起打造自己的分页控件

一.概述 这些日子在做一套系统,基本上告了一段落,其中包括分页相关的功能. 主要涉及:Url分页和Ajax 分页.而基本上开发中所用到的就这两种,当然有其他的方式,我们就不说了. 为什么会谈及这两种分页呢,原因如下 ajax 分页用户体验好,性能更好. Url 分页对于搜索引擎友好. 而做的这套系统两方面都需要,故此重新设计了分页方案.自认目前十分灵活便捷的分页控件. 二.效果预览 三.ajax分页的使用方式 说明:在配置分页参数的时候,smallPageUrl 表示加载每页内容的地址. 后台代

简单封装分页功能pageView.js

分页是一个很简单,通用的功能.作为一个有经验的前端开发人员,有义务把代码中类似这样公共的基础性的东西抽象出来,一来是改善代码的整体质量,更重要的是为了将来做类似的功能或者类似的项目,能减少不必要的重复工作量.在实际项目中,尤其是网站类型的项目中,分页部分的设计总是个性化比较强,基本上都不会长的一样,所以可能之前抽象出来的东西,如果写的不够灵活的话,对这些个性化强的项目来说,可能直接应用的时候也得做些调整才行.本文尝试提供一个尽量满足这两方面要求的分页组件. 先介绍下写这个东西的背景:一直以来,我