内存分页:
Mybatis
提供了一个 RowsBounds
对象来进行简单的内存分页
RowBounds rb = new RowBounds(0, 10)
这种方法是将全部数据查询出来缓存到内存中,接着在内存中进行
分页逻辑(数据量少时使用,数据量大时不推荐因为可能会造成内存溢出)
案例
在接口添加 RowsBounds
对象,这样 Mybatis
会自动识别并进行分页
但是由于这些操作是在内存中进行的,所以当数据量大时内存的需求量也会很大
List<City> listCity(City city, RowBounds rowBounds);
数据库分页:
原生:
只能适配指定数据库
插件PageHelper
使用PageHelper分页,这种分页方式是物理分页,PageHelper插件会根据当前使用的数据库类型动态
生成相应的分页语句,因为在编写sql时无需考虑分页的sql方言,使用@Param注解标识当前页(pageNum)和每页显示记录数(pageSize)
在查询方法中添加 pageNum
和 pageSize
的Integer的形参并且添加 @Param(值为形参名称)
注解用于插件识别分页参数,但是需要在其他形参上添加 @Param(识别形参的值)
用于在SQL语句中识别对应形参
mybatis.xml中插件配置
<!-- 插件配置 -->
<plugins>
<!-- 配置PageHelper分页插件 -->
<!-- PageInterceptor(分页拦截器),
主要将原来的sql语句进行拦截处理,根据当前使用的数据库类型
动态生成相应的分页语句-->
<plugin interceptor="com.github.pagehelper.PageInterceptor">
<!-- 指定数据库方言 -->
<property name="helperDialect" value="mysql"/>
<!-- 启用分页参数的注解支持-->
<property name="supportMethodsArguments" value="true"/>
<!-- 分页合理化-->
<property name="reasonable" value="true"/>
</plugin>
</plugins>
案例
List<City> listCity2(@Param("c") City city, @Param("pageNum") Integer pageNum, @Param("pageSize") Integer pageSize);
<!-- 使用@Param注解绑定查询参数,或者使用下标(param1,param2) -->
<select id="listCity2" resultType="city">
select city_id as cityId, city_name as cityName,
city_code as cityCode, province from city_info
<where>
<if test="c.province != null and c.province != ''">
province = #{c.province}
</if>
</where>
</select>