Mybatis-plus 两种分页方法(分单表和联表)

这篇具有很好参考价值的文章主要介绍了Mybatis-plus 两种分页方法(分单表和联表)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

mybatis-plus分别使用

一、PageHelper插件分页使用

准备1:引入PageHelper依赖
			<!-- pagehelper 分页插件 -->
            <dependency>
                <groupId>com.github.pagehelper</groupId>
                <artifactId>pagehelper-spring-boot-starter</artifactId>
                <version>1.4.6</version>
            </dependency>
准备2:新建表格分页数据对象
import lombok.Data;
import java.io.Serializable;
import java.util.List;

/**
 * 表格分页数据对象
 */
@Data
public class TableDataInfo implements Serializable
{
    private static final long serialVersionUID = 1L;

    /** 总记录数 */
    private long total;

    /** 列表数据 */
    private List<?> rows;

    /** 消息状态码 */
    private int code;

    /** 消息内容 */
    private String msg;
}
准备3:分页数据类
import lombok.Data;

/**
 * 分页数据
 */
@Data
public class PageDomain
{
    /** 当前记录起始索引 */
    private Integer pageNum;

    /** 每页显示记录数 */
    private Integer pageSize;

    /** 排序列 */
    private String orderByColumn;

    /** 排序的方向desc或者asc */
    private String isAsc = "asc";

    /** 分页参数合理化 */
    private Boolean reasonable = true;

    public String getOrderBy()
    {
        if (StringUtils.isEmpty(orderByColumn))
        {
            return "";
        }
        return StringUtils.toUnderScoreCase(orderByColumn) + " " + isAsc;
    }
    public String getIsAsc()
    {
        return isAsc;
    }

    public void setIsAsc(String isAsc)
    {
        if (StringUtils.isNotEmpty(isAsc))
        {
            // 兼容前端排序类型
            if ("ascending".equals(isAsc))
            {
                isAsc = "asc";
            }
            else if ("descending".equals(isAsc))
            {
                isAsc = "desc";
            }
            this.isAsc = isAsc;
        }
    }

    public Boolean getReasonable()
    {
        if (StringUtils.isNull(reasonable))
        {
            return Boolean.TRUE;
        }
        return reasonable;
    }

    public void setReasonable(Boolean reasonable)
    {
        this.reasonable = reasonable;
    }
}
准备4:分页工具类
/**
 * 分页工具类
 */
public class PageUtils extends PageHelper
{
    /**
     * 设置请求分页数据
     */
    public static void startPage()
    {
        PageDomain pageDomain = TableSupport.buildPageRequest();
        Integer pageNum = pageDomain.getPageNum();
        Integer pageSize = pageDomain.getPageSize();
        String orderBy = SqlUtil.escapeOrderBySql(pageDomain.getOrderBy());
        Boolean reasonable = pageDomain.getReasonable();
        PageHelper.startPage(pageNum, pageSize, orderBy).setReasonable(reasonable);
    }
}
准备5:响应请求分页数据的方法
	/**
     * 响应请求分页数据
     */
    @SuppressWarnings({ "rawtypes", "unchecked" })
    public TableDataInfo getDataTable(List<?> list)
    {
        TableDataInfo rspData = new TableDataInfo();
        rspData.setCode(HttpStatus.SUCCESS);
        rspData.setMsg("查询成功");
        rspData.setRows(list);
        rspData.setTotal(new PageInfo(list).getTotal());
        return rspData;
    }
正式使用
1、如果只是单表查询,可以用QueryWrapper

controller层

	@GetMapping("/list")
    public TableDataInfo list(Student s)
    {
        PageUtils.startPage();
        List<Student> list = StudentService.selectStudentList(s);
        return getDataTable(list);
    }

在service层新增接口以及实现类的方法

List<Student> selectStudentList(Student s);
	@Override
    public List<Student> selectStudentList(Student s) {
        QueryWrapper<Student> queryWrapper = new QueryWrapper<>();
        // 所有待查询的条件
        if (null != s.getId()) {
            queryWrapper.lambda().eq(Student::getId, Student.getId());
        }
        if (StringUtils.isNotEmpty(s.getStudentName())) {
            queryWrapper.lambda().like(Student::getStudentName, s.getStudentName());
        }
        return kaddOrInfoMapper.selectList(queryWrapper);
    }
2、或者自定义SQL要多表查询,可以自己写方法联表查询

controller层

	@GetMapping("/list")
    public TableDataInfo list(Student s)
    {
        PageUtils.startPage();
        List<Student> list = StudentService.selectStudentList(s);
        return getDataTable(list);
    }

service层忽略,就去调Mapper层方法就行
Mapper接口

List<Student> selectStudentList(Student s);

Mapper.xml

<select id="selectStudentList" resultType="com.StudentDTO">
        SELECT
        c.*,
        s.*
        FROM
        classroom c
        LEFT JOIN student s ON student.id = classroom.student_id
        <where>
            <if test="id != null and id != ''">
                AND s.id = #{id}
            </if>
            <if test="studentName != null and studentName != ''">
                AND s.bu like concat('%', #{studentName}, '%')
            </if>
<!--            <if test="beginTime != null and beginTime != ''">&lt;!&ndash; 开始时间检索 &ndash;&gt;-->
<!--                and date_format(create_time,'%y%m%d') &gt;= date_format(#{beginTime},'%y%m%d')-->
<!--            </if>-->
<!--            <if test="endTime != null and endTime != ''">&lt;!&ndash; 结束时间检索 &ndash;&gt;-->
<!--                and date_format(create_time,'%y%m%d') &lt;= date_format(#{endTime},'%y%m%d')-->
<!--            </if>-->
        </where>
    </select>

二、使用Mybatis-plus自带分页Ipage进行分页

不需要准备,直接正式使用
1、如果只是单表查询,可以用QueryWrapper

controller层

	@GetMapping(value = "/listPage")
    public IPage findListByPage(StudentQO studentQO) {
         return studentService.queryPageList(studentQO);
    }

设置查询参数

	/**
     * 设置查询参数
     * @return
     */
    private QueryWrapper<Student> getQueryParam(StudentQO studentQO) {
        QueryWrapper<KaddPoaOrMatch> queryWrapper = new QueryWrapper<>();
        // 所有待查询的条件
        if (studentQO.getId() != null) {
            queryWrapper.lambda().eq(Student::getId, studentQO.getId());
        }
        if (studentQO.getStudentName() != null) {
            queryWrapper.lambda().like(Student::getStudentName, studentQO.getStudentName());
        }
        return queryWrapper;
    }

service层

@Override
    public IPage queryPageList(StudentQO studentQO) {
        IPage<StudentQO> page = new Page<>(studentQO.getPageNum(),studentQO.getPageSize());
        IPage<StudentQO> iPage = studentMapper.selectPage(page, getQueryParam(studentQO));
        return iPage;
    }

2、或者自定义SQL要多表查询,可以自己写方法联表查询

Mybatis-plus 两种分页方法(分单表和联表)
controller层一样

	@GetMapping(value = "/listPage")
    public IPage findListByPage(StudentQO studentQO) {
         return studentService.queryPageList(studentQO);
    }

service层

@Override
    public IPage queryPageList(StudentQO studentQO) {
        IPage<StudentQO> page = new Page<>(studentQO.getPageNum(),studentQO.getPageSize());
        IPage<StudentQO> iPage = studentMapper.selectStudentList(page, studentQO);
        return iPage;
    }

Mapper接口

IPage<StudentQO> selectStudentList(@Param("iPage") IPage<StudentQO> iPage, @Param("param") StudentQO studentQO);

Mapper.xml文章来源地址https://www.toymoban.com/news/detail-449344.html

<select id="selectStudentList" resultType="com.StudentDTO">
        SELECT
        c.*,
        s.*
        FROM
        classroom c
        LEFT JOIN student s ON student.id = classroom.student_id
        <where>
            <if test="param.id != null and param.id != ''">
                AND s.id = #{param.id}
            </if>
            <if test="param.studentName != null and param.studentName != ''">
                AND s.bu like concat('%', #{param.studentName}, '%')
            </if>
        </where>
    </select>

到了这里,关于Mybatis-plus 两种分页方法(分单表和联表)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Mybatis-Plus手动分页

     TableDataInfo  serviceImpl.selectPageQueryUserList

    2024年02月11日
    浏览(38)
  • mybatis-plus分页方式

    概述 MyBatisPlus中提供的(自带的)分页插件,非常简单,只需要简单的配置就可以实现分页功能。 详细步骤: 第一步::config.MybatisPlusConfig.java:配置类,配置mybatisplus的插件功能。 第二步:验证(测试): 官网介绍: IXxxService.java: XxxServiceImpl.java: XxxController.java 业务(

    2024年02月16日
    浏览(41)
  • MyBatis与MyBatis-Plus的分页以及转换

    MyBatis和MyBatis-Plus都是Java持久化框架,用于简化数据库访问和操作。它们提供了面向对象的方式来管理关系型数据库中的数据。 MyBatis 是一个轻量级的持久化框架,通过XML或注解配置,将SQL语句与Java对象进行映射,使开发者可以使用简单的API来执行数据库操作。MyBatis支持动态

    2024年02月11日
    浏览(52)
  • mybatis-plus实现分页查询

    分页查询使用的方法是: IPage:用来构建分页查询条件 Wrapper:用来构建条件查询的条件,目前我们没有可直接传为Null IPage:返回值,你会发现构建分页条件和方法的返回值都是IPage IPage是一个接口,我们需要找到它的实现类来构建它,具体的实现类,可以进入到IPage类中按ctrl+

    2023年04月08日
    浏览(49)
  • MyBatis-Plus 分页设置不生效

    在配置类上加拦截器 2.当你设置了数据源需要在数据源上添加拦截器

    2024年02月15日
    浏览(44)
  • Mybatis-Plus学习4 Page分页

    ctrl + P = 查看可填的属性类型  alt + 回车 = 自动填充数据类型 1、使用Page分页需要先配置config类,加上拦截器 type-aliasys-package配置pojo对象别名对应的包 自定义的Mapper的page查询: 乐观锁 和 悲观锁 悲观锁: 悲观锁的思想是,在操作数据之前,先假设其他并发操作会对数据进行

    2024年02月12日
    浏览(44)
  • springboot使用Mybatis-plus分页插件

    在  pom.xml   文件中添加 MyBatis Plus 和分页插件的依赖: 注意替换  {mybatis-plus-version}  为对应的版本号。 在 Spring Boot 的配置文件  application.yml   中添加分页插件的配置参数: 注意代码中的注释,其中   PaginationInterceptor  表示使用 MyBatis Plus 提供的分页插件。 在接口层使用

    2024年02月07日
    浏览(43)
  • MyBatis-Plus Page 分页不生效

    一、问题现象 使用 MyBatis-Plus 进行分页查询时,传入了 pageNum 和 pageSize,但是查询结果没有按照预期的效果返回。 二、问题原因 没有对 Mybatis-Puls 进行初始化,需要添加相应的配置类。 三、解决方案 在项目工程中创建 config 目录,在其中新建配置类 MyBatisPlusConfig.java 。 注意

    2024年02月12日
    浏览(42)
  • MyBatis-Plus分页查询(快速上手运用)

    Mybatis-Plus知识点[MyBatis+MyBatis-Plus的基础运用]_心态还需努力呀的博客-CSDN博客   Mybatis-Plus+SpringBoot结合运用_心态还需努力呀的博客-CSDN博客 MyBaits-Plus中@TableField和@TableId用法_心态还需努力呀的博客-CSDN博客 MyBatis-Plus中的更新操作(通过id更新和条件更新)_心态还需努力呀的博

    2024年02月16日
    浏览(50)
  • MyBatis-Plus自定义分页模型

    MyBatis-Plus自带的分页模型Page有些参数,我觉得不是很必要,因此自定义自己的分页模型。该类继承了 IPage 类,实现了简单分页模型如果你要实现自己的分页模型可以继承 Page 类或者实现 IPage 类。因为Java是单继承多实现的,所以我们使用实现IPage接口的方式实现我们自己的分

    2024年02月12日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包