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分页接口的资料请关注代码网其它相关文章!
发表评论