MyBatis-Plus分页插件使用,自带分页及xml分页的使用

项目结构

配置文件

import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * @author miemie
 * @since 2018-08-10
 */
@Configuration
@MapperScan("com.example.demo.fr.mapper")
public class MybatisPlusConfig {

    /**
     * 分页插件
     */
    @Bean
    public PaginationInterceptor paginationInterceptor() {
        return new PaginationInterceptor();
    }
}
  • UserMapper.java 方法内容
    import com.baomidou.mybatisplus.core.metadata.IPage;
    import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
    import com.example.demo.fr.entity.User;
    import com.baomidou.mybatisplus.core.mapper.BaseMapper;
    import com.example.demo.fr.model.MyPage;
    import com.example.demo.fr.model.ParamSome;
    import org.apache.ibatis.annotations.Param;
    
    /**
     * <p>
     *  Mapper 接口
     * </p>
     *
     * @author fr
     * @since 2019-01-24
     */
    public interface UserMapper extends BaseMapper<User> {
    
        /**
         * <p>
         * 查询 : 根据state状态查询用户列表,分页显示
         * 注意!!: 如果入参是有多个,需要加注解指定参数名才能在xml中取值
         * </p>
         *
         * @param page 分页对象,xml中可以从里面进行取值,传递参数 Page 即自动分页,必须放在第一位(你可以继承Page实现自己的分页对象)
         * @return 分页对象
         */
        public IPage<User> selectPageVo(Page page);
    
    }
    UserService.java 方法内容
    import com.baomidou.mybatisplus.core.metadata.IPage;
    import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
    import com.example.demo.fr.entity.User;
    import com.baomidou.mybatisplus.extension.service.IService;
    import org.springframework.stereotype.Service;
    
    import java.util.List;
    
    /**
     * <p>
     *  服务类
     * </p>
     *
     * @author fr
     * @since 2019-01-24
     */
    public interface UserService extends IService<User> {
        public IPage<User> selectUserPage(Page<User> page);
    }
    
    UserServiceImpl.java 方法内容
    import com.baomidou.mybatisplus.core.metadata.IPage;
    import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
    import com.example.demo.fr.entity.User;
    import com.example.demo.fr.mapper.UserMapper;
    import com.example.demo.fr.service.UserService;
    import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Service;
    
    /**
     * <p>
     *  服务实现类
     * </p>
     *
     * @author fr
     * @since 2019-01-24
     */
    @Service
    public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {
        @Autowired
        private UserMapper userMapper;
        @Override
        public IPage<User> selectUserPage(Page<User> page) {
            // 不进行 count sql 优化,解决 MP 无法自动优化 SQL 问题,这时候你需要自己查询 count 部分
            // page.setOptimizeCountSql(false);
            // 当 total 为非 0 时(默认为 0),分页插件不会进行 count 查询
            // 要点!! 分页返回的对象与传入的对象是同一个
            return userMapper.selectPageVo(page);
        }
    }

    分页使用model类

  • import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
    import lombok.Data;
    import lombok.EqualsAndHashCode;
    import lombok.experimental.Accessors;
    
    /**
     * @author miemie
     * @since 2018-08-10
     */
    @Data
    @Accessors(chain = true)
    @EqualsAndHashCode(callSuper = true)
    public class MyPage<T> extends Page<T> {
        private static final long serialVersionUID = 5194933845448697148L;
    
        private Integer selectInt;
        private String selectStr;
    
        public MyPage(long current, long size) {
            super(current, size);
        }
    }
    package com.example.demo.fr.model;
    
    import lombok.AllArgsConstructor;
    import lombok.Data;
    import lombok.NoArgsConstructor;
    
    /**
     * @author miemie
     * @since 2018-09-20
     */
    @Data
    @NoArgsConstructor
    @AllArgsConstructor
    public class ParamSome {
    
        private Integer yihao;
        private String erhao;
    }
    
    Controller层测试类
  • import com.alibaba.fastjson.JSON;
    import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
    import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
    import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
    import com.baomidou.mybatisplus.core.metadata.IPage;
    import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
    import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
    import com.example.demo.fr.entity.User;
    import com.example.demo.fr.mapper.UserMapper;
    import com.example.demo.fr.model.MyPage;
    import com.example.demo.fr.model.ParamSome;
    import com.example.demo.fr.service.UserService;
    import ikidou.reflect.TypeBuilder;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.web.bind.annotation.PostMapping;
    import org.springframework.web.bind.annotation.RequestMapping;
    
    import org.springframework.web.bind.annotation.RestController;
    
    import java.util.List;
    
    /**
     * <p>
     *  前端控制器
     * </p>
     *
     * @author fr
     * @since 2019-01-24
     */
    @RestController
    @RequestMapping("/fr/user")
    public class UserController {
        @Autowired
        private UserMapper userMapper;
        @Autowired
        private UserService userService;
     
        @PostMapping("/page")
        public void tes1t1s11() {
            System.out.println("----- baseMapper 自带分页 ------");
            Page<User> page = new Page<>(1, 5);
            IPage<User> userIPage = userMapper.selectPage(page, new QueryWrapper<User>());
    //        Assert.assertSame(page, userIPage);
            System.out.println("总条数 ------> " + userIPage.getTotal());
            System.out.println("当前页数 ------> " + userIPage.getCurrent());
            System.out.println("当前每页显示数 ------> " + userIPage.getSize());
            print(userIPage.getRecords());
            System.out.println("----- baseMapper 自带分页 ------");
    
            System.out.println("json 正反序列化 begin");
            String json = JSON.toJSONString(page);
            Page<User> page1 = JSON.parseObject(json, TypeBuilder.newInstance(Page.class).addTypeParam(User.class).build());
            print(page1.getRecords());
            System.out.println("json 正反序列化 end");
    
            System.out.println("----- 自定义 XML 分页 ------");
            MyPage<User> myPage = new MyPage<User>(1, 5).setSelectInt(20).setSelectStr("Jack");
            ParamSome paramSome = new ParamSome(20, "Jack");
            IPage<User> userMyPage = userService.selectUserPage(myPage);
            System.out.println("总条数 ------> " + userMyPage.getTotal());
            System.out.println("当前页数 ------> " + userMyPage.getCurrent());
            System.out.println("当前每页显示数 ------> " + userMyPage.getSize());
            print(userMyPage.getRecords());
            System.out.println("----- 自定义 XML 分页 ------");
        }
        private <T> void print(List<T> list) {
            if (!CollectionUtils.isEmpty(list)) {
                list.forEach(System.out::println);
            }
        }
    }
    

    xml

  • <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
    <mapper namespace="com.example.demo.fr.mapper.UserMapper">
        <select id="selectPageVo" resultType="com.example.demo.fr.entity.User">
             SELECT *  FROM user
        </select>
    </mapper>
    

    数据库表结构及数据

  • /*
    Navicat MySQL Data Transfer
    
    Source Server         : 47.98.144.196
    Source Server Version : 50724
    Source Host           : 47.98.144.196:3306
    Source Database       : test
    
    Target Server Type    : MYSQL
    Target Server Version : 50724
    File Encoding         : 65001
    
    Date: 2019-01-31 17:13:30
    */
    
    SET FOREIGN_KEY_CHECKS=0;
    
    -- ----------------------------
    -- Table structure for role
    -- ----------------------------
    DROP TABLE IF EXISTS `role`;
    CREATE TABLE `role` (
      `id` bigint(20) NOT NULL,
      `roleName` varchar(255) DEFAULT NULL,
      `roleDescribe` varchar(255) DEFAULT NULL,
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    
    -- ----------------------------
    -- Records of role
    -- ----------------------------
    INSERT INTO `role` VALUES ('1', '1', '1');
    INSERT INTO `role` VALUES ('2', '2', '2');
    INSERT INTO `role` VALUES ('3', '3', '3');
    INSERT INTO `role` VALUES ('4', '4', '4');
    
    -- ----------------------------
    -- Table structure for test
    -- ----------------------------
    DROP TABLE IF EXISTS `test`;
    CREATE TABLE `test` (
      `id` int(15) NOT NULL,
      `name` varchar(255) DEFAULT NULL,
      `tel` varchar(255) DEFAULT NULL,
      `sex` varchar(255) DEFAULT NULL,
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    
    -- ----------------------------
    -- Records of test
    -- ----------------------------
    INSERT INTO `test` VALUES ('1', '2', '3', '4');
    
    -- ----------------------------
    -- Table structure for user
    -- ----------------------------
    DROP TABLE IF EXISTS `user`;
    CREATE TABLE `user` (
      `id` bigint(50) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
      `name` varchar(30) DEFAULT '' COMMENT '姓名',
      `age` int(11) DEFAULT NULL COMMENT '年龄',
      `email` varchar(50) DEFAULT NULL COMMENT '邮箱',
      `role_id` bigint(50) DEFAULT NULL,
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB AUTO_INCREMENT=20 DEFAULT CHARSET=utf8;
    
    -- ----------------------------
    -- Records of user
    -- ----------------------------
    INSERT INTO `user` VALUES ('1', 'mp', '3', 'ab@c.c', '1');
    INSERT INTO `user` VALUES ('2', 'Jack', '20', 'test2@baomidou.com', '2');
    INSERT INTO `user` VALUES ('3', 'Tom', '28', 'test3@baomidou.com', '3');
    INSERT INTO `user` VALUES ('4', 'Sandy', '21', null, '4');
    INSERT INTO `user` VALUES ('5', 'Billie', '24', 'test5@baomidou.com', '1');
    INSERT INTO `user` VALUES ('6', 'Jone', '18', 'test1@baomidou.com', '2');
    INSERT INTO `user` VALUES ('7', 'Jack', '20', 'test2@baomidou.com', '3');
    INSERT INTO `user` VALUES ('8', 'Tom', '28', 'test3@baomidou.com', '4');
    INSERT INTO `user` VALUES ('9', 'Sandy', '21', 'test4@baomidou.com', '1');
    INSERT INTO `user` VALUES ('10', 'Billie', '24', 'test5@baomidou.com', '2');
    INSERT INTO `user` VALUES ('11', 'Jone', '18', 'test1@baomidou.com', '3');
    INSERT INTO `user` VALUES ('12', 'Jack', '20', 'test2@baomidou.com', '4');
    INSERT INTO `user` VALUES ('13', 'Tom', '28', 'test3@baomidou.com', '1');
    INSERT INTO `user` VALUES ('14', 'Sandy', '21', 'test4@baomidou.com', '2');
    INSERT INTO `user` VALUES ('15', 'Billie', '24', 'test5@baomidou.com', '3');
    INSERT INTO `user` VALUES ('19', '小羊', '3', 'abc@mp.com', '4');
    

     

  • 参考:https://mp.baomidou.com/guide/page.html

  • 项目源码:https://pan.baidu.com/s/1tNkDVpvD493TNLn1WqXlUg

  •  

  • 10
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
### 回答1: Mybatis-Plus分页件是一个基于Mybatis的分页件,可以方便地实现分页查询功能。使用件,只需要在Mapper接口中定义一个继承BaseMapper的接口,并在方法中使用Page对象进行分页查询即可。 具体使用步骤如下: 1. 引入Mybatis-Plus分页件依赖 在pom.xml文件中添加以下依赖: ``` <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.4.2</version> </dependency> ``` 2. 定义Mapper接口 在Mapper接口中继承BaseMapper,并定义一个方法,使用Page对象进行分页查询。例如: ``` public interface UserMapper extends BaseMapper<User> { List<User> selectUserPage(Page<User> page, @Param("name") String name); } ``` 3. 在Service中调用Mapper方法 在Service中调用Mapper方法,传入Page对象和查询条件,例如: ``` @Service public class UserServiceImpl implements UserService { @Autowired private UserMapper userMapper; @Override public IPage<User> getUserPage(Page<User> page, String name) { return userMapper.selectUserPage(page, name); } } ``` 4. 在Controller中调用Service方法 在Controller中调用Service方法,传入Page对象和查询条件,例如: ``` @RestController @RequestMapping("/user") public class UserController { @Autowired private UserService userService; @GetMapping("/page") public IPage<User> getUserPage(Page<User> page, String name) { return userService.getUserPage(page, name); } } ``` 以上就是Mybatis-Plus分页件的使用步骤。通过使用件,可以方便地实现分页查询功能,提高开发效率。 ### 回答2: Mybatis-Plus是一个基于Mybatis的增强工具,为了提高开发效率和减少重复的CRUD操作而生。其中,Mybatis-Plus分页件是其重要的功能之一,可以帮助开发人员快速的实现数据的分页查询。 Mybatis-Plus分页件的使用非常简单,开发人员只需要在Mybatis-Plus的配置文件中进行一些简单的配置即可。以下是为您提供的Mybatis-Plus分页使用方法: 1.引入依赖:首先我们需要在项目中引入自己构建的mybatis-plus-boot-starter,或者直接在pom.xml中引入Mybatis-Plus对应版本的依赖。 2.配置分页件:在mybatis-plus.yml中配置分页件,如下所示: mybatis-plus: # 配置分页件 configuration: map-underscore-to-camel-case: true log-impl: org.apache.ibatis.logging.stdout.StdOutImpl # 配置 Mybatis-Plus 分页件 plugins: - interceptor: class: com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor 3.配置分页查询:在Mapper接口方法中添加分页参数,在Mapper.xml文件中添加分页查询的具体SQL语句,如下所示: //mapper 接口 public interface YourMapper extends BaseMapper<YourEntity> { IPage<YourEntity> selectPageVo(Page page, @Param("yourEntity") YourEntity yourEntity); } <!-- Mapper.xml --> <select id="selectPageVo" resultType="YourEntityVo"> select {yourEntity.*} from your_entity {yourEntity} where 1=1 <if test="yourEntity.name != null and yourEntity.name!=''"> and yourEntity.name like '%${yourEntity.name}%' </if> </select> 4.使用分页查询:在Service层中使用分页查询,如下所示: @Override public IPage<YourEntity> selectPageVo(Page<YourEntity> page, YourEntity yourEntity) { return this.getBaseMapper().selectPageVo(page, yourEntity); } 使用Mybatis-Plus分页件,不仅可以实现简单的分页查询,而且还可以自定义查询条件、排序方式等。总之,这是一个非常方便和实用的件,可以让开发人员更快地进行数据操作和维护。 ### 回答3: Mybatis-plus 是一款基于 Mybatis 的增强工具包,它提供了很多的快捷操作,其中就包括分页件。使用 Mybatis-plus 分页件可以简化分页操作,提高代码的可读性和可维护性。 使用分页件,需要先引入 Mybatis-plus 的依赖包。在 Spring Boot 中,可以通过 Gradle 或 Maven 的方式引入 Mybatis-plus 相关依赖,例如: ``` groovy dependencies { implementation 'com.baomidou:mybatis-plus-boot-starter:3.4.2' } ``` 在配置文件中加入分页件配置: ``` yml mybatis-plus: page-params: limit: 10 # 每页显示条数 max-limit: 100 # 最大显示条数 overflow: false # 是否溢出 ``` 其中,`limit` 表示每页显示的条数,`max-limit` 表示最大显示的条数,`overflow` 表示是否允许溢出。 在 Mybatis-plus 的 Mapper 接口中定义查询方法时,需要加入 `IPage` 类型的参数,例如: ``` java import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; public interface UserMapper extends BaseMapper<User> { IPage<User> selectPageVo(Page<?> page, UserVo userVo); } ``` 其中,`Page` 类是 Mybatis-plus 中提供的分页对象,`User` 是实体类,`UserVo` 是查询参数,`selectPageVo` 方法就是查询分页方法。 在 Service 层中调用 Mapper 中定义的分页方法: ``` java @Service public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService { @Override public IPage<User> selectPageVo(UserVo userVo) { Page<User> page = new Page<>(); page.setCurrent(userVo.getCurrentPage()); page.setSize(userVo.getPageSize()); return baseMapper.selectPageVo(page, userVo); } } ``` 在上面的示例中,`Page` 对象中设置了分页参数,`baseMapper` 是继承自 `BaseServiceImpl` 的默认的 Mapper 对象,`selectPageVo` 方法返回分页查询结果。 最后,在 Controller 中调用 Service 方法: ``` java @RestController @RequestMapping("/users") public class UserController { @Autowired private UserService userService; @GetMapping("/page") public IPage<User> selectPageVo(UserVo userVo) { return userService.selectPageVo(userVo); } } ``` 在上面的示例中,`selectPageVo` 方法返回的就是分页查询结果。在前端展示时,可以通过获取到的 `IPage` 对象获取分页信息和查询结果,例如: ```javascript axios.get('/users/page', { params: { currentPage: 1, pageSize: 10, username: 'Tom' } }).then(res => { // 获取分页信息和查询结果 const { current, total, records } = res.data; // ... }); ``` 通过 Mybatis-plus 的分页件,我们不仅可以简化分页操作,还可以通过配置实现一些高级功能,例如性能优化和多租户分页。因此,Mybatis-plus 的分页件是一个非常实用的工具,值得推荐使用
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值