使用mybatis plus的@Select自定义sql时,如何实现通用的分页查询?

Mybatis-Plus中的查(select)和 Wrapper条件构造器-详解 V2.0 Mybatis-Plus中 select 查询方法和 Wrapper 条件构造器的-使用。 阅读详情
AI摘要

本文介绍在MyBatis Plus中用自定义SQL实现通用分页查询的方法。步骤包括配置分页插件、定义实体类、定义Mapper接口、实现分页查询服务和调用分页查询方法。还对各步骤进行了解释,如分页插件是拦截器,Mapper接口可自动处理分页逻辑等。

在 MyBatis Plus 中使用 @Select 自定义 SQL 实现通用的分页查询,可按以下步骤操作:

1. 配置分页插件

首先,需要在项目中配置 MyBatis Plus 的分页插件。以 Spring Boot 项目为例,在配置类中添加分页插件的 Bean:

import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class MyBatisPlusConfig {

    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor() {
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
        interceptor.addInnerInterceptor(new PaginationInnerInterceptor());
        return interceptor;
    }
}

2. 定义实体类

假设我们有一个 User 实体类:

import com.baomidou.mybatisplus.annotation.TableName;

@TableName("user")
public class User {
    private Long id;
    private String name;
    private Integer age;

    // 构造函数、Getter 和 Setter 方法
    public User() {}

    public User(Long id, String name, Integer age) {
        this.id = id;
        this.name = name;
        this.age = age;
    }

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}

3. 定义 Mapper 接口

在 Mapper 接口中使用 @Select 注解编写自定义 SQL,并接收 Page 对象作为参数:

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.apache.ibatis.annotations.Select;

public interface UserMapper extends BaseMapper<User> {

    @Select("SELECT * FROM user WHERE age > #{age}")
    IPage<User> selectUserByAge(Page<User> page, Integer age);
}

4. 实现分页查询服务

在服务层调用 Mapper 接口的方法进行分页查询:

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class UserService {

    @Autowired
    private UserMapper userMapper;

    public IPage<User> getUserByAgePage(Integer pageNum, Integer pageSize, Integer age) {
        Page<User> page = new Page<>(pageNum, pageSize);
        return userMapper.selectUserByAge(page, age);
    }
}

5. 调用分页查询方法

在控制器或测试类中调用服务层的方法进行分页查询:

import com.baomidou.mybatisplus.core.metadata.IPage;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class UserController {

    @Autowired
    private UserService userService;

    @GetMapping("/users")
    public IPage<User> getUsers(@RequestParam Integer pageNum, @RequestParam Integer pageSize, @RequestParam Integer age) {
        return userService.getUserByAgePage(pageNum, pageSize, age);
    }
}

解释

  • 分页插件配置:MybatisPlusInterceptor 是 MyBatis Plus 的拦截器,PaginationInnerInterceptor 是分页拦截器,用于实现分页功能。
  • Mapper 接口:@Select 注解中的 SQL 是自定义的查询语句,Page 对象作为参数传入,MyBatis Plus 会自动处理分页逻辑。
  • 服务层:创建 Page 对象,设置当前页码和每页记录数,调用 Mapper 接口的方法进行分页查询。
  • 控制器:接收前端传入的页码、每页记录数和查询条件,调用服务层的方法进行分页查询并返回结果。

通过以上步骤,就可以在 MyBatis Plus 中使用 @Select 自定义 SQL 实现通用的分页查询。

MyBatis-Plus分页查询 在实际开发中,对于大量数据的查询,可以通过分页查询的方式来减少查询量和提高查询效率。在 MyBatis-Plus 中,分页查询可以通过使用 Page 对象和 IService 接口提供的分页方法来实现。MyBatis-Plus 的分页插件 PaginationInnerInterceptor 提供了强大的分页功能,支持多种数据库,使得分页查询变得简单高效。 阅读详情

相关推荐

springboot+mybatis(mybatis plus)分页查询

如果你使用 springboot + mybatis plus,因为 mybatis plus 兼容 mybatis,所以即使你使用 mybatis plus 依然可以用如上方法来做分页查询,当然 mybatis plus 既然是 plus,他自己也有分页查询的一些能力,再往下会有 demo。如果你使用 mybatis 但不是 spring 项目,那么你需要首先引入 pagehelper 相关依赖,然后配置 mybatis-config.xml 分页插件,再然后在代码中使用即可。

abcnull 的博客 1675

@Select的使用说明

