0
点赞
收藏
分享

微信扫一扫

Mybatis 分页插件使用

后来的六六 2023-01-28 阅读 181

1、分页插件的使用步骤

需求分析:

我们在前端界面获取用户表的时候,在界面上一次显示出成百上千条数据,用户体验,软件性能都会很糟糕,假设数据库内存储十万条记录,后端一次性返回这么多数据,前端和测试小姐姐会杀了你的。

那么,我们就考虑一次查询,返回可以接收的一组记录数,你好,我好,大家好。

这时候,最好的解决方案,就是分页查询。

1.1 添加依赖

<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>5.2.0</version>
</dependency>

1.2 配置分页插件

在MyBatis的核心配置文件中配置插件

<plugins>
<!--设置分页插件-->
<plugin interceptor="com.github.pagehelper.PageInterceptor"></plugin>
</plugins>

1.3 分页插件的使用:

我们运用动态Sql 给t_user 表中插入100条数据

 /**
     * 利用动态sql 批量插入数据
     */

    int insertBatch(@Param("users") List<User> users);

 

<!--   int insertBatch(List<User> users);-->
    <insert id="insertBatch" useGeneratedKeys="true" keyProperty="id">
        insert into t_user values
        <foreach collection="users" item="user" separator=",">
            (null,#{user.userName},#{user.passWord},#{user.age},#{user.gender},#{user.email})
        </foreach>
    </insert>
 @Test
    public void testInsertBatch(){
        UserMapper mapper = SqlSessionUtil.getMapper(UserMapper.class);
        List<User> users = new ArrayList<>();

        for(int i=0;i<100;i++){
            User user = new User("user"+i //username
                    , UUID.randomUUID().toString().substring(0,6) // password
                    ,i //age
                    ,i%2==0?"男":"女" //gender
                    ,i+"@gmail.com"); //email
            users.add(user);
        }
        int i = mapper.insertBatch(users);
        System.out.println("添加了 "+i+" 行记录");
    }


    /**
     * 测试密码生成器
     */
    @Test
    public void testRandom(){
        //方案1
        String str = UUID.randomUUID().toString().substring(0, 7);
        System.out.println(str);

        //方案2
        String source = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
        Random random = new Random();
        StringBuffer flag = new StringBuffer();
        for(int j=0;j<6;j++){
            flag.append(source.charAt(random.nextInt(62))); //随机数产生10以内的任何一个数字,代表stringbuff下标
        }
        System.out.println(flag.toString());
    }

    /**
     * 分页测试
     */
    @Test
    public void testLimitPages(){
        UserMapper mapper = SqlSessionUtil.getMapper(UserMapper.class);
        PageHelper.startPage(2,10);
        List<User> users = mapper.getUserLimitPage();
        System.out.println(users);

        PageInfo<User> pageInfo = new PageInfo<>(users, 5);
        System.out.println(pageInfo);
    }

}

 

数据库插入成功

 

分页查询测试:

     /**
     * 分页查询
     * 你也可以根据条件去查询

     */
   List<User> getUserLimitPage();
<!--  分页查询-->
<!--    getUserLimitPage-->
    <select id="getUserLimitPage" resultMap="userMap">
        select * from t_user
    </select>


    /**
     * 分页测试
     */
    @Test
    public void testLimitPages(){
        UserMapper mapper = SqlSessionUtil.getMapper(UserMapper.class);
        PageHelper.startPage(2,10);
        List<User> users = mapper.getUserLimitPage();
        System.out.println(users);

        PageInfo<User> pageInfo = new PageInfo<>(users, 5);
        System.out.println(pageInfo);
    }

我们可以看到,当前页码是2,每页显示10条,刚好从第14条开始显示。(起始页码是1 ,注意我的表数据的id ,1后直接就是5)

如果你 pageNum写的是0,它返回一个空的结果集

注意事项:

在查询功能之前使用PageHelper.startPage(int pageNum, int pageSize)开启分页功能

pageNum:当前页的页码

pageSize:每页显示的条数

在查询获取list集合之后,使用PageInfo pageInfo = new PageInfo<>(List list, int navigatePages)获取分页相关数据

list:分页之后的数据

navigatePages:导航分页的页码数

分页相关数据:

pageNum:当前页的页码

pageSize:每页显示的条数

size:当前页显示的真实条数

total:总记录数

pages:总页数

prePage:上一页的页码

nextPage:下一页的页码

isFirstPage/isLastPage:是否为第一页/最后一页

hasPreviousPage/hasNextPage:是否存在上一页/下一页

navigatePages:导航分页的页码数

navigatepageNums:导航分页的页码,[1,2,3,4,5]

_______________________________________________________________________________________________

代码仓库地址:

GitHub - Chai-Feng/git-demo01

举报

相关推荐

0 条评论