SpringBoot和MybatisPlus分页

本章既然说到分页了肯定会提一些分页重要的物理分页和逻辑分页(内存分页)

物理分页:

 一般物理分页,即通过sql语句分页,都是在sql语句后面添加limit分页语句,在xml文件里传入分页的参数,再多配置一条sql,用于查询总数.

我们可以不用limit用高级一点的方式,使用拦截器拦截所有需要分页的查询语句,并且利用获取到的分页相关参数统一在sql语句后面加上limit分页的相关语句

MybatisPuls就是利用了拦截器进行对SQL语句处理实现了物理分页

逻辑分页:

逻辑分页是我们一次性查询出全部数据放在以及集合里,也就是内存中如果数据量大会内存溢出.数据库返回的不是分页结果,而是全部数据,然后在通过代码获取分页数据,根据索引获取指定范围的数据。

 

物理分页针对于查询量大而使用,不占内存资源 

逻辑分页对于查询量小使用不重复向数据库读取减小服务器压力

不看理论直接跳到这里

实现的方式很简单我们在上一章的基础上进行操作,如果看不懂或者想复制代码,查看上一章连接: SpringBoot和mybatisplus的入门使用

1.整理好entity层和dao层

本章要使用的实体类和Dao,

entity

package com.yunhe.mybatisplusdemo.entity;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;

@Data
@TableName("users")
public class User {

    @TableId(value = "id", type = IdType.AUTO)
    private int id;

    @TableField(value = "name",el = "用户的名称")
    private String name;

    @TableField("password")
    private String password;
}

Dao

(1).使用注解或者xml都可以

(2).继承不继承BaseMapper都可以

package com.yunhe.mybatisplusdemo.dao;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yunhe.mybatisplusdemo.entity.User;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;
import org.springframework.stereotype.Repository;

import java.util.List;

@Repository
@Mapper
public interface UserDao extends BaseMapper {

    @Select("select * from users")
    List selectAllUser(Page page);
}

2.使用SpringBoot的方式配置分页插件

@EnableTransactionManagement   启注解事务管理,等同于xml配置方式的

@Configuration  定义配置类,可替换xml配置文件,被注解的类内部包含有一个或多个被@Bean注解的方法

@MapperScan  扫描dao层接口

package com.yunhe.mybatisplusdemo.config;

import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.transaction.annotation.EnableTransactionManagement;

@EnableTransactionManagement
@Configuration
@MapperScan("com.yunhe.mybatisplusdemo.dao")
public class MybatisPlusConfig {

    /**
     * 分页插件
     */
    @Bean
    public PaginationInterceptor paginationInterceptor() {
        return new PaginationInterceptor();
    }
}

3.编写Test类说明都写在了注释上

package com.yunhe.mybatisplusdemo;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yunhe.mybatisplusdemo.dao.UserDao;
import com.yunhe.mybatisplusdemo.entity.User;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

import javax.annotation.Resource;
import java.util.List;

@RunWith(SpringRunner.class)
@SpringBootTest
public class MybatisplusdemoApplicationTests {

//    依赖注入UserDao
    @Resource
    UserDao userDao;

    @Test
    public void contextLoads() {

        Page page = new Page<>();
//        设置当前第几页
        page.setCurrent(1);
//        设置每页显示条数
        page.setSize(2);
//        把page传到方法内进行分页
        List users = userDao.selectAllUser(page);
//        获取总共分了几页
        page.getPages();
//        获取总条数
        page.getTotal();
        for (User user : users) {
            System.out.println(user);
        }

    }

}

如果我们想查看是否实现了物理分页需要在application文件加上

logging.level.com.yunhe.mybatisplusdemo.dao=debug

红色部分是包名选择自己的dao层即可

下面是在控制台打印的SQL语句以及结果

SpringBoot和MybatisPlus分页_第1张图片

 

你可能感兴趣的:(MYSQL,java,Springboot,数据库,mybatisplus,mysql,Springboot,mybatisplus,分页)