欢迎访问悦橙教程(wld5.com),关注java教程。悦橙教程  java问答|  每日更新
页面导航 : > > 文章正文

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

来源: javaer 分享于  点击 7534 次 点评:49

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


目录
  • MyBatis-Plus分页接口实现教程:Spring Boot中如何编写分页查询
    • MyBatis-Plus 简介
    • Spring Boot 简介
    • 实现步骤
      • 1. 添加 MyBatis-Plus 依赖
      • 2. 配置分页插件
      • 3. 创建服务层接口
      • 4. 创建控制器
      • 5. 运行应用并测试
      • 6.全部代码
  • 结语

    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分页接口的资料请关注3672js教程其它相关文章!

    您可能感兴趣的文章:
    • springboot mybatis-plus实现登录接口
    • SpringBoot+MyBatis-Plus实现分页功能
    • SpringBoot整合mybatis-plus实现分页查询功能
    • SpringBoot结合mybatis-plus实现分页的项目实践
    • oracle+mybatis-plus+springboot实现分页查询的实例
    相关栏目:

    用户点评