码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2016-04-01 18:31:41      阅读:208      评论:0      收藏:0      [点我收藏+]

标签:

上次进行了分页代码的优化(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 分页功能最终代码优化(二)

标签:

原文地址:http://blog.csdn.net/u013082989/article/details/51030984

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!