内存分页和数据库分页

内存分页和数据库分页

内存分页:

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)

在查询方法中添加 pageNumpageSize 的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>