项目地址:https://github.com/VincentLiSH/powerstone
smartpagination的优势:
1、方便扩展:借助“Template Method”设计模式封装了分页逻辑中的固定算法,同时为不同数据访问层技术预留扩展点,因此底层可以采用ORM、iBatis、JDBC等技术访问数据库,甚至可以不是数据库(比如可以是另一个服务的API);
2、提供了Web层的封装简化开发,但并不绑定某种MVC框架;
3、支持复杂查询条件表单、查询结果分页、排序、翻页和排序过程中表单状态记忆;
4、服务器端分页,每次只取出一页数据,不会因数据量大而占用大量内存;
核心的分页逻辑封装在BasePagingController中
https://github.com/VincentLiSH/powerstone/blob/main/SmartPagination/src/org/powerstone/smartpagination/common/BasePagingController.java
附带了一个SpringMVC+Hibernate+JDBC+iBATIS实现的Sample应用,用来演示如何使用此框架。
典型应用代码如下:仅不到40行代码即可实现一个一般分页和一个复杂查询分页功能。
Java代码
- public ModelAndView listHibernate(HttpServletRequest request, HttpServletResponse response) throws Exception {
- BaseHbmPagingController ctrl = new BaseHbmPagingController(baseHibernateDao) {
- @Override
- protected PageInfo<DetachedCriteria, Order> makePageInfo(HttpServletRequest request) {
- HbmPageInfo pi = new HbmPageInfo();
- pi.setCountDistinctProjections("id" );
- pi.setExpression(DetachedCriteria.forClass(UserModel.class ));
- // pi.addOrderByAsc("id");
- return pi;
- }
- };
- ctrl.handleRequest(request, response);
- return new ModelAndView( "userList" , "userList" , BaseHbmPagingController.getPageData(request));
- }
public ModelAndView listHibernate(HttpServletRequest request, HttpServletResponse response)throws Exception {
BaseHbmPagingController ctrl = new BaseHbmPagingController(baseHibernateDao) {
@Override
protected PageInfo<DetachedCriteria, Order> makePageInfo(HttpServletRequest request) {
HbmPageInfo pi = new HbmPageInfo();
pi.setCountDistinctProjections("id");
pi.setExpression(DetachedCriteria.forClass(UserModel.class));
// pi.addOrderByAsc("id");
return pi;
}
};
ctrl.handleRequest(request, response);
return new ModelAndView("userList", "userList", BaseHbmPagingController.getPageData(request));
}
Java代码
- public ModelAndView queryHibernate(HttpServletRequest request,HttpServletResponse response) throws Exception{
- BaseHibernateQueryFormPagingController ctrl = new BaseHibernateQueryFormPagingController() {
- @Override
- protected PageResult findByPageInfo(PageInfo<DetachedCriteria, Order> pi) {
- return baseHibernateDao.findByPage((HbmPageInfo) pi);
- }
- @Override
- protected PageQuery<DetachedCriteria, Order> makePageQuery() {
- return new UserModelQuery();
- }
- };
- ctrl.setCommandClass(UserModel.class );
- ctrl.setCommandName("userModel" );
- ctrl.setFormView("userModelQuery" );
- ctrl.setSuccessView("redirect:/query.htm" );
- ctrl.setPagingDataName("userList" );
- return ctrl.handleRequest(request, response);
- }