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

2025-05-29 0 100

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

分析

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

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

实现

1. 配置拦截器

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20
@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

?

1

2

3

4

5

6

7

8

9

10

11

12

13
/**

* <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 无法为你实现分页

?

1

2

3

4

5

6

7

8

9

10

11
<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 实现

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30
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 结构如下

?

1

2

3

4

5

6

7

8

9

10

11

12
{

"total": 48,//总记录

"size": 10,//每页显示多少条

"current": 1,//当前页

"records": [//结果集 数组

{...},

{...},

{...},

...

],

"pages": 5 // 总页数

}

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

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

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

快网idc优惠网 建站教程 Mybatis-Plus 多表联查分页的实现代码 https://www.kuaiidc.com/111575.html

相关文章

发表评论
暂无评论