javaEE 分页功能最终代码优化

Posted 莫失莫忘Lawlite

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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类中,直接写个方法就完成此功能。

如下图:


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



四:总结

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




以上是关于javaEE 分页功能最终代码优化的主要内容,如果未能解决你的问题,请参考以下文章

JavaEE——ajax的代码实例

JavaEE——ajax的代码实例

EF 分页查询优化

javaEE SSH框架 BaseAction的抽取以及其他方面代码优化

MySQL 百万级分页优化(Mysql千万级快速分页)

MySQL 千万数据量深分页优化, 拒绝线上故障!