MybatisPlus基础学习之查询操作和分页插件的使用

在对数据库的操作中,查询数据是最为常用的功能,像一些基本的根据Id查询单条和多条数据,单条件和多条件查询,数据分页查询等;这些都需要我们去编写对应的接口方法和SQL语句,十分麻烦,在工作中,大大降低了我们的开发效率;而在MyBatisPlus中,它不仅为我们封装了一些常用的查询方法,而且还内置了好用的分页插件,不需要我们再去集成第三方插件!

今天我们要学习的内容便是,MybatisPlus中查询功能和分页插件的简单使用,希望在学习完后对你会有所帮助!

6.1 查询操作

6.1.1 查询单条数据

1. 编写查询测试类
package com.kuang.mybatis_plus;

import com.kuang.mybatis_plus.mapper.UserMapper;
import com.kuang.mybatis_plus.pojo.User;
import org.junit.jupiter.api.Test;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

import java.util.Arrays;
import java.util.HashMap;
import java.util.List;

@SpringBootTest
//扫描mapper接口所在包
@MapperScan("com.kuang.mybatis_plus.mapper")
class MybatisPlusApplicationTests {

    //通过类型自动装配UserMapper接口
    @Autowired
    private UserMapper userMapper;

    //测试查询(只查询单条用户信息)
    @Test
    public void testSelectById() {
        //通过Id查询用户信息
        User user = userMapper.selectById("1405056510844735489");
        //打印查询到的用户信息
        System.out.println(user);
    }

}
2.查看测试结果

在这里插入图片描述

结果查询单条数据成功!

6.1.2 查询批量数据

1.编写查询测试类
package com.kuang.mybatis_plus;

import com.kuang.mybatis_plus.mapper.UserMapper;
import com.kuang.mybatis_plus.pojo.User;
import org.junit.jupiter.api.Test;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

import java.util.Arrays;
import java.util.HashMap;
import java.util.List;

@SpringBootTest
//扫描mapper接口所在包
@MapperScan("com.kuang.mybatis_plus.mapper")
class MybatisPlusApplicationTests {

    //通过类型自动装配UserMapper接口
    @Autowired
    private UserMapper userMapper;

    //测试查询(查询多条用户信息)
    @Test
    public void testSelectByBatchId() {
        //通过批量Id查询多条用户信息
        List<User> users = userMapper.selectBatchIds(Arrays.asList(1,2,3));
        //打印查询到的多条用户信息
        users.forEach(System.out::println);
    }

}
2. 查看测试结果

在这里插入图片描述

结果查询多条数据成功!

6.1.3 条件查询数据

1. 编写查询测试
package com.kuang.mybatis_plus;

import com.kuang.mybatis_plus.mapper.UserMapper;
import com.kuang.mybatis_plus.pojo.User;
import org.junit.jupiter.api.Test;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

import java.util.Arrays;
import java.util.HashMap;
import java.util.List;

@SpringBootTest
//扫描mapper接口所在包
@MapperScan("com.kuang.mybatis_plus.mapper")
class MybatisPlusApplicationTests {

    //通过类型自动装配UserMapper接口
    @Autowired
    private UserMapper userMapper;

    //条件查询(使用map)
    @Test
    public void testSelectByMap() {
        //获取HashMap对象
        HashMap<String,Object> map = new HashMap<>();
        //设置map中的键值对信息
        map.put("name","周杰伦");
        map.put("age","26");
        //通过Map查询用户信息
        List<User> users = userMapper.selectByMap(map);
        //打印查询到的用户信息
        users.forEach(System.out::println);
    }
}
2. 查看测试结果

在这里插入图片描述

结果通过条件查询用户数据成功!

6.2 分页查询

6.2.1 简单了解分页查询

1. 为什么要使用分页查询?
  • 对数据进行分页,缓解数据库压力
  • 避免出现瀑布流数据,给用户好的体验
2.分页的实际应用有哪些?

例如当今最流行的视频网站“哔哩哔哩”和博客论坛CSDN,站内的视频和博客,动态和评论都有分页,应用十分之多!

3.分页的实现方式有哪些?
  • 原始的 limit 进行分页
  • 使用pageHelper第三方插件
  • MP内置的分页插件

6.2.2 使用MP内置分页插件

1. 修改MyBatisPlusConfig配置类
package com.kuang.mybatis_plus.config;

import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.autoconfigure.ConfigurationCustomizer;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.OptimisticLockerInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.OptimisticLockerInnerInterceptor;
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;
import org.springframework.transaction.annotation.EnableTransactionManagement;

//扫描mapper接口所在包
@MapperScan("com.kuang.mybatis_plus.mapper")
//开启自动事务管理,默认是开启状态
@EnableTransactionManagement
//将MyBatisPlusConfig注册为Spring的IOC容器中的配置类
@Configuration
public class MyBatisPlusConfig {

    /**
     * 注册乐观锁和分页插件
     */
    /**
      * 3.3.4版本以后推荐使用以下配置
      * 新的分页插件,一缓和二缓遵循mybatis的规则
      * 需要设置 MybatisConfiguration#useDeprecatedExecutor = false
      * 避免缓存出现问题(该属性会在旧插件移除后一同移除)
      */
    //将mybatisPlusInterceptor方法注册为Spring的IOC容器中的组件
    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor() {
        //获取MybatisPlusInterceptor对象
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
        //添加OptimisticLockerInterceptor(乐观锁拦截器)到内部拦截器中
        interceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor());
        //添加PaginationInnerInterceptor(即分页拦截器,并且其参数为DbType.MYSQL(即数据库类型为MySQL))到内部拦截器中
        interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
        //将interceptor进行返回
        return interceptor;
    }

    @Bean
    public ConfigurationCustomizer configurationCustomizer() {
        return configuration -> configuration.setUseDeprecatedExecutor(false);
    }

}
2. 查看源码Page类和BaseMapper接口
2-1 查看Page泛型类源码
package com.baomidou.mybatisplus.extension.plugins.pagination;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.metadata.OrderItem;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import java.util.function.Predicate;

public class Page<T> implements IPage<T> {
    private static final long serialVersionUID = 8545996863226528798L;
    protected List<T> records;
    protected long total;
    protected long size; //分页大小
    protected long current; //当前页数
    protected List<OrderItem> orders;
    protected boolean optimizeCountSql;
    protected boolean isSearchCount;
    protected boolean hitCount;
    protected String countId;
    protected Long maxLimit;
 
    public Page() {
        this.records = Collections.emptyList();
        this.total = 0L;
        this.size = 10L;
        this.current = 1L;
        this.orders = new ArrayList();
        this.optimizeCountSql = true;
        this.isSearchCount = true;
        this.hitCount = false;
    }
    .....
    //两个参数:current是当前页数,size是分页大小    
    public Page(long current, long size) {
        this(current, size, 0L);
    }
    ......
}

2-2 查看BaseMapper接口源码
package com.baomidou.mybatisplus.core.mapper;

import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import java.io.Serializable;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import org.apache.ibatis.annotations.Param;

public interface BaseMapper<T> extends Mapper<T> {
    ......
    /**
      * @Param page:分页
      * @Param queryWrapper:查询wrapper
      */
    <E extends IPage<T>> E selectPage(E page, @Param("ew") Wrapper<T> queryWrapper);
    ...... 
}

6.2.3 编写分页查询测试类

1.只查询分页记录
1-1 编写分页查询测试类
  • 查询第一页
package com.kuang.mybatis_plus;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.kuang.mybatis_plus.mapper.UserMapper;
import com.kuang.mybatis_plus.pojo.User;
import org.junit.jupiter.api.Test;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

import java.util.Arrays;
import java.util.HashMap;
import java.util.List;

@SpringBootTest
//扫描mapper接口所在包
@MapperScan("com.kuang.mybatis_plus.mapper")
class MybatisPlusApplicationTests {

    //通过类型自动装配UserMapper接口
    @Autowired
    private UserMapper userMapper;

    //测试分页查询
    @Test
    public void testPage() {
        //使用了分页插件之后,所有的分页操作也变得简单!
        //获取Page对象(设置当前页数为1,分页大小为5)
        Page<User> page = new Page<>(1,5);
        //通过分页查询
        userMapper.selectPage(page,null);
        //打印分页查询的数据记录
        page.getRecords().forEach(System.out::println);
    }

}
  • 查询第二页
package com.kuang.mybatis_plus;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.kuang.mybatis_plus.mapper.UserMapper;
import com.kuang.mybatis_plus.pojo.User;
import org.junit.jupiter.api.Test;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

import java.util.Arrays;
import java.util.HashMap;
import java.util.List;

@SpringBootTest
//扫描mapper接口所在包
@MapperScan("com.kuang.mybatis_plus.mapper")
class MybatisPlusApplicationTests {

    //通过类型自动装配UserMapper接口
    @Autowired
    private UserMapper userMapper;

    //测试分页查询
    @Test
    public void testPage() {
        //使用了分页插件之后,所有的分页操作也变得简单!
        //获取Page对象(设置当前页数为2,分页大小为5)
        Page<User> page = new Page<>(2,5);
        //通过分页查询
        userMapper.selectPage(page,null);
        //打印分页查询的数据记录
        page.getRecords().forEach(System.out::println);
    }

}
1-2 查看测试结果
  • 查询第一页

在这里插入图片描述

结果查询第1到5条数据成功!

  • 查询第二页

在这里插入图片描述

结果查询第6到10条数据成功!

2. 查询分页记录和条数
2-1 编写分页查询测试
package com.kuang.mybatis_plus;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.kuang.mybatis_plus.mapper.UserMapper;
import com.kuang.mybatis_plus.pojo.User;
import org.junit.jupiter.api.Test;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

import java.util.Arrays;
import java.util.HashMap;
import java.util.List;

@SpringBootTest
//扫描mapper接口所在包
@MapperScan("com.kuang.mybatis_plus.mapper")
class MybatisPlusApplicationTests {

    //通过类型自动装配UserMapper接口
    @Autowired
    private UserMapper userMapper;

    //测试分页查询
    @Test
    public void testPage() {
        //使用了分页插件之后,所有的分页操作也变得简单!
        //获取Page对象(设置当前页数为1,分页大小为5)
        Page<User> page = new Page<>(1,5);
        //通过分页查询
        userMapper.selectPage(page,null);
        //打印分页查询的数据记录
        page.getRecords().forEach(System.out::println);
        //打印记录总条数
        System.out.println("总记录数为:"+page.getTotal()+"条");
    }

}
2-2 查看测试结果

在这里插入图片描述

结果成功查询到1到5条数据,并且总记录数为11条!

到这里,有关MybatisPlus的查询操作和分页插件简单使用的学习就结束了,欢迎大家学习和讨论!

参考视频链接:https://www.bilibili.com/video/BV17E411N7KN (B站UP主遇见狂神说的MybatisPlus快速入门)

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Mybatis-Plus 是 Mybatis 的增强工具,在 Mybatis基础上扩展了很多实用的功能,其中包括分页插件使用 Mybatis-Plus 分页插件非常简单,只需要按照以下步骤操作即可: 1. 在 pom.xml 文件中添加 Mybatis-Plus 和分页插件的依赖: ```xml <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.0.6</version> </dependency> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-extension</artifactId> <version>3.0.6</version> </dependency> ``` 2. 在 Mybatis 的配置文件中添加分页插件的配置: ```xml <plugins> <plugin interceptor="com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor"> <property name="dialec" value="mysql"/> </plugin> </plugins> ``` 3. 在代码中使用分页查询: ```java // 构造分页对象 Page<User> page = new Page<>(1, 10); // 执行分页查询 IPage<User> userPage = userMapper.selectPage(page, new QueryWrapper<User>().lambda().ge(User::getAge, 18)); // 获取分页结果 List<User> userList = userPage.getRecords(); long total = userPage.getTotal(); ``` 以上代码中,首先构造了一个分页对象 `Page<User>`,该对象表示要查询第 1 页,每页 10 条记录。然后使用 `selectPage` 方法执行分页查询,该方法的第一个参数是分页对象,第二个参数是查询条件。最后通过 `userPage` 对象获取分页结果。 注意,在查询条件中使用了 `QueryWrapper`,这是 Mybatis-Plus 提供的一个方便构建查询条件的工具类。 以上就是使用 Mybatis-Plus 分页插件的基本步骤,希望能帮到你。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

狂奔の蜗牛rz

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值