当前位置: 代码网 > it编程>编程语言>Java > SpringBoot中使用MyBatis-Plus实现分页接口的详细教程

SpringBoot中使用MyBatis-Plus实现分页接口的详细教程

2024年05月18日 Java 我要评论
mybatis-plus分页接口实现教程:spring boot中如何编写分页查询mybatis-plus 是一个 mybatis 的增强工具,在 mybatis 的基础上只做增强不做改变,为简化开发

mybatis-plus分页接口实现教程:spring boot中如何编写分页查询

mybatis-plus 是一个 mybatis 的增强工具,在 mybatis 的基础上只做增强不做改变,为简化开发、提高效率而生。它提供了强大的分页插件,可以轻松实现分页查询的功能。在 spring boot 项目中使用 mybatis-plus 可以大大简化分页逻辑的编写。本文将介绍如何在 spring boot 项目中使用 mybatis-plus 实现分页接口。

mybatis-plus 简介

mybatis-plus(简称 mp)是 mybatis 的一个增强工具,在 mybatis 的基础上只做增强不做改变,为简化开发、提高效率而生。它提供了代码生成器、分页插件、性能分析插件、全局通用操作、metaobject 等一系列功能,使得 mybatis 变得更加易用。

spring boot 简介

spring boot 是 spring 的一个模块,用于简化新 spring 应用的初始搭建以及开发过程。spring boot 旨在简化配置,通过约定大于配置的原则,提供了大量的默认配置,使得开发者能够快速启动和部署 spring 应用。

实现步骤

1. 添加 mybatis-plus 依赖

在 pom.xml 文件中添加 mybatis-plus 的依赖:

        <!--mybatis-plus-->
        <dependency>
            <groupid>com.baomidou</groupid>
            <artifactid>mybatis-plus-boot-starter</artifactid>
            <version>3.5.3.1</version>
        </dependency>

springboot只能使用3.1.5及以下版本!!!

2. 配置分页插件

在 spring boot 的配置类中添加分页插件的配置:

import com.baomidou.mybatisplus.annotation.dbtype;
import com.baomidou.mybatisplus.extension.plugins.mybatisplusinterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.paginationinnerinterceptor;
import org.mybatis.spring.annotation.mapperscan;
import org.springframework.context.annotation.bean;
import org.springframework.context.annotation.configuration;

@configuration
//@mapperscan("com.example.demo.mapper")
public class mybatisplusconfig {

    /**
     * 新增分页拦截器,并设置数据库类型为mysql
     *
     * @return
     */
    @bean
    public mybatisplusinterceptor mybatisplusinterceptor() {
        mybatisplusinterceptor interceptor = new mybatisplusinterceptor();
        interceptor.addinnerinterceptor(new paginationinnerinterceptor(dbtype.mysql));
        return interceptor;
    }
}

3. 创建服务层接口

创建一个服务层接口,用于定义分页查询的方法:

@service
public class userserviceimpl implements userservice {

    @autowired
    private usermapper usermapper;

    @override
    public result listpageuser(@requestparam integer page, @requestparam integer pagesize) {
        //分页参数
        page<userentity> rowpage = new page<>(page, pagesize);
        //querywrapper组装查询where条件
        lambdaquerywrapper<userentity> querywrapper = new lambdaquerywrapper<>();
        rowpage = usermapper.selectpage(rowpage, querywrapper);
        return result.success("数据列表", rowpage);
    }
}

4. 创建控制器

创建一个控制器,用于处理 http 请求并调用服务层的分页查询方法:

@restcontroller
@requestmapping("/user")
public class usercontroller {

    @autowired
    private userserviceimpl userserviceimpl;

    @postmapping("/listpage")
    @operation(summary = "列表分页")
    public result listpageuser(@requestparam integer page, @requestparam integer pagesize) {
        return userserviceimpl.listpageuser(page, pagesize);
    }
}

5. 运行应用并测试

启动 spring boot 应用,并通过 postman 或其他 api 测试工具发送 post 请求到 /user/listpage 端点,传递 page 和 pagesize 参数,即可测试分页查询功能。

6.全部代码

import com.alibaba.excel.easyexcel;
import com.baomidou.mybatisplus.core.conditions.query.lambdaquerywrapper;
import com.baomidou.mybatisplus.core.conditions.query.querywrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.page;
import com.example.common.req.idparam;
import com.example.common.resp.result;
import com.example.system.entity.userentity;
import com.example.system.mapper.usermapper;
import com.example.system.resp.loginresp;
import com.example.system.service.userservice;
import io.swagger.v3.oas.annotations.operation;
import io.swagger.v3.oas.annotations.tags.tag;
import jakarta.servlet.http.httpservletresponse;
import jakarta.servlet.http.httpsession;
import org.springframework.beans.factory.annotation.autowired;
import org.springframework.validation.annotation.validated;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.multipartfile;

import java.io.ioexception;
import java.io.inputstream;
import java.net.urlencoder;
import java.nio.charset.standardcharsets;
import java.text.simpledateformat;
import java.time.localdatetime;
import java.time.format.datetimeformatter;
import java.util.date;
import java.util.list;
import java.util.locale;
import java.util.objects;

/**
 * <p>
 * 用户表 前端控制器
 * </p>
 *
 * @author he
 * @since 2024-03-23
 */
@tag(name = "用户")
@restcontroller
@requestmapping("/userentity")
public class usercontroller {

    @autowired
    private usermapper usermapper;
    @autowired
    private userservice userservice;
    private final string id = "user_id";
    simpledateformat sdf = new simpledateformat("yyyy-mm-dd hh:mm:ss");

    @operation(summary = "列表")
    @postmapping("/list")
    public result listuser() {
        return result.success("数据列表", userservice.list());
    }

    @operation(summary = "存在")
    @postmapping("/exist")
    public result existuser(@requestbody @validated idparam param) {
        querywrapper<userentity> wrapper = new querywrapper<>();
        wrapper.eq(id.tolowercase(locale.root), param.getid());
        long count = userservice.count(wrapper);
        if (count == 0) return result.success("id不存在", false);
        return result.success("id已存在", true);
    }

    @operation(summary = "保存")
    @postmapping("/insert")
    public result insertuser(@requestbody @validated userentity param) {
        querywrapper<userentity> wrapper = new querywrapper<>();
        wrapper.eq(id.tolowercase(locale.root), param.getid());
        if (userservice.count(wrapper) != 0) return result.failure("id已存在", sdf.format(new date()));
        if (userservice.save(param)) return result.success("保存成功", sdf.format(new date()));
        return result.failure("保存失败", sdf.format(new date()));
    }

    @operation(summary = "删除")
    @postmapping("/delete")
    public result deleteuser(@requestbody @validated idparam param) {
        querywrapper<userentity> wrapper = new querywrapper<>();
        wrapper.eq(id.tolowercase(locale.root), param.getid());
        if (userservice.count(wrapper) == 0) return result.failure("id不存在", param.getid());
        if (userservice.remove(wrapper)) return result.success("删除成功", param.getid());
        return result.failure("删除失败", param.getid());
    }

    @operation(summary = "修改")
    @postmapping("/update")
    public result updateuser(@requestbody @validated userentity param) {
        querywrapper<userentity> wrapper = new querywrapper<>();
        wrapper.eq(id.tolowercase(locale.root), param.getid());
        if (userservice.count(wrapper) == 0) return result.failure("id不存在", sdf.format(new date()));
        if (userservice.updatebyid(param)) return result.success("修改成功", sdf.format(new date()));
        return result.failure("修改失败", sdf.format(new date()));
    }

    @operation(summary = "查询")
    @postmapping("/select")
    public result selectuser(@requestbody @validated idparam param) {
        querywrapper<userentity> wrapper = new querywrapper<>();
        wrapper.eq(id.tolowercase(locale.root), param.getid());
        if (userservice.count(wrapper) == 0) return result.failure("id不存在", param.getid());
        return result.success(userservice.getone(wrapper));
    }

    @operation(summary = "查询byacc")
    @postmapping("/selectbyacc/{param}")
    public result selectuserbyacc(@pathvariable @validated string param) {
        querywrapper<userentity> wrapper = new querywrapper<>();
        string acc = "user_acc";
        wrapper.eq(acc.tolowercase(locale.root), param);
        if (userservice.count(wrapper) == 0) return result.failure("账号不存在", sdf.format(new date()));
        return result.success(userservice.getone(wrapper));
    }

    @operation(summary = "列表分页")
    @postmapping("/listpage")
    public result listpageuser(@requestparam integer page, @requestparam integer pagesize) {
        //分页参数
        page<userentity> rowpage = new page(page, pagesize);
        //querywrapper组装查询where条件
        lambdaquerywrapper<userentity> querywrapper = new lambdaquerywrapper<>();
        rowpage = usermapper.selectpage(rowpage, querywrapper);
        return result.success("数据列表", rowpage);
    }

    @operation(summary = "导出数据")
    @postmapping("exportexcel")
    public void exportexceluser(httpservletresponse response) throws ioexception {
        response.setcontenttype("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
        response.setcharacterencoding("utf-8");
        string filename = urlencoder.encode("轮播图", standardcharsets.utf_8).replaceall("\\+", "%20");
        list<userentity> list = userservice.list();
        response.setheader("content-disposition", "attachment;filename*=" + filename + ".xlsx");
        easyexcel.write(response.getoutputstream(), userentity.class).sheet("轮播图").dowrite(list);
    }

    @operation(summary = "导入数据")
    @postmapping("/importexcel")
    public result importexceluser(multipartfile file) {
        try {
            //获取文件的输入流
            inputstream inputstream = file.getinputstream();
            list<userentity> list = easyexcel.read(inputstream) //调用read方法
                    //注册自定义监听器,字段校验可以在监听器内实现
                    //.registerreadlistener(new userlistener())
                    .head(userentity.class) //对应导入的实体类
                    .sheet(0) //导入数据的sheet页编号,0代表第一个sheet页,如果不填,则会导入所有sheet页的数据
                    .headrownumber(1) //列表头行数,1代表列表头有1行,第二行开始为数据行
                    .doreadsync();//开始读excel,返回一个list<t>集合,继续后续入库操作
            //模拟导入数据库操作
            for (userentity entity : list) {
                userservice.saveorupdate(entity);
            }
            return result.success("导入成功", sdf.format(new date()));
        } catch (ioexception exception) {
            throw new runtimeexception(exception);
        }
    }

}

结语

通过上述步骤,我们在 spring boot 项目中使用 mybatis-plus 实现了一个分页查询接口。mybatis-plus 提供的分页插件极大地简化了分页逻辑的编写,使得开发者能够更专注于业务逻辑的实现。通过学习和实践,你可以更深入地理解 mybatis-plus 和 spring boot 的强大功能,以及如何将它们应用到实际的开发工作中。

以上就是springboot中使用mybatis-plus实现分页接口的详细教程的详细内容,更多关于springboot mybatis-plus分页接口的资料请关注代码网其它相关文章!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com