原文:https://www.jianshu.com/p/759b6430ed5b

分析

使用的工程,依旧是 spring-boot,关于分页,官网给出了一个单表的 demo,其实多表分页实现原理相同,都是通过 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 // 总页数
}

作者:殷天文
链接:https://www.jianshu.com/p/759b6430ed5b
來源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

Mybatis-Plus 多表联查分页的更多相关文章

  1. Mybatis中多表联查,查询出来的字段出现重名,造成数据异常的解决方法!

    在做一对多出现的问题,引发的思考:当数据库表中,主表的主键id和明细表的中的字段名相同时怎么办?Mybatis进行自动映射赋值的时候会不会出现异常?                      注意:M ...

  2. mybatis.net 多表联查

    mybatis.net针对多表联查,其实不用讲联查出的所有的列全部做一个新的resultMap,我们完全可以通过集成关系来实现,真是上一次说的懒加载,在一定程度上可以提高其性能,但这并不是说懒加载性能 ...

  3. MyBatis-Plus 多表联查+分页

    在写东西的过程中,多表联查和分页功能必不可少.当然,crud也很重要 但是又不想写代码和xml. 通过苦苦的查找.发现MyBatis-Plus一款国产的框架.优化了许多操作 本次主要记录一下,多表联查 ...

  4. 使用Mybatis进行多表联查操作

    (1)增加一个测试数据库shop_order,sql语句如下: CREATE DATABASE `shop_order`; USE `shop_order`; CREATE TABLE `t_user ...

  5. mybatis的多表联查

    多对一连表查询简单记录

  6. sqlserver多表联查分页

    select * from(select H_order.Id ,H_order.userID, ROW_NUMBER() over (order by H_order.Id Desc) as row ...

  7. 使用mybatis多表联查的时候结果异常及springmvc的理解

    今天使用mybatis多表联查的时候,在dos窗口查询时可以出结果集,但是使用mybatis查询的时候最后返回的结果只有最后一个结果 然后研究了半天没弄出来,后来无意中发现添加了最外层从表的ID字段后 ...

  8. Mybatis oracle多表联合查询分页数据重复的问题

    Mybatis oracle多表联合查询分页数据重复的问题 多表联合查询分页获取数据时出现一个诡异的现象:数据总条数正确,但有些记录多了,有些记录却又少了甚至没了.针对这个问题找了好久,最后发现是由于 ...

  9. SQLServer多表联查,多表分页查询

    多表联查: select p.*,s.Sheng , i.Shifrom  [dbo].[ProductRecordInfo]   --表名 p left join [ShengInfo] s on ...

随机推荐

  1. jQuery-属性操着

    jquery属性操作分为属性操作,CSS类操作,HTML代码/文本/值操作 一:属性 使用 说明 例子 attr(name|pro|key,val|fn) 设置或返回被选元素的属性值, # 专门用于做 ...

  2. 【linux】sed -e 's/-//g'

    sed是用来处理文本的 s/正则表达式/替换字符串/    :表示将正则表达式的内容替换为后面的字符串 g    :表示替换全部,即如果不加g,则只会替换第一个 -e    :多点编辑(这个没懂) 例 ...

  3. 【转】MySQL安全配置介绍

    一.前言 很多文章中会说,数据库的权限按最小权限为原则,这句话本身没有错,但是却是一句空话.因为最小权限,这个东西太抽象,很多时候你并弄不清楚具体他需要哪些权限. 现在很多mysql用着root账户在 ...

  4. ORM,DAO,MVC,POJO

    1.ORM 对象关系映射(Object Relational Mapping,简称ORM)是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术. 简单的说,ORM是通过使用描述对象和数据库之间 ...

  5. Linux系统运维笔记(一),查看系统版本和设置系统时间

    Linux系统运维笔记 查看系统版本和设置系统时间 查看系统版本 lsb_release -a (适用于所有的linux,包括Redhat.SuSE.Debian等发行版,但是在debian下要安装l ...

  6. API的防重

    说说API的防重放机制 2017-03-20 18:19 by 轩脉刃, 685 阅读, 7 评论, 收藏, 编辑 说说API的防重放机制 我们在设计接口的时候,最怕一个接口被用户截取用于重放攻击.重 ...

  7. zookeeper集群自动启动脚本

    定义脚本boot.sh启动zookeeper集群(hadoop1,hadoop2,hadoop3) #!/bin/bash echo "start zkServer..." do ...

  8. 016 jquery中html与val得到使用

    1.属性操作 2.设置html . 3.程序(关于html) <!DOCTYPE html> <html> <head> <meta charset=&quo ...

  9. vue在生产环境清除console.log

    在开发环境中我们喜欢用console.log测试代码,但是部署到生产环境我们不可能一个一个把console.log给手动删除了. 在build/webpack.prod.conf.js文件里加上这样一 ...

  10. 洛谷P2261 [CQOI2007] 余数求和 [数论分块]

    题目传送门 余数求和 题目背景 数学题,无背景 题目描述 给出正整数n和k,计算G(n, k)=k mod 1 + k mod 2 + k mod 3 + … + k mod n的值,其中k mod ...