javaEE 分页功能最终代码优化(二)
来源:互联网 发布:淘宝自动登录怎么取消 编辑:程序博客网 时间:2024/06/07 07:27
上次进行了分页代码的优化(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 分页功能代码优化(一)
- 分页功能(二)
- 优化redis 分页(二)
- JAVAEE分页功能实现ver1.0
- [javaEE]JSP+Servlet+Mysql实现图片上传和分页显示(后续还会更新功能)
- JavaEE事务(二)
- JavaEE-- 分页
- SQLServer分页功能性能优化
- 分享:Hibernate+Struts分页代码(二)
- smarty实现分页代码(二)
- mongodb查询分页优化(二)
- mongodb查询分页优化(二)
- 用ajax实现分页 删除功能(二)
- 实现iPhone电子书的分页显示功能(附代码)
- 实现iPhone电子书的分页显示功能(附代码)
- Delphi代码优化(二) 整数篇
- java代码优化编程(二)
- 使用System.arraycopy()实现数组之间的复制
- android开发之Service的使用
- eclipse快捷键
- 个人总结
- 忙完之后要仔细看的东西
- javaEE 分页功能最终代码优化(二)
- 01-maven开发环境搭建
- c++第二次实验
- C++: How is the process of function calling in C++
- 2016-03-31深入理解SqlSession
- python之邮件操作
- Android事件分发机制
- C++作业2:距离
- 设计模式之创造者模式 Builder