mybatis-plus分页查询

本文详细讲述了一个分页查询的实现:

mybatis配置类:

import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
​​

/**
 * @Description: mybatis配置
 * @Date: 2023-02-28
 */


@Configuration
public class MybatisConfig {
    /**
     * Mybatis分页插件
     *
     * @return 分页插件
     */
    @Bean
    public PaginationInterceptor paginationInterceptor() {
        PaginationInterceptor paginationInterceptor = new PaginationInterceptor();
        // 分页大小为-1时,查询所有数据
        paginationInterceptor.setLimit(-1);
        return paginationInterceptor;
    }
}

Dao层相关类:

//Dao层站点实体类
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;

/**
 * @Description: site实体
 * @date 2023-08-07 11:30
 */
@Data
@TableName("p_site")
public class SiteEntity {

    @TableId(type = IdType.AUTO)
    private Integer siteId;

    private String siteLongitude;

    private String siteLatitude;

    private String siteName;

    private Integer status;
}


// Dao层interface

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.pingalax.dao.site.entity.SiteEntity;
import org.apache.ibatis.annotations.Mapper;

/**
 * @Description: 站点dao层
 * @date 2023-08-07 11:31
 */
@Mapper
public interface SiteDao extends BaseMapper<SiteEntity> {
}

Biz层相关类:

/**
 * @Description: 站点相关实现类
 * @date 2023-08-07 11:22
 */
@Component
@Transactional
@Slf4j
public class SiteBizImpl implements SiteBiz {
    @Autowired
    private SiteDao siteDao;

    @Override
    public PageResult<SiteBo> querySitesPage(QuerySitePageBo querySitePageBo) {
        LambdaQueryWrapper<SiteEntity> lambdaQueryWrapper = new LambdaQueryWrapper<>(SiteEntity.class);
        lambdaQueryWrapper.eq(querySitePageBo.getStatus() != null, SiteEntity::getStatus, querySitePageBo.getStatus());
        IPage<SiteEntity> siteEntityIPage = siteDao.selectPage(PageUtil.createPage(querySitePageBo), lambdaQueryWrapper);
        return ResultUtil.convert(siteEntityIPage, SiteBo.class);
    }

}



public interface SiteBiz {
    /**
     * 分页查找site
     *
     * @return
     */
    PageResult<SiteBo> querySitesPage(QuerySitePageBo querySitePageBo);

}



@Data
public class SiteBo implements Serializable {
    private Integer siteId;

    private String siteLongitude;

    private String siteLatitude;

    private String siteName;

    private Integer status;
}


@Data
@EqualsAndHashCode(callSuper = true)
public class QuerySitePageBo extends BasePage {
    private Integer status;
}


/**
 * @Description: 分页基础信息
 * @date 2023-08-09 8:56
 */
@Getter
@Setter
public class BasePage {
    @ApiModelProperty(value = "当前页数(默认值为1)",required = true)
    @NotNull(message = "当前页数不能为空")
    @Min(value = 1L,message = "当前页数必须大于等于1")
    private Long pageIndex;


    @ApiModelProperty(value = "每页大小(默认值为10)",required = true)
    @NotNull(message = "页码大小不能为空")
    @Min(value = -1L,message = "当前页数必须大于等于-1")
    private Long pageSize;
}



/**
 * @author zhouxiaotao
 * @Description: 创建分页对象
 * @date 2023-08-09 9:26
 */
public class PageUtil {
    public static <T> Page<T> createPage(BasePage basePage){
        return new Page<>(basePage.getPageIndex(), basePage.getPageSize());
    }
}

/**
 * @Description: PageInfo实体
 * @date 2023-08-08 13:16
 */
@Data
@NoArgsConstructor
public class PageInfo implements Serializable {
    private Long pageIndex;
    private Long pageSize;
    private Long totalRecord;
    private Long totalPage;
}


/**
 * @Description: 分页返回结果
 * @date 2023-08-08 13:07
 */
public class PageResult<T> extends Result implements Serializable {
    // 页面信息
    private PageInfo pageInfo;
    //返回数据
    private List<T> data;

    public PageResult() {
    }

    public PageInfo getPageInfo() {
        return pageInfo;
    }

    public void setPageInfo(PageInfo pageInfo) {
        this.pageInfo = pageInfo;
    }

    public List<T> getData() {
        return data;
    }

    public void setData(List<T> data) {
        this.data = data;
    }
}



/**
 * @Description: 返回结果
 * @date 2023-08-08 9:35
 */
public class ResultUtil {
    /**
     * 转换为分页返回结果
     *
     * @param page   分页数据
     * @param tClass 对象
     * @param <T>    对象类型
     * @param <E>    数据类型
     * @return 分页结果
     */
    public static <T, E> PageResult<T> convert(IPage<E> page, Class<T> tClass) {
        return ResultUtil.convert(page, tClass, null);
    }

    /**
     * 转换为分页返回结果
     *
     * @param page            分页数据
     * @param tClass          对象
     * @param convertFunction 转换方法
     * @param <T>             对象类型
     * @param <E>             数据类型
     * @return 分页结果
     */
    public static <T, E> PageResult<T> convert(IPage<E> page, Class<T> tClass, ResultConvertFunction<E, T> convertFunction) {
        PageResult<T> pageResult = new PageResult<>();
        // 创建返回数据
        List<T> data = new ArrayList<>();
        if (CollUtil.isNotEmpty(page.getRecords())) {
            for (E record : page.getRecords()) {
                T convertRecord = BeanUtil.copyProperties(record, tClass);
                if (convertFunction != null) {
                    convertFunction.convert(record, convertRecord);
                }
                data.add(convertRecord);
            }
        }
        pageResult.setData(data);
        PageInfo pageInfo = new PageInfo();
        pageInfo.setPageIndex(page.getCurrent());
        pageInfo.setPageSize(page.getSize());
        pageInfo.setTotalPage(page.getPages());
        pageInfo.setTotalRecord(page.getTotal());
        pageResult.setPageInfo(pageInfo);
        pageResult.setCode(ResultCode.SUCCESS.getCode());
        pageResult.setDesc(ResultCode.SUCCESS.getDesc());
        return pageResult;
    }

}


Controller层相关类:

@Data
@ApiModel("分页查询站点请求参数")
@EqualsAndHashCode(callSuper = true)
public class QuerySitePageRequest extends BasePage {
    @ApiModelProperty(value = "站点状态")
    private Integer status;
}


@Slf4j
@RestController
@Api(value = "站点管理", tags = "站点管理")
@RequestMapping("/pingalax/basic/site")
public class SiteController {
    @Autowired
    private SiteBiz siteBiz;

    @ApiOperation("通过条件查询站点列表(分页)")
    //@Cacheable(value = "PageResult<Site>",key = "#querySitePageRequest")
    @ResponseBody
    @PostMapping("/selectSiteByPage")
    public PageResult<Site> selectSiteByPage(@RequestBody @Valid QuerySitePageRequest querySitePageRequest){
        PageResult<SiteBo> siteBoPageResult = siteBiz.querySitesPage(BeanUtil.copyProperties(querySitePageRequest, QuerySitePageBo.class));
        return ResultUtil.convert(siteBoPageResult, Site.class);
    }

}


第一次写博客,自己记录一下,自己的实际开发过程。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
mybatis-plus 是基于 mybatis 的增强工具,提供了很多方便实用的功能,其中包括分页查询分页查询通常用于处理海量数据时,对数据进行分页展示,以优化系统性能。 使用 mybatis-plus 进行分页查询需要注意以下几点: 1. 在 mapper 接口中定义方法时需要使用 IPage<T> 类型的参数,其中 T 为实体类。 2. 在 service 层调用 mapper 中的分页查询方法时,需要传入当前页数和每页显示的数量,可以通过 Page<T> 对象来实现。 3. 在 mapper 映射文件中使用 select 标签进行查询,需要按照 mybatis-plus 提供的语法结构来书写,主要包括表名、查询条件、分页条件等。 例如,以下是使用 mybatis-plus 进行分页查询的一个示例: 在 mapper 中定义方法: ``` public interface UserMapper extends BaseMapper<User> { IPage<User> selectUserByPage(Page<?> page, @Param("username") String username); } ``` 在 service 中实现分页查询: ``` @Override public IPage<User> getUserByPage(int pageNum, int pageSize, String username) { // 创建分页对象 Page<User> page = new Page<>(pageNum, pageSize); // 调用 mapper 方法进行分页查询 return userMapper.selectUserByPage(page, username); } ``` 在 mapper 映射文件中编写查询语句: ``` <select id="selectUserByPage" resultMap="userResultMap"> select * from user <where> <if test="username != null and username != ''"> and username like concat('%', #{username}, '%') </if> </where> order by id desc </select> ``` 通过以上步骤,就可以实现在 mybatis-plus 中进行分页查询并展示数据。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值