mybatis-plus 分页 查询 页码控制无效问题

1、spring boot整合mybatis-plus (这里使用的是 3.4.3.1 )

<dependency>
   <groupId>com.baomidou</groupId>
   <artifactId>mybatis-plus-extension</artifactId>
   <version>3.4.3.1</version>
   <scope>compile</scope>
</dependency>

2、配置分页插件

package com.elq.product.config;

import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
 * Created by xqh on 2021/4/2 10:24
 *
 * @Description
 */
@Configuration
public class MybatisPlusConfiguration {
    
    

    /*  旧版本配置 3.2 版本使用,解决分页失效问题
    @Bean
    public PaginationInterceptor paginationInterceptor(){
        return new PaginationInterceptor();
    }*/

    /**
     * 版本 3.4 使用,解决分页失效问题,DbType.MYSQL 为你的数据库类型
     * 新的分页插件,一缓和二缓遵循mybatis的规则,
     * 需要设置 MybatisConfiguration#useDeprecatedExecutor = false 避免缓存出现问题
     */
    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor() {
    
    
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
        interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
        return interceptor;
    }

//    @Bean
//    public ConfigurationCustomizer configurationCustomizer() {
    
    
//        return configuration -> configuration.setUseDeprecatedExecutor(false);
//    }
}

3、yml配置文件

mybatis-plus:
  mapper-locations: classpath:/mapper/**/*.xml
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl #开启sql日志

4、实体类

package com.elq.product.entity;

import com.alibaba.fastjson.annotation.JSONField;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;

import java.io.Serializable;
import java.util.Date;

@Data
@TableName("elq_logs")
public class LogsEntity implements Serializable {
    
    

    //自动生成雪花ID
    private Long snowId;
    //入参时间格式化,如果入参不是pattern="yyyy-MM-dd HH:mm:ss" 定义的类型会报错
    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
    //出参数格式化,pattern = "yyyy-MM-dd HH:mm:ss"
    @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")//jackson注解
    //@JSONField(format = "yyyy-MM-dd HH:mm:ss") //适用于Alibaba fastjson,可以直接在JSON.tostring时进行转义
    private Date createTime;
    private String data;
    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
    @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
    private Date updateTime;
}

5、dao 层

package com.elq.product.dao;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.elq.product.entity.LogsEntity;
import org.apache.ibatis.annotations.Mapper;

@Mapper
public interface LogsDao extends BaseMapper<LogsEntity> {
    
    
}

6、分页查询在实现类中的使用

package com.elq.product.service.impl;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.elq.product.dao.LogsDao;
import com.elq.product.entity.LogsEntity;
import com.elq.product.service.IndexService;
import com.elq.product.utils.SnowFlakeUtil;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.JavaType;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.stereotype.Service;

import java.io.IOException;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import static java.lang.Long.toBinaryString;

@Service("IndexService")
public class IndexServiceImpl extends ServiceImpl<LogsDao, LogsEntity> implements IndexService {
    
    

    public final static ObjectMapper mapper = new ObjectMapper();

    @Autowired(required = false)
    LogsDao logsDao;

    @Override
//    @Cacheable(value="getIndexList",key="#root.method.name",sync=true)
    //分页插件 : https://www.jianshu.com/p/18f5c5881653
    public List<LogsEntity> getIndexList() {
    
    
        //数据库分页获取数据
        Page<LogsEntity> objectPage = new Page<>(3, 20);//获取第3页,取20条
	    QueryWrapper<LogsEntity> objectQueryWrapper = new QueryWrapper<>();
        QueryWrapper<LogsEntity> snow_id = objectQueryWrapper.orderByDesc("snow_id");
        Page<LogsEntity> pageList = this.logsDao.selectPage(objectPage, snow_id);
		
        List<LogsEntity> logsEntities = pageList.getRecords();


//        String s1 = JSON.toJSONString(logsEntities);

        //list对象转字符串***************************
        String s ="";
        try {
    
    
            s = mapper.writeValueAsString(logsEntities);
        } catch (JsonProcessingException e) {
    
    
            e.printStackTrace();
        }

        //json转list对象**********************
        JavaType javaType = getCollectionType(ArrayList.class, LogsEntity.class);
        List<LogsEntity> configList=new ArrayList<>();
        try {
    
    
            configList =  mapper.readValue(s, javaType);//这里不需要强制转换
        } catch (IOException e) {
    
    
            e.printStackTrace();
        }

        return logsEntities;
    }

    @Override
    public String inserts(LogsEntity logsEntity) {
    
    

            // JAVA 实现雪花ID的生成
//            Long uid = SnowFlakeUtil.getUid();
//            logsEntity.setSnowId(uid);
            int insert = this.baseMapper.insert(logsEntity);
//            for (int i = 0; i < 1000; i++) {
    
    
//                logsEntity.setSnowId(Long.valueOf(i));
//                 this.baseMapper.insert(logsEntity);
//            }
//        int insert = this.baseMapper.insert(logsEntity);
        return insert+"";
    }

    // 删除缓存
    @Override
    @CacheEvict(value = "getIndexList",allEntries = true) //删除某个分区下的所有数据
    public String deleteCache() {
    
    
        return "delete Ok";
    }

    /**
     * 获取泛型的Collection Type
     * @param collectionClass 泛型的Collection
     * @param elementClasses 元素类
     * @return JavaType Java类型
     * @since 1.0
     */
    private static JavaType getCollectionType(Class<?> collectionClass, Class<?>... elementClasses) {
    
    
        return mapper.getTypeFactory().constructParametricType(collectionClass, elementClasses);
    }
}

执行语句为这个:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/YL3126/article/details/120967695