欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Mybatis-Plus 多表联查分页的实现代码

程序员文章站 2023-12-17 16:50:28
上一节,简单讲述了 mybatis-plus 搭建与使用入门,这一节,简单讲一下如何使用 mp 实现多表分页。 分析 使用的工程,依旧是 spring-boot,关...

上一节,简单讲述了 mybatis-plus 搭建与使用入门,这一节,简单讲一下如何使用 mp 实现多表分页。

分析

使用的工程,依旧是 spring-boot,关于分页,官网给出了一个单表的,其实多表分页实现原理相同,都是通过 mybatis 的拦截器

(拦截器做了什么?他会在你的 sql 执行之前,为你做一些事情,例如分页,我们使用了 mp 不用关心 limit,拦截器为我们拼接。我们也不用关心总条数,拦截器获取到我们 sql 后,拼接 select count(*) 为我们查询总条数,添加到参数对象中)。

实现

1. 配置拦截器

@enabletransactionmanagement
@configuration
@mapperscan("com.web.member.mapper")
public class mybatisplusconfig {
  /**
   * mybatis-plus sql执行效率插件【生产环境可以关闭】
   */
  @bean
  public performanceinterceptor performanceinterceptor() {
    return new performanceinterceptor();
  }

  /*
   * 分页插件,自动识别数据库类型 多租户,请参考官网【插件扩展】
   */
  @bean
  public paginationinterceptor paginationinterceptor() {
    return new paginationinterceptor();
  }
}

2. mapper 接口以及 xml

/**
 * <p>
 * 用户表 mapper 接口
 * </p>
 *
 * @author 殷天文
 * @since 2018-06-01
 */
public interface usermapper extends basemapper<user> {

  list<userlistmodel> selectuserlistpage(pagination page ,@param("user") userlistbean user);
  
}

这里要注意的是,这个 pagination page 是必须要有的,否则 mp 无法为你实现分页。

  <select id="selectuserlistpage" resulttype="com.web.member.model.userlistmodel">
    select
      *
    from
      ftms_user u
    left join ftms_user_level l on u.level_id = l.id
    where 1=1
      <if test="user.nickname != null">
        and u.nickname like "%"#{user.nickname}"%" 
      </if>
  </select>

3. service 实现

import com.web.member.beans.admin.userlistbean;
import com.web.member.entity.user;
import com.web.member.mapper.usermapper;
import com.web.member.model.userlistmodel;
import com.web.member.service.userservice;
import com.baomidou.mybatisplus.plugins.page;
import com.baomidou.mybatisplus.service.impl.serviceimpl;

import org.springframework.stereotype.service;
import org.springframework.transaction.annotation.transactional;

/**
 * <p>
 * 用户表 服务实现类
 * </p>
 *
 * @author 殷天文
 * @since 2018-06-01
 */
@service
public class userserviceimpl extends serviceimpl<usermapper, user> implements userservice {

  @transactional(readonly=true)
  @override
  public page<userlistmodel> selectuserlistpage(userlistbean user) {
    page<userlistmodel> page = new page<>(user.getcurr(), user.getnums());// 当前页,总条数 构造 page 对象
    return page.setrecords(this.basemapper.selectuserlistpage(page, user));
  }
  
}

最后将结果集 set 到 page 对象中,page 对象的 json 结构如下

{
  "total": 48,//总记录
  "size": 10,//每页显示多少条
  "current": 1,//当前页
  "records": [//结果集 数组
    {...},
    {...},
    {...},
     ...
  ],
  "pages": 5 // 总页数
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

上一篇:

下一篇: