Mybatis-plus实现分页查询

文章介绍了如何在SpringBoot项目中集成Mybatis-Plus,通过配置pom.xml添加依赖,设置数据库连接,创建实体类Teacher,配置MybatisPlusConfig以实现分页功能。在Controller层编写代码实现分页查询,并返回自定义的响应结果R。
摘要由CSDN通过智能技术生成

一.创建springboot项目,配置pom.xml,导入依赖

 <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.4.3</version>
 </dependency>

二.yml中进行相关配置,链接相应数据库

 datasource:
    url: jdbc:mysql://localhost:3306/admin?useUnicode=true&characterEncoding=utf-8&serverTimezone=UTC&useSSL=false
    username: root
    password: 2020
    driver-class-name: com.mysql.cj.jdbc.Driver

三.domain层创建Teacher.java

@Data
@NoArgsConstructor//无参的构造函数
@AllArgsConstructor//实参的构造函数
public class Teacher implements Serializable {

    private static final long serialVersionUID = 1L;

    @TableId(value = "id", type = IdType.AUTO)//id的名字,id的类型:是一个自增的id
    private Integer id;

    @TableField("Teacher_name")
    private String teacherName;

    @TableField("Teacher_account")
    private String teacherAccount;

    private String password;

四:在config层创建MybatisPlusConfig.java

@Configuration
public class MybatisPlusConfig {
    /**
     * 新的分页插件,一缓和二缓遵循mybatis的规则,需要设置 MybatisConfiguration#useDeprecatedExecutor = false 避免缓存出现问题(该属性会在旧插件移除后一同移除)
     */

    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor() {
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
        PaginationInnerInterceptor page = new PaginationInnerInterceptor(DbType.MYSQL);//分页拦截器,把数据库类型注入进去
       //如果数据返回量太高,首先不是正常量的操作,其次内存会被严重占用,会导致OOM问题的
        page.setMaxLimit(500L);//最多返回500条数据
        interceptor.addInnerInterceptor( page);//追加拦截器
        return interceptor;
    }

五.在controller层创建相关Controller文件

@RequestMapping("/selectPage/{pageIndex}")//实现分页查询
@ResponseBody
public  R selectPage(@PathVariable("pageIndex") Integer pageIndex){
    QueryWrapper<Teacher> qw =new QueryWrapper<>();
    //1-当前页数 2-每页显示的记录数
    Page<Teacher> page=new Page<>(pageIndex,3);
    IPage<Teacher> teacher=teacherService.page(page,qw);
    //获取分页后的记录
    List<Teacher> Teachers =teacher.getRecords();
    System.out.println("Teachers.size()="+Teachers.size());
    //分页信息
    long pages = teacher.getPages();
    System.out.println(""+pages);
    System.out.println(""+teacher.getTotal());
    System.out.println(""+teacher.getCurrent());
    System.out.println(""+teacher.getSize());
    return R.success(teacher);
}

注意:这里Return的R需要另外创建一个R.class,通用返回结果,服务端响应的数据最终都会封装成此对象

@Data//只要不返回R就可以省略这步
public class R<T> {
    private Integer code; //编码:1成功,0和其它数字为失败
    private String msg; //提示信息
    private T data; //数据
    private Map map = new HashMap(); //动态数据
    private boolean flag;//标记符
    public R() {
    }
    public R(Integer code, String msg, T data, Map map, boolean flag) {
        this.code = code;
        this.msg = msg;
        this.data = data;
        this.map = map;
        this.flag = flag;
    }
    public static <T> R<T> success(T object) {
        R<T> r = new R<T>();
        r.data = object;
        r.code = 200;
        r.flag = true;
        return r;
    }
    public static <T> R<T> success(String msg) {
        R<T> r = new R<T>();
        r.code = 200;
        r.msg = msg;
        r.flag = true;
        return r;
    }
    public static <T> R<T> error(String msg) {
        R r = new R();
        r.msg = msg;
        r.code = 300;
        r.flag = false;
        return r;
    }
    public R<T> add(String key, Object value) {
        this.map.put(key, value);
        return this;
    }

其他层就不再赘述(基本不用添加新的数据)

六.在搜索栏输入相应地址

如此就可以实现mybatis-plus的分页查询啦

### 回答1: Mybatis-Plus 是基于 Mybatis 的增强工具,可以简化 Mybatis 的开发,其包括分页查询实现实现分页查询的步骤如下: 1. 在实体类定义页参数,如当前页码和每页记录数。 2. 在 Mapper 接口定义页方法,使用 Mybatis-Plus 提供的 Page 类作为参数。 3. 在 SQL 语句使用 limit 子句来限制返回的记录数,同时计算偏移量。 4. 在 Service 层调用 Mapper 接口页方法,将查询结果封装到 Page 对象,返回给 Controller 层。 例如,假设有一个 User 实体类,其定义了 currentPage 和 pageSize 两个页参数。则在 UserMapper 接口,可以定义一个分页查询方法如下: ```java List<User> selectPage(Page<User> page, @Param("name") String name); ``` 在 SQL 语句,可以使用 limit 子句来限制返回的记录数,同时计算偏移量,例如: ```sql SELECT * FROM user WHERE name LIKE #{name} LIMIT #{page.offset}, #{page.size} ``` 在 Service 层,调用 Mapper 接口的页方法,如下: ```java Page<User> page = new Page<>(currentPage, pageSize); List<User> userList = userMapper.selectPage(page, name); return page.setRecords(userList); ``` 其,Page 对象的 currentPage 和 pageSize 参数表示当前页码和每页记录数,setRecords() 方法将查询结果封装到 Page 对象。最终返回给 Controller 层。 ### 回答2: Mybatis-plusMybatis的增强版,他提供了一些简化开发的功能,其分页查询是其之一。下面是实现分页查询的步骤: 1. 导入依赖 在pom.xml添加mybatis-plus的依赖 ``` <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>最新版本号</version> </dependency> ``` 2. 创建页参数类 创建一个页参数类,包含当前页、每页记录数等属性。 ```java public class PageParam { // 当前页,从1开始 private Integer current = 1; // 每页记录数 private Integer size = 10; // 查询条件 private Map<String, Object> conditions = new HashMap<>(); // 排序字段 private String orderBy; // 是否升序排序,默认升序 private Boolean asc = true; // 省略getter和setter } ``` 3. 调用页方法 在service层调用mybatis-plus页方法。 ```java public class UserServiceImpl implements UserService { @Autowired private UserMapper userMapper; @Override public Page<User> getUserList(PageParam pageParam) { // 页条件 Page<User> page = new Page<>(pageParam.getCurrent(), pageParam.getSize()); // 查询条件 QueryWrapper<User> queryWrapper = new QueryWrapper<>(); for (Map.Entry<String, Object> entry : pageParam.getConditions().entrySet()) { queryWrapper.eq(entry.getKey(), entry.getValue()); } // 排序条件 String orderBy = pageParam.getOrderBy(); if (!StringUtils.isEmpty(orderBy)) { if (pageParam.getAsc()) { queryWrapper.orderByAsc(orderBy); } else { queryWrapper.orderByDesc(orderBy); } } // 执行查询 return userMapper.selectPage(page, queryWrapper); } } ``` 4. 调用分页查询方法 在controller调用service的分页查询方法,并传入页参数。 ```java @RestController @RequestMapping("/user") public class UserController { @Autowired private UserService userService; @GetMapping("/list") public Result getUserList(PageParam pageParam) { Page<User> userList = userService.getUserList(pageParam); return Result.success(userList); } } ``` 以上就是使用mybatis-plus实现分页查询的步骤,关键点在于创建页参数类和调用页方法。使用mybatis-plus可以简化分页查询的代码编写,提高开发效率。 ### 回答3: Mybatis-Plus是基于Mybatis的强大增强库,其封装了许多方便的CRUD操作接口,并且提供了很多方便的工具类。本文主要介绍如何使用Mybatis-Plus实现分页查询。 1. 导入Mybatis-Plus依赖库 在maven的pom.xml文件加入以下依赖库: ``` <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus</artifactId> <version>3.3.1</version> </dependency> ``` 2. 配置Mybatis-Plus页插件 在Spring Boot的配置文件application.properties或application.yml加入以下配置: ```properties # 开启页插件 mybatis-plus.configuration.properties.mybatis.configuration.default-statement-timeout=3000 mybatis-plus.configuration.properties.mybatis.configuration.cache-enabled=false mybatis-plus.configuration.properties.mybatis.helper-dialect=mysql mybatis-plus.configuration.properties.mybatis.format_sql=true mybatis-plus.configuration.mapper-locations=classpath:/mappers/**/*.xml mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl mybatis-plus.configuration.plugins=com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor ``` 3. 实现分页查询Mybatis-Plus分页查询使用的是Page对象。首先需要创建一个Page对象,设置当前页数和每页数据条数。例如: ```java Page<User> page = new Page<>(1, 10); ``` 接着使用Mybatis-Plus提供的selectPage方法进行分页查询: ```java IPage<User> iPage = userMapper.selectPage(page, new QueryWrapper<User>().lambda() .gt(User::getAge, 25) .eq(User::getEmail, "test@test.com") ); ``` 其,userMapper是Mapper接口,selectPage方法是Mapper接口自动生成的方法,QueryWrapper是Mybatis-Plus提供的条件构造器,可以根据自己业务逻辑选择使用。 最后,使用IPage对象获取页数据: ```java List<User> userList = iPage.getRecords(); ``` 以上就是使用Mybatis-Plus实现分页查询的步骤。Mybatis-Plus提供了非常方便的工具类,使得我们能够快速便捷地完成分页查询。在实际开发,可以根据具体场景进行灵活运用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值