ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

实现手动分页和自动分页

2022-03-21 21:06:06  阅读:204  来源: 互联网

标签:插件 分页 pageSize int 手动 自动 user pageInfo


怎么设计分页

每页有多少个

当前是在第几页

数据的总数

数据列表

基于这些属性设计分页的实体类

@Data

public class PageInfo<T> {

    /**

     * 每页有多少个

     */

    private int pageSize;

    /**

     * 当前是在第几页

     */

    private int currentPage;

    /**

     * 数据的总数

     */

    private int total;

    /**

     * 数据列表

     */

    private List<T> list;

    

    // 获取偏移量

    public int getOffset() {

        return (this.currentPage - 1) * this.pageSize;

    }

}

三、实现分页功能

创建分页查询的方法

/**

     * 分页查询

     *

     * @param user     查询条件

     * @param offset   起始位置

     * @param pageSize 每页容量

     * @return 用户列表

     */

    List<User> page(@Param("user") User user, @Param("offset") int offset, @Param("pageSize") int pageSize);

    /**

     * 统计总数

     *

     * @param user 查询条件

     * @return 总数

     */

    int count(@Param("user") User user);

    <select id="page" resultType="User">

        select *

        from t_user

        <where>

            <if test="user.nickname != null and user.nickname != ''">

                and nickname like concat('%',#{user.nickname},'%')

            </if>

            <if test="user.username != null and user.username != ''">

                and username = #{user.username}

            </if>

        </where>

        limit #{offset},#{pageSize};

    </select>

    <select id="count" resultType="int">

        select count(*)

        from t_user

        <where>

            <if test="user.nickname != null and user.nickname != ''">

                and nickname like concat('%',#{user.nickname},'%')

            </if>

            <if test="user.username != null and user.username != ''">

                and username = #{user.username}

            </if>

        </where>

    </select>

测试

    @Test

    public void page(){

        PageInfo<User> pageInfo = new PageInfo<User>();

        pageInfo.setCurrentPage(1);

        pageInfo.setPageSize(10);

        User user = new User();

        user.setNickname("尚云");

        // 加上筛选条件,根据nickname 或 username进行筛选

        List<User> list = userMapper.page(user,pageInfo.getOffset(),pageInfo.getPageSize());

        pageInfo.setList(list);

        pageInfo.setTotal(userMapper.count(user));

        System.out.println(pageInfo);

    }

四、分页插件

MyBatis 分页插件 PageHelper

1. 引入依赖

 <dependency>

            <groupId>com.github.pagehelper</groupId>

            <artifactId>pagehelper</artifactId>

            <version>5.2.0</version>

        </dependency>

2. 配置拦截器

在mybatis的配置文件中增加插件

<!--

    plugins在配置文件中的位置必须符合要求,否则会报错,顺序如下:

    properties?, settings?,

    typeAliases?, typeHandlers?,

    objectFactory?,objectWrapperFactory?,

    plugins?,

    environments?, databaseIdProvider?, mappers?

-->

<plugins>

    <!-- com.github.pagehelper为PageHelper类所在包名 -->

    <plugin interceptor="com.github.pagehelper.PageInterceptor">

        <!-- 使用下面的方式配置参数,后面会有所有的参数介绍 -->

        <property name="param1" value="value1"/>

</plugin>

</plugins>

3. 配置插件

https://pagehelper.github.io/docs/howtouse/#2-%E9%85%8D%E7%BD%AE%E6%8B%A6%E6%88%AA%E5%99%A8%E6%8F%92%E4%BB%B6

4. 使用插件

    @Test

    public void testList() throws IOException {

        SqlSession session = MybatisUtils.openSession();

        User condition = new User();

        // 插件里提供的分页工具,在要查询之前,执行一下PageHelper.startPage(当前页数,每页的容量), 当使用工具时候,会导致懒加载失败

        // 加了这个操作,插件就会在sql语句中拼接limit限制,并且还会统计总个数

        PageHelper.startPage(1,5);

        List<User> users = session.getMapper(IUserMapper.class).list(condition);

        // 拿到结果之后通过PageInfo.of() 的方法,获得pageInfo

        com.github.pagehelper.PageInfo<User> list = com.github.pagehelper.PageInfo.of(users);

        System.out.println(users);

    }

标签:插件,分页,pageSize,int,手动,自动,user,pageInfo
来源: https://blog.csdn.net/m0_60600640/article/details/123645827

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有