@Select 注解的使用作用 作用 简便、快速去操作 sql 对一些简单的实现常见操作 sql 的应用: 1、 只需要在 mapper 中方法上加入 @Select(),然后在括号中写入需要实现的 sql 语句即可 例如: @Select(“select \* from Type where id = #{id, jdbcType=LONG} and code= #{code, jdbcType=VARCHAR}”) Type selectTypeById(@Param(“id”) Long id

鳄鱼儿 2万+

mybatis-plus 自定义SQL、一对多、分页查询过滤多租户

前言 这几天在使用的mybatis-plus的时候,在遇见复杂业务的时候遇见的一些租户过滤问题,面对多表关联查询的时候、自定义sql的时候,或者说一对多的时候,其中一个查询等功能过滤过滤租户的解决方案。 在一个缓存命中率不高的场景中,分页很多时候不能依赖主数据分页查询再遍历查询的方式来组装数据的时候,就会遇见自定义sql 或者是一对多查询。这个时候如果用mybatis-plus的多租户就会很有问题。 自定义sql分页查询方法: Mapper.xml <sel...

qq_18537055的博客 3342

MyBatis @Select注解介绍:基本用法与动态SQL拼写

这里写自定义目录标题 @Select注解的目的是为了取代xml中的select标签,只作用于方法上面。下面看一下@Select注解的源码介绍: @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.METHOD) public @interface Select { String[] value(); } 从上述可以看到两点信息: (1)@Select注解只能修饰方法 (2)@Select注解的值是字符数组。 所以,@Select注解的用法

FastText的博客 9万+

MyBatis-plus中@Select注解的参数传递方式:sql.xml 配置参数使用:#{},#param# 不要使用 ${} 此种方式容易出现 SQL 注入

- `@Select`的参数传递 - wrapper自定义sql: 使用条件构造器作为参数

专注于计算机研发知识和资讯分享 3642

Spring Boot进阶(04):震惊!使用MyBatis-Plus,快速实现自定义SQL分页功能!

如何快速实现自定义sql分页?若不会,我便手把手教你!

**My Coding Family** 4671

MyBatis-Plus 分页查询以及自定义sql分页

一、引言 分页查询每个人程序猿几乎都使用过,但是有部分同学不懂什么是物理分页和逻辑分页。 物理分页:相当于执行了limit分页语句,返回部分数据。物理分页只返回部分数据占用内存小,能够获取数据库最新的状态,实施性比较强,一般适用于数据量比较大,数据更新比较频繁的场景。 逻辑分页:一次性把全部的数据取出来,通过程序进行筛选数据。如果数据量大的情况下会消耗大量的内存,由于逻辑分页只需要读取数据库...

贱男 18万+

Dual-stream multiple instance learning networks for tumor detection in Whole Slide Image——论文笔记

关于多示例学习的资料网上比较少,但是在医学图像方面还是有人在应用的。主要是因为一般比较大,几个G都是十分常见的,这么大图片是无法直接训练,一般都会进行切图,所以天然契合多示例学习bag和instance的概念。最近看了一篇论文刚好关于这方面的,所以做下笔记。 github地址:https://github.com/binli123/dsmil-wsi paper:https://arxiv.org/abs/2011.08939 背景知识 在多示例学习(MIL)中,一组训练样本被视为包含多个instance的

weixin_41693877的博客 4170

MyBatis-Plus 之分页查询

MyBatis-Plus 之分页查询 首先创建一个数据库表,如下图所示: 然后创建一个Spring Boot项目,pom.xml和配置如下: <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLoc

kaven 18万+

HyperLedger Fabric实战(一):基础环境构建

简介 本文将介绍从一台裸机上面如何构建出一个可用的Fabric网络(单机版,非测试网络)。 基础环境构建 Fabric组件安装

yindarui 1万+

5G初始注册流程详解(2)-Registration Request

1:了解注册的本质,5G终端为什么要注册? 2:SUCI,SUPI,5G-GUTI的区别? 3:为什么会有COMPLETE REGISTRATION REQUEST呢?

weixin_53220301的博客 3795

Mybatis-Plus:实现自定义SQL

Mybatis-Plus(以下简称MBP)的初衷是为了简化开发,而不建议开发者自己写SQL语句的;但是有时客户需求比较复杂,仅使用MBP提供的Service,Mapper与Wrapper进行组合,难以实现可以需求;这时我们就要用到自定义的SQL了。Java 开发使用 mybatis-plus 来执行 sql 操作,往往比 mybatis 能够省时省力,因为 mybatis-plus 封装了很多常用的接口。但对于一些更为复杂的查询来说,mybatis-plus 也相形见绌,还得需要我们自定义 sql 语句。

拾一二的博客 4万+

Rapid SCADA MQTT

一、配置RapidSCADA 1、准备KpMqtt.dll、Jint.dll库文件,从网盘下载。 2、将以上两个文件拷贝到SCADA安装目录的Comm/KP目录下,如下: C:\SCADA\ScadaComm\KP 3、新建SCADA项目 4、新建Line 5、新建Device 6、拷贝Config目录下的KpMqtt_001.xml文件、KpMqtt_Job.js文件到项目Comm\Config下,如下示例链接 C:\SCADA\Projects\MQTTProject\Instances\Defau

mumanquan1的博客 3007

MyBatis-Plus分页插件:一行代码搞定分页查询

Mapper/*** 自定义分页查询*/// 创建Page对象​// 执行自定义分页查询​// 获取分页结果。

m0_65382359的博客 6984

Vue2 - 实现全景图Vr 720°全景效果查看预览功能,3D全景图流畅不卡顿渲染+手势拖拽+悬浮工具按钮,vue实现vr看720度全景效果方案讲解及示例代码(兼容电脑PC网页+手机H5移动端页面)

vue全景VR图,vue h5实现全景720预览,vue加载720全景图_vue怎么加载vr图片,vue实现vr全景看房,vue2实现全景效果,加载很慢卡怎么办,实现全景预览的插件,vue显示720度全景图,720°全景图显示,在h5中展示720°全景图,浏览全景图,基于vue实现vr全景预览,加载全景图,vue全景预览pannellum插件,vue实现3D全景图,实现720°全景图展示,在VUE 中使用three.js实现全景视频播放,vue项目中使用photo-sphere-viewer实现vr720度

🏆 前端领域优质创作者 3317

SAP Gateway 中事务码 /IWFND/MAINT_SERVICE 的用法介绍

本文系统梳理了SAP Gateway中/IWFND/MAINT_SERVICE事务码的核心功能与运维实践。作为OData服务管理中樞,它支持服务注册激活、ICF节点配置、系统别名绑定、批量处理等关键操作。文章详解了服务目录、ICF节点、系统别名的配置要点,提供了批量激活、缓存清理、性能监控等实用技巧,并针对常见陷阱(如传输配置、删除残留)给出解决方案。通过制造业批量激活、零售业OAuth集成等案例,展示了事务码在企业级应用中的实际价值,为SAP Gateway运维提供了一套完整的治理清单。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 312

MyBatis-plus实现分页查询的封装

1.问题来源我们使用SpringMVC的时候,我们每个Controller都有一个获取分页数据的方法,但是被调用的Service实现了"extends IService<实体类>"的接口,因此分页信息"Page<实体类>"和查询条件都需要在Controller中进行组合,或者是在Controller...

qq_35485206的博客 1122

【光子 AI 】应用 LangGraph 的核心模型和算法原理,完整实现一个极简版的 Agent 开发框架源代码,并给出具体的应用测试实际项目案例

下面给出一个“极简版 LangGraph 风格 Agent 框架”的完整可运行实现:用 有向图 + 状态(State) + 节点(Node) + 条件路由(Conditional Edge) + 循环(Loop) + Checkpoint 这一套核心模型/算法,把 Agent 组织成可编排、可测试的状态机工作流(这正是 LangGraph 的核心抽象之一:以 StateGraph 组织节点,节点读写共享状态,边做路由与循环,并支持持久化/回放)。 参考概念来源:LangGraph 官方文档对 “StateG

AI天才研究院 270

Mybatis-Plus实现分页查询

本人在做项目的时候用到的分页查询,如果你用的也是Mybatis-Plus,分页查询是一个很不错的选择,这篇文章对我有很大的帮助,我把它整理出来,也是为了以后方便回顾。

一个苦命Java码农的博客 1万+

2025华为杯第二十二届中国研究生数学建模竞赛D题:低空湍流监测及最优航路规划 - 完整解题分析+完整MATLAB源码!(上篇)

🎓 本文收录于 《滚雪球学数学建模》专栏,本专栏专注于从零基础出发,带你循序渐进掌握数学建模的核心方法与思维路径。通过“滚雪球式”学习法,从最简单的生活化案例到经典建模工具,再到省赛、国赛真题实战演练,逐步积累知识与技能,帮助你搭建完整的建模体系。无论你是刚接触建模的新生,还是希望提升科研与竞赛能力的学者与工程师,本专栏都将为你提供一条清晰、高效、可实操的建模成长路线,助力你快速进阶,突破难点,迈向数学建模竞赛与实际应用的更高峰 🚀!

**My Coding Family** 2588

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

MybatisPlus自定义SQL查询及分页查询和通用Service的使用

上一篇写的是MybatisPlus之MP注解的使用 (跟上一篇是同一个项目)先来创一个Springboot测试项目 创建一个数据库 -- 创建表 CREATE TABLE t_employee( id INT(11) PRIMARY KEY AUTO_INCREMENT, user_name VARCHAR(50), email VARCHAR(50), gender CH...

th_century17的博客 4451

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

MyBatis-Plus--自定义SQL

本文用实例介绍MybatisPlus如何自定义SQL。

IT利刃出鞘的博客 1万+

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

基于mybatis-plus自定义sql的分页查询返回

概述 mybatis-plus中为我们提供了Page对象进行分页,你可以是BaseMapper中的selectPage方法进行分页返回,进行自定义分页对象返回,减少代码量。 Service类 public PageResult<TbProblem> hotlistByReply(int labelid,int currentPage,int size){ Page<TbProblem> page = new Page<>(currentP

weixin_40598838的博客 5672
上一篇: Element Plus: el-card的内容滚动问题
下一篇: Mybatis plus异常: type `java.time.LocalDateTime` not supported by default
ken_coding
博客等级 码龄4年 239粉丝 69原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值