在此博客开始之前,我在项目中增加了国家列表http://localhost:8080/ssm/country/list.do#
展示功能使用的是Datatables,在后端没有做分页,返回所有数据,前端插件Datatables完成了分页、排序、搜索功能。在数据量小的时候可以这么做,但是数据量大的时候就需要自己写分页和搜索了。
我们在这个博客中使用PageHelper完成分页。
Mybatis分页插件 - PageHelper
该插件目前支持以下数据库的物理分页:Oracle、Mysql、MariaDB、SQLite、Hsqldb、PostgreSQL、DB2、SqlServer(2005,2008)、Informix、H2、SqlServer2012。
PageHelper的使用文档。
在现在的项目中引入Mybatis分页插件。
首先,使用Maven引入PageHelper的jar包。
pom.xml
接着,修改spring-mybatis的配置文件中的sqlSessionFactory。
spring-mybatis.xml
最后,在service中调用:
CountryServiceImpl.java
这里使用的静态方法PageHelper.startPage
调用,紧跟在这个方法后的第一个Mybatis查询方法会被进行分页。
这时PageHelper就引入到项目中了。
现在增加一个按照搜索、排序、页面参数查找国家的函数。
先增加查询sql:
CountryMapper.xml
CountryMapper.java
再增加service层的调用:
ICountryService.java
实现如下:
CountryServiceImpl.java
最后在controller中增加:
CountryController.java
以待使用。其中iDisplayStart
当前展示开始记录序号、iDisplayLength
每页展示条数、sSearch
搜索词、iSortCol_0
排序字段编号、sSortDir_0
排序类型、iTotalRecords
记录总条数、aaData
返回数据集、iTotalDisplayRecords
当前展示记录数,是准备给datatables使用的。下面开始介绍Datatables服务器处理。
Datatables服务器处理
现在Data Tables一次性获取所有数据,当数据量比较小的时候,这时是很高效的。当数据量比较大的时候,Datatables就会比较慢,这时因为渲染和创建dt、tr、td要花费时间。为了解决这个问题Datatables提供了服务器模式,把本来客户端所做的事情交给服务器去处理,比如 排序,分页,过滤。对于客户端来说这些操作都是比较消耗资源的, 所以打开服务器模式后有再多的数据也不用怕了。
当你打开服务器模式的时候,每次绘制表格的时候,Datatables会给服务器发送一个请求(包括当前分页,排序,搜索等等)。Datatables会发向 服务器发送大量的变量去执行所需要的处理,然后在服务器拼好相应的数据返回给Datatables。
我们在country/list.jsp
的基础上进行修改,删除tbody
部分,开启服务器模式需要使用serverSide
、processing
、sAjaxSource
、columns
。
最后配置如下:
CountryController.java
然后访问http://localhost:8080/ssm/country/page_list.do
就可以了。
碎碎念
-
修改了侧边栏,但是没有做定位和自动生成。
-
datatables的可选参数很多,可以去官网看,也可以在这里查询,总结的比较全。可以再增加每个列的搜索、搜索的模糊匹配等功能,暂时这个项目中先不做了。
-
有两个不错的datatables的Demo,一个是DataTables –Serverside Processing,做了一个比较通用DataTables响应例子,参数很全。还有一个是Datatable Server Side Processing Using Java,在评论区有项目源码地址,还有一个youtube上的视频。
-
源码参考
-
暂且先写到这里吧,Mybatis通用Mapper3、Tomcat连接池、Spring-Security、plupload、EasyMock、Memcached/Redis、Lucene/Solr先放一放,可能要等一段时间再添加了。