使用mybatis分页插件
1. jar包和依赖:
jsqlparser-0.9.5.jar(sql 解析工具)
1
2
3
4
5
6<!--sql 解析工具依赖,配合分页使用-->
<dependency>
<groupId>com.github.jsqlparser</groupId>
<artifactId>jsqlparser</artifactId>
<version>0.9.5</version>
</dependency>
pagehelper-5.1.2.jar
1
2
3
4
5
6<!--myBatis分页插件 -->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>5.1.2</version>
</dependency>
2. spring配置文件
ApplicatonContext.xml的sqlSessionFactory里配置一个载入插件的属性,名为plugins,用array来配置多个插件。
增加一个插件(拦截器),用
标签 用bean,class为pagehelper的jar包中的PageInterceptor类。
- 此类中有个名为properties的属性,使用value对其赋值
value内填写:helperDialect=mysql(设置连接的是什么数据库,如mysql、Oracle)
如:
1
2
3
4
5
6
7
8
9
10
11
12
13
14<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<property name="plugins">
<array>
<bean class="com.github.pagehelper.PageInterceptor">
<property name="properties">
<value>
helperDialect=mysql
</value>
</property>
</bean>
</array>
</property>
</bean>
3. Controller
在你需要进行分页的 MyBatis 查询方法前调用 PageHelper.startPage 静态方法即可,该方法需要两个参数pageNum、pageSize,紧跟在这个方法后的第一个MyBatis 查询方法会被进行分页。
1 | //request: url?pageNum=1&pageSize=10 |
使用:
1 | /** 使用pagehelper+PageInfo进行分页查询 */ |
4. 什么时候会导致不安全的分页?
1 | //获取第1页,10条内容,默认查询总数count |
这种情况下由于 param1 存在 null 的情况,就会导致 PageHelper 生产了一个分页参数,但是没有被消费,这个参数就会一直保留在这个线程上。当这个线程再次被使用时,就可能导致不该分页的方法去消费这个分页参数,这就产生了莫名其妙的分页。
上面这个代码,应该写成下面这个样子:
1 | List<Country> list; |
这种写法就能保证安全。
5. 跳转页面过界
如果你分页插件使用于类似分页查看列表式的数据,如新闻列表,软件列表, 你希望用户输入的页数不在合法范围(第一页到最后一页之外)时能够正确的响应到正确的结果页面, 那么你可以配置 reasonable 为 true,这时如果 pageNum<=0 会查询第一页,如果 pageNum>总页数 会查询最后一页。
1 | <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> |
使用easyUI
1. 启用easyui-datagrid
easyui-datagrid下设置:pagination:true
显示分页菜单:

整体代码如:
1 | <!--数据网络--> |
2. 参数解析
easyUI会向后台发送两个参数,page和rows:

传参形式为:

而后台不仅需要给easyUI传递json格式的查询结果,而且还需要传递total和rows:

3. easyUI配合controller的增删改查
- 添加:
- Controller:
1 | (value = "/InsertBypage") |
- Service:
1 |
|
- html&Js
1 | <%--easyUI按钮,增删改查工具条,iconCls是图标,plain:true是按钮3d感?--%> |