您的位置:首页 > 编程语言 > Java开发

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

2016-03-31 23:55 253 查看
上次进行了分页代码的优化(/article/9978913.html),但是不足之处就是在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类中,直接写个方法就完成此功能。

如下图:






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






四:总结

至此分页相关的代码优化基本差不多了,之后再写分页的操作将会非常的容易而且不易出错。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: