详细介绍:【04】SpringBoot3 MybatisPlus 查询(Mapper)

前言

本篇中使用到的项目工程是在《SpringBoot3 MybatisPlus 加入日志功能》基础上,持续功能开发。

对于即将过期的方法将不再举例说明。

在这里插入图片描述

配置分页插件

示例中,会有分页代码,需提前将分页功能配置在项目中。
配置完成后的项目结构如下:
在这里插入图片描述

pom.xml 文件

<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-jsqlparser</artifactId>
<version>3.5.15</version>
</dependency>

添加配置文件

package com.junjiu.springboot3.config;
import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* program: springboot3-mybatisplus
* ClassName: MybatisPlusConfig
* description:
*
* @author: 君九
* @create: 2026-01-27 14:20
* @version: 1.0
**/
@Configuration
public class MybatisPlusConfig {
/**
* 添加分页插件
*/
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL)); // 如果配置多个插件, 切记分页最后添加
// 如果有多数据源可以不配具体类型, 否则都建议配上具体的 DbType
return interceptor;
}
}

查询 API

selectById

官网 API

/**
* 根据 ID 查询
*
* @param id 主键ID
*/
T selectById(Serializable id);

Demo 示例:

@Test
public void testSelectById() {
ClientEntity clientEntity = clientMapper.selectById(1L);
System.out.println("clientEntity = " + JSON.toJSONString(clientEntity));
}

输出日志:
在这里插入图片描述

selectByIds

官网 API

/**
* 查询(根据ID 批量查询)
*
* @param idList 主键ID列表(不能为 null 以及 empty)
* @return 数据列表
*/
List<T> selectByIds(@Param(Constants.COLL) Collection<? extends Serializable> idList);

Demo 示例:

@Test
public void testSelectByIds() {
List<Long> idList = Arrays.asList(1L, 2L, 3L);
  List<ClientEntity> clientEntityList = clientMapper.selectByIds(idList);
    System.out.println("clientEntityList = " + JSON.toJSONString(clientEntityList));
    }

输出日志:
在这里插入图片描述

selectByIds 回调

什么时候用这个方法?
✅ 推荐:

  • ID 数量多(几千 / 几万)
  • 导出 Excel / CSV
  • 大对象(字段多、JSON 字段)

❌ 不推荐:

  • 只查几条
  • 需要 List 结果再处理

官网 API

/**
* 查询(根据ID 批量查询)
*
* @param idList        idList 主键ID列表(不能为 null 以及 empty)
* @param resultHandler resultHandler 结果处理器 {@link ResultHandler}
* @since 3.5.8
*/
void selectByIds(@Param(Constants.COLL) Collection<? extends Serializable> idList, ResultHandler<T> resultHandler);

Demo 示例:

@Test
public void testSelectByIds_02() {
List<Long> idList = Arrays.asList(1L, 2L, 3L);
  org.apache.ibatis.session.ResultHandler<ClientEntity> resultHandler = resultContext -> {
    int resultCount = resultContext.getResultCount();
    System.out.println("resultCount = " + resultCount);
    ClientEntity resultObject = resultContext.getResultObject();
    System.out.println("对查询结果进行其他业务处理.....");
    System.out.println("resultObject = " + JSON.toJSONString(resultObject));
    };
    clientMapper.selectByIds(idList, resultHandler);
    }

输出日志:
在这里插入图片描述

selectByMap

官网 API

/**
* 查询(根据 columnMap 条件)
*
* @param columnMap 表字段 map 对象
*/
default List<T> selectByMap(Map<String, Object> columnMap) {
  return this.selectList(Wrappers.<T>query().allEq(columnMap));
    }

Demo 示例:

@Test
public void testSelectByMap() {
Map<String, Object> columnMap = new HashMap<>();
  columnMap.put("id", "1");
  // columnMap.put("user_no", "Bnyq6t");  // 若需要多条件查询,此处持续添加 put 即可。
  List<ClientEntity> clientEntityList = clientMapper.selectByMap(columnMap);
    System.out.println("clientEntityList = " + JSON.toJSONString(clientEntityList));
    }

输出日志:
在这里插入图片描述

selectByMap 回调

官网 API

/**
* 查询(根据 columnMap 条件)
*
* @param columnMap     表字段 map 对象
* @param resultHandler resultHandler 结果处理器 {@link ResultHandler}
* @since 3.5.4
*/
default void selectByMap(Map<String, Object> columnMap, ResultHandler<T> resultHandler) {
  this.selectList(Wrappers.<T>query().allEq(columnMap), resultHandler);
    }

Demo 示例:

@Test
public void testSelectByMap_02() {
Map<String, Object> columnMap = new HashMap<>();
  columnMap.put("id", "1");
  ResultHandler<ClientEntity> resultHandler = resultContext -> {
    int resultCount = resultContext.getResultCount();
    System.out.println("resultCount = " + resultCount);
    ClientEntity resultObject = resultContext.getResultObject();
    System.out.println("处理一些其他的业务....");
    System.out.println("resultObject = " + JSON.toJSONString(resultObject));
    };
    clientMapper.selectByMap(columnMap, resultHandler);
    }

输出日志:
在这里插入图片描述

selectCount

官网 API

/**
* 根据 Wrapper 条件,查询总记录数
*
* @param queryWrapper 实体对象封装操作类(可以为 null)
*/
Long selectCount(@Param(Constants.WRAPPER) Wrapper<T> queryWrapper);

Demo 示例:

@Test
public void testSelectCount() {
// 不加筛选条件,统计查询结果.
// Long selectCount = clientMapper.selectCount(null);
// 根据筛选条件,统计查询结果.
QueryWrapper<ClientEntity> queryWrapper = new QueryWrapper<>();
  queryWrapper.lambda()
  .eq(ClientEntity::getId, 1)
  .or()
  .like(ClientEntity::getNickName, "君九");
  Long selectCount = clientMapper.selectCount(queryWrapper);
  System.out.println("selectCount = " + selectCount);
  }

输出日志:
在这里插入图片描述

selectList

官网 API

/**
* 根据 entity 条件,查询全部记录
*
* @param queryWrapper 实体对象封装操作类(可以为 null)
*/
List<T> selectList(@Param(Constants.WRAPPER) Wrapper<T> queryWrapper);

Demo 示例:

@Test
public void testSelectList() {
// 不加筛选条件,查询所有的数据.
// List<ClientEntity> clientEntityList = clientMapper.selectList(null);
  // 根据筛选条件,统计查询结果.
  QueryWrapper<ClientEntity> queryWrapper = new QueryWrapper<>();
    queryWrapper.lambda()
    .eq(ClientEntity::getId, 1)
    .or()
    .like(ClientEntity::getNickName, "君九");
    List<ClientEntity> clientEntityList = clientMapper.selectList(queryWrapper);
      System.out.println("clientEntityList = " + JSON.toJSONString(clientEntityList));
      }

输出日志:

JDBC Connection [HikariProxyConnection@837923432 wrapping com.mysql.cj.jdbc.ConnectionImpl@57a982f9] will not be managed by Spring
==>  Preparing: SELECT id,client_id,user_no,user_password,nick_name,real_name,created_time,upated_time FROM client WHERE (id = ? OR nick_name LIKE ?)
==> Parameters: 1(Integer), %君九%(String)
<==    Columns: id, client_id, user_no, user_password, nick_name, real_name, created_time, upated_time
<==        Row: 1, 1, Bnyq6t, H7xTsUwWRG3AtEx3uJ2tBh9XtKbUzwvI, 孤胆英雄, 井是一, 2026-01-26 07:22:24, 2026-01-26 07:22:24
<==      Total: 1
Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@69d667a5]
clientEntityList = [{"clientId":1,"createdTime":"2026-01-26 07:22:24","id":1,"nickName":"孤胆英雄","realName":"井是一","upatedTime":"2026-01-26 07:22:24","userNo":"Bnyq6t","userPassword":"H7xTsUwWRG3AtEx3uJ2tBh9XtKbUzwvI"}]

selectList 回调

什么时候用这个方法?
✅ 推荐:

  • ID 数量多(几千 / 几万)
  • 导出 Excel / CSV
  • 大对象(字段多、JSON 字段)

❌ 不推荐:

  • 只查几条
  • 需要 List 结果再处理

官网 API

/**
* 根据 entity 条件,查询全部记录
*
* @param queryWrapper  实体对象封装操作类(可以为 null)
* @param resultHandler 结果处理器 {@link ResultHandler}
* @since 3.5.4
*/
void selectList(@Param(Constants.WRAPPER) Wrapper<T> queryWrapper, ResultHandler<T> resultHandler);

Demo 示例:

@Test
public void testSelectList_02() {
// 回调方法
ResultHandler<ClientEntity> resultHandler = resultContext -> {
  int resultCount = resultContext.getResultCount();
  System.out.println("resultCount = " + resultCount);
  ClientEntity resultObject = resultContext.getResultObject();
  System.out.println("处理一些其他的业务逻辑....");
  System.out.println("resultObject = " + JSON.toJSONString(resultObject));
  };
  // 筛选条件
  QueryWrapper<ClientEntity> queryWrapper = new QueryWrapper<>();
    queryWrapper.lambda()
    .eq(ClientEntity::getId, 1)
    .or()
    .like(ClientEntity::getNickName, "君九");
    clientMapper.selectList(queryWrapper, resultHandler);
    }

输出日志:

2026-01-27T16:11:35.429+08:00  INFO 33692 --- [springboot3-mybatisplus] [           main] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Start completed.
JDBC Connection [HikariProxyConnection@698133256 wrapping com.mysql.cj.jdbc.ConnectionImpl@2a2798a2] will not be managed by Spring
==>  Preparing: SELECT id,client_id,user_no,user_password,nick_name,real_name,created_time,upated_time FROM client WHERE (id = ? OR nick_name LIKE ?)
==> Parameters: 1(Integer), %君九%(String)
<==    Columns: id, client_id, user_no, user_password, nick_name, real_name, created_time, upated_time
<==        Row: 1, 1, Bnyq6t, H7xTsUwWRG3AtEx3uJ2tBh9XtKbUzwvI, 孤胆英雄, 井是一, 2026-01-26 07:22:24, 2026-01-26 07:22:24
resultCount = 1
处理一些其他的业务逻辑....
resultObject = {"clientId":1,"createdTime":"2026-01-26 07:22:24","id":1,"nickName":"孤胆英雄","realName":"井是一","upatedTime":"2026-01-26 07:22:24","userNo":"Bnyq6t","userPassword":"H7xTsUwWRG3AtEx3uJ2tBh9XtKbUzwvI"}
<==      Total: 1
Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@3c346c45]

select 分页

官网 API

/**
* 根据 entity 条件,查询全部记录(并翻页)
*
* @param page         分页查询条件
* @param queryWrapper 实体对象封装操作类(可以为 null)
* @since 3.5.3.2
*/
List<T> selectList(IPage<T> page, @Param(Constants.WRAPPER) Wrapper<T> queryWrapper);

Demo 示例:

@Test
public void testSelectList_03() {
// 分页
int pageIndex = 1;
int pageSize = 2;
IPage<ClientEntity> entityPage = new Page<>(pageIndex, pageSize);
  // 查询条件
  QueryWrapper<ClientEntity> queryWrapper = new QueryWrapper<>();
    queryWrapper.lambda()
    .like(ClientEntity::getUserNo, "a");
    List<ClientEntity> clientEntityList = clientMapper.selectList(entityPage, queryWrapper);
      System.out.println("查询的结果个数 = " + clientEntityList.size());
      System.out.println("clientEntityList = " + JSON.toJSONString(clientEntityList));
      }

输出日志:

2026-01-27T16:22:37.548+08:00  INFO 192 --- [springboot3-mybatisplus] [           main] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Start completed.
JDBC Connection [HikariProxyConnection@806005031 wrapping com.mysql.cj.jdbc.ConnectionImpl@bb5f9d] will not be managed by Spring
==>  Preparing: SELECT COUNT(*) AS total FROM client WHERE (user_no LIKE ?)
==> Parameters: %a%(String)
<==    Columns: total
<==        Row: 24
<==      Total: 1
==>  Preparing: SELECT id,client_id,user_no,user_password,nick_name,real_name,created_time,upated_time FROM client WHERE (user_no LIKE ?) LIMIT ?
==> Parameters: %a%(String), 2(Long)
<==    Columns: id, client_id, user_no, user_password, nick_name, real_name, created_time, upated_time
<==        Row: 6, 6, YF5czlv7H9A, Zu5quIbizO6FTfremgOJIiLW18guNF61, 銩るdè心喓怎庅収佪, 舒有许, 2026-01-26 07:22:25, 2026-01-26 07:22:25
<==        Row: 17, 17, 2zDaBMM7WBM, 2T1sQwF5RuSHepE79aFSl4VfmyEu1Dn6, 分了、我来合。, 扶一些, 2026-01-26 07:22:25, 2026-01-26 07:22:25
<==      Total: 2
Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@f810c18]
查询的结果个数 = 2
clientEntityList = [{"clientId":6,"createdTime":"2026-01-26 07:22:25","id":6,"nickName":"銩るdè心喓怎庅収佪","realName":"舒有许","upatedTime":"2026-01-26 07:22:25","userNo":"YF5czlv7H9A","userPassword":"Zu5quIbizO6FTfremgOJIiLW18guNF61"},{"clientId":17,"createdTime":"2026-01-26 07:22:25","id":17,"nickName":"分了、我来合。","realName":"扶一些","upatedTime":"2026-01-26 07:22:25","userNo":"2zDaBMM7WBM","userPassword":"2T1sQwF5RuSHepE79aFSl4VfmyEu1Dn6"}]

select 分页+回调

什么时候用这个方法?
✅ 推荐:

  • ID 数量多(几千 / 几万)
  • 导出 Excel / CSV
  • 大对象(字段多、JSON 字段)

❌ 不推荐:

  • 只查几条
  • 需要 List 结果再处理

官网 API

/**
* 根据 entity 条件,查询全部记录(并翻页)
* @param page          分页查询条件
* @param queryWrapper  实体对象封装操作类(可以为 null)
* @param resultHandler 结果处理器 {@link ResultHandler}
* @since 3.5.4
*/
void selectList(IPage<T> page, @Param(Constants.WRAPPER) Wrapper<T> queryWrapper, ResultHandler<T> resultHandler);

Demo 示例:

@Test
public void testSelectList_04() {
// 分页
int pageIndex = 1;
int pageSize = 2;
IPage<ClientEntity> entityPage = new Page<>(pageIndex, pageSize);
  // 查询条件
  QueryWrapper<ClientEntity> queryWrapper = new QueryWrapper<>();
    queryWrapper.lambda()
    .like(ClientEntity::getUserNo, "a");
    // 回调
    ResultHandler<ClientEntity> resultHandler = resultContext -> {
      int resultCount = resultContext.getResultCount();
      System.out.println("resultCount = " + resultCount);
      ClientEntity resultObject = resultContext.getResultObject();
      System.out.println("处理一些其他业务逻辑....");
      System.out.println("resultObject = " + JSON.toJSONString(resultObject));
      };
      clientMapper.selectList(entityPage, queryWrapper, resultHandler);
      }

输出日志:

2026-01-27T16:28:47.190+08:00  INFO 33364 --- [springboot3-mybatisplus] [           main] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Start completed.
JDBC Connection [HikariProxyConnection@992309406 wrapping com.mysql.cj.jdbc.ConnectionImpl@5c3710b3] will not be managed by Spring
==>  Preparing: SELECT id,client_id,user_no,user_password,nick_name,real_name,created_time,upated_time FROM client WHERE (user_no LIKE ?) LIMIT ?
==> Parameters: %a%(String), 2(Long)
<==    Columns: id, client_id, user_no, user_password, nick_name, real_name, created_time, upated_time
<==        Row: 6, 6, YF5czlv7H9A, Zu5quIbizO6FTfremgOJIiLW18guNF61, 銩るdè心喓怎庅収佪, 舒有许, 2026-01-26 07:22:25, 2026-01-26 07:22:25
resultCount = 1
处理一些其他业务逻辑....
resultObject = {"clientId":6,"createdTime":"2026-01-26 07:22:25","id":6,"nickName":"銩るdè心喓怎庅収佪","realName":"舒有许","upatedTime":"2026-01-26 07:22:25","userNo":"YF5czlv7H9A","userPassword":"Zu5quIbizO6FTfremgOJIiLW18guNF61"}
<==        Row: 17, 17, 2zDaBMM7WBM, 2T1sQwF5RuSHepE79aFSl4VfmyEu1Dn6, 分了、我来合。, 扶一些, 2026-01-26 07:22:25, 2026-01-26 07:22:25
resultCount = 2
处理一些其他业务逻辑....
resultObject = {"clientId":17,"createdTime":"2026-01-26 07:22:25","id":17,"nickName":"分了、我来合。","realName":"扶一些","upatedTime":"2026-01-26 07:22:25","userNo":"2zDaBMM7WBM","userPassword":"2T1sQwF5RuSHepE79aFSl4VfmyEu1Dn6"}
<==      Total: 2
Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@120411ec]

selectMaps

官网 API

/**
* 根据 Wrapper 条件,查询全部记录
*
* @param queryWrapper 实体对象封装操作类
*/
List<Map<String, Object>> selectMaps(@Param(Constants.WRAPPER) Wrapper<T> queryWrapper);

Demo 示例:

@Test
public void testSelectMaps() {
// 无筛选条件,查询所有数据.
// List<Map<String, Object>> mapList = clientMapper.selectMaps(null);
  // 根据筛选条件,查询结果.
  QueryWrapper<ClientEntity> queryWrapper = new QueryWrapper<>();
    queryWrapper.lambda()
    .eq(ClientEntity::getId, 1)
    .or()
    .like(ClientEntity::getNickName, "君九");
    List<Map<String, Object>> mapList = clientMapper.selectMaps(queryWrapper);
      System.out.println("mapList = " + JSON.toJSONString(mapList));
      }

输出日志:

2026-01-27T16:34:16.199+08:00  INFO 14436 --- [springboot3-mybatisplus] [           main] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Start completed.
JDBC Connection [HikariProxyConnection@861255935 wrapping com.mysql.cj.jdbc.ConnectionImpl@2932e15f] will not be managed by Spring
==>  Preparing: SELECT id,client_id,user_no,user_password,nick_name,real_name,created_time,upated_time FROM client WHERE (id = ? OR nick_name LIKE ?)
==> Parameters: 1(Integer), %君九%(String)
<==    Columns: id, client_id, user_no, user_password, nick_name, real_name, created_time, upated_time
<==        Row: 1, 1, Bnyq6t, H7xTsUwWRG3AtEx3uJ2tBh9XtKbUzwvI, 孤胆英雄, 井是一, 2026-01-26 07:22:24, 2026-01-26 07:22:24
<==      Total: 1
Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@f810c18]
mapList = [{"created_time":"2026-01-26 07:22:24","user_password":"H7xTsUwWRG3AtEx3uJ2tBh9XtKbUzwvI","nick_name":"孤胆英雄","upated_time":"2026-01-26 07:22:24","real_name":"井是一","id":1,"client_id":1,"user_no":"Bnyq6t"}]

selectMaps 回调

官网 API

/**
* 根据 Wrapper 条件,查询全部记录
*
* @param queryWrapper  实体对象封装操作类
* @param resultHandler 结果处理器 {@link ResultHandler}
* @since 3.5.4
*/
void selectMaps(@Param(Constants.WRAPPER) Wrapper<T> queryWrapper, ResultHandler<Map<String, Object>> resultHandler);

Demo 示例:

@Test
public void testSelectMaps_02() {
// 回调
ResultHandler<Map<String, Object>> resultHandler = resultContext -> {
  int resultCount = resultContext.getResultCount();
  System.out.println("resultCount = " + resultCount);
  Map<String, Object> resultObject = resultContext.getResultObject();
    System.out.println("处理一些其他的业务逻辑....");
    System.out.println("resultCount = " + resultCount);
    };
    // 根据筛选条件,查询结果.
    QueryWrapper<ClientEntity> queryWrapper = new QueryWrapper<>();
      queryWrapper.lambda()
      .eq(ClientEntity::getId, 1)
      .or()
      .like(ClientEntity::getNickName, "君九");
      clientMapper.selectMaps(queryWrapper, resultHandler);
      }

输出日志:

2026-01-27T16:39:06.330+08:00  INFO 19444 --- [springboot3-mybatisplus] [           main] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Start completed.
JDBC Connection [HikariProxyConnection@1761208327 wrapping com.mysql.cj.jdbc.ConnectionImpl@2375a976] will not be managed by Spring
==>  Preparing: SELECT id,client_id,user_no,user_password,nick_name,real_name,created_time,upated_time FROM client WHERE (id = ? OR nick_name LIKE ?)
==> Parameters: 1(Integer), %君九%(String)
<==    Columns: id, client_id, user_no, user_password, nick_name, real_name, created_time, upated_time
<==        Row: 1, 1, Bnyq6t, H7xTsUwWRG3AtEx3uJ2tBh9XtKbUzwvI, 孤胆英雄, 井是一, 2026-01-26 07:22:24, 2026-01-26 07:22:24
resultCount = 1
处理一些其他的业务逻辑....
resultCount = 1
<==      Total: 1
Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@3fc1abf]

selectMaps 分页

官网 API

/**
* 根据 Wrapper 条件,查询全部记录(并翻页)
*
* @param page         分页查询条件
* @param queryWrapper 实体对象封装操作类
* @since 3.5.3.2
*/
List<Map<String, Object>> selectMaps(IPage<? extends Map<String, Object>> page, @Param(Constants.WRAPPER) Wrapper<T> queryWrapper);

Demo 示例:

@Test
public void testSelectMaps_03() {
// 分页
int pageIndex = 1;
int pageSize = 2;
IPage<Map<String, Object>> page = new Page<>(pageIndex, pageSize);
  // 查询条件.
  QueryWrapper<ClientEntity> queryWrapper = new QueryWrapper<>();
    queryWrapper.lambda()
    .like(ClientEntity::getUserNo, "a");
    List<Map<String, Object>> mapList = clientMapper.selectMaps(page, queryWrapper);
      System.out.println("查询的个数 = " + mapList.size());
      System.out.println("mapList = " + JSON.toJSONString(mapList));
      }

输出日志:

2026-01-27T16:45:46.225+08:00  INFO 32196 --- [springboot3-mybatisplus] [           main] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Start completed.
JDBC Connection [HikariProxyConnection@457596841 wrapping com.mysql.cj.jdbc.ConnectionImpl@229cb4d8] will not be managed by Spring
==>  Preparing: SELECT COUNT(*) AS total FROM client WHERE (user_no LIKE ?)
==> Parameters: %a%(String)
<==    Columns: total
<==        Row: 24
<==      Total: 1
==>  Preparing: SELECT id,client_id,user_no,user_password,nick_name,real_name,created_time,upated_time FROM client WHERE (user_no LIKE ?) LIMIT ?
==> Parameters: %a%(String), 2(Long)
<==    Columns: id, client_id, user_no, user_password, nick_name, real_name, created_time, upated_time
<==        Row: 6, 6, YF5czlv7H9A, Zu5quIbizO6FTfremgOJIiLW18guNF61, 銩るdè心喓怎庅収佪, 舒有许, 2026-01-26 07:22:25, 2026-01-26 07:22:25
<==        Row: 17, 17, 2zDaBMM7WBM, 2T1sQwF5RuSHepE79aFSl4VfmyEu1Dn6, 分了、我来合。, 扶一些, 2026-01-26 07:22:25, 2026-01-26 07:22:25
<==      Total: 2
Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@72001c71]
查询的个数 = 2
mapList = [{"created_time":"2026-01-26 07:22:25","user_password":"Zu5quIbizO6FTfremgOJIiLW18guNF61","nick_name":"銩るdè心喓怎庅収佪","upated_time":"2026-01-26 07:22:25","real_name":"舒有许","id":6,"client_id":6,"user_no":"YF5czlv7H9A"},{"created_time":"2026-01-26 07:22:25","user_password":"2T1sQwF5RuSHepE79aFSl4VfmyEu1Dn6","nick_name":"分了、我来合。","upated_time":"2026-01-26 07:22:25","real_name":"扶一些","id":17,"client_id":17,"user_no":"2zDaBMM7WBM"}]

selectMaps 分页+回调

官网 API

/**
* 根据 Wrapper 条件,查询全部记录(并翻页)
*
* @param page          分页查询条件
* @param queryWrapper  实体对象封装操作类
* @param resultHandler 结果处理器 {@link ResultHandler}
* @since 3.5.4
*/
void selectMaps(IPage<? extends Map<String, Object>> page, @Param(Constants.WRAPPER) Wrapper<T> queryWrapper, ResultHandler<Map<String, Object>> resultHandler);

Demo 示例:

@Test
public void testSelectMaps_04() {
// 分页
int pageIndex = 1;
int pageSize = 2;
IPage<Map<String, Object>> page = new Page<>(pageIndex, pageSize);
  // 查询条件.
  QueryWrapper<ClientEntity> queryWrapper = new QueryWrapper<>();
    queryWrapper.lambda()
    .like(ClientEntity::getUserNo, "a");
    // 回调
    ResultHandler<Map<String, Object>> resultHandler = resultContext -> {
      int resultCount = resultContext.getResultCount();
      System.out.println("resultCount = " + resultCount);
      Map<String, Object> resultObject = resultContext.getResultObject();
        System.out.println("添加一些其他的业务处理逻辑.....");
        System.out.println("resultObject = " + JSON.toJSONString(resultObject));
        };
        clientMapper.selectMaps(page, queryWrapper, resultHandler);
        }

输出日志:

2026-01-27T16:48:36.989+08:00  INFO 30844 --- [springboot3-mybatisplus] [           main] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Start completed.
JDBC Connection [HikariProxyConnection@651316602 wrapping com.mysql.cj.jdbc.ConnectionImpl@23708f14] will not be managed by Spring
==>  Preparing: SELECT id,client_id,user_no,user_password,nick_name,real_name,created_time,upated_time FROM client WHERE (user_no LIKE ?) LIMIT ?
==> Parameters: %a%(String), 2(Long)
<==    Columns: id, client_id, user_no, user_password, nick_name, real_name, created_time, upated_time
<==        Row: 6, 6, YF5czlv7H9A, Zu5quIbizO6FTfremgOJIiLW18guNF61, 銩るdè心喓怎庅収佪, 舒有许, 2026-01-26 07:22:25, 2026-01-26 07:22:25
resultCount = 1
添加一些其他的业务处理逻辑.....
resultObject = {"created_time":"2026-01-26 07:22:25","user_password":"Zu5quIbizO6FTfremgOJIiLW18guNF61","nick_name":"銩るdè心喓怎庅収佪","upated_time":"2026-01-26 07:22:25","real_name":"舒有许","id":6,"client_id":6,"user_no":"YF5czlv7H9A"}
<==        Row: 17, 17, 2zDaBMM7WBM, 2T1sQwF5RuSHepE79aFSl4VfmyEu1Dn6, 分了、我来合。, 扶一些, 2026-01-26 07:22:25, 2026-01-26 07:22:25
resultCount = 2
添加一些其他的业务处理逻辑.....
resultObject = {"created_time":"2026-01-26 07:22:25","user_password":"2T1sQwF5RuSHepE79aFSl4VfmyEu1Dn6","nick_name":"分了、我来合。","upated_time":"2026-01-26 07:22:25","real_name":"扶一些","id":17,"client_id":17,"user_no":"2zDaBMM7WBM"}
<==      Total: 2
Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@6efd0a6e]

selectMapsPage

官网 API

/**
* 根据 Wrapper 条件,查询全部记录(并翻页)
*
* @param page         分页查询条件
* @param queryWrapper 实体对象封装操作类
*/
default <P extends IPage<Map<String, Object>>> P selectMapsPage(P page, @Param(Constants.WRAPPER) Wrapper<T> queryWrapper) {
  page.setRecords(selectMaps(page, queryWrapper));
  return page;
  }

Demo 示例:

@Test
public void testSelectMapsPage() {
// 分页
int pageIndex = 1;
int pageSize = 2;
IPage<Map<String, Object>> page = new Page<>(pageIndex, pageSize);
  // 查询条件.
  QueryWrapper<ClientEntity> queryWrapper = new QueryWrapper<>();
    queryWrapper.lambda()
    .like(ClientEntity::getUserNo, "a");
    IPage<Map<String, Object>> mapsPage = clientMapper.selectMapsPage(page, queryWrapper);
      System.out.println("mapsPage = " + JSON.toJSONString(mapsPage));
      }

输出日志:

2026-01-27T16:53:41.722+08:00  INFO 33756 --- [springboot3-mybatisplus] [           main] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Start completed.
JDBC Connection [HikariProxyConnection@104893413 wrapping com.mysql.cj.jdbc.ConnectionImpl@2299f6d7] will not be managed by Spring
==>  Preparing: SELECT COUNT(*) AS total FROM client WHERE (user_no LIKE ?)
==> Parameters: %a%(String)
<==    Columns: total
<==        Row: 24
<==      Total: 1
==>  Preparing: SELECT id,client_id,user_no,user_password,nick_name,real_name,created_time,upated_time FROM client WHERE (user_no LIKE ?) LIMIT ?
==> Parameters: %a%(String), 2(Long)
<==    Columns: id, client_id, user_no, user_password, nick_name, real_name, created_time, upated_time
<==        Row: 6, 6, YF5czlv7H9A, Zu5quIbizO6FTfremgOJIiLW18guNF61, 銩るdè心喓怎庅収佪, 舒有许, 2026-01-26 07:22:25, 2026-01-26 07:22:25
<==        Row: 17, 17, 2zDaBMM7WBM, 2T1sQwF5RuSHepE79aFSl4VfmyEu1Dn6, 分了、我来合。, 扶一些, 2026-01-26 07:22:25, 2026-01-26 07:22:25
<==      Total: 2
Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@71b3ba5a]
mapsPage = {"current":1,"pages":12,"records":[{"created_time":"2026-01-26 07:22:25","user_password":"Zu5quIbizO6FTfremgOJIiLW18guNF61","nick_name":"銩るdè心喓怎庅収佪","upated_time":"2026-01-26 07:22:25","real_name":"舒有许","id":6,"client_id":6,"user_no":"YF5czlv7H9A"},{"created_time":"2026-01-26 07:22:25","user_password":"2T1sQwF5RuSHepE79aFSl4VfmyEu1Dn6","nick_name":"分了、我来合。","upated_time":"2026-01-26 07:22:25","real_name":"扶一些","id":17,"client_id":17,"user_no":"2zDaBMM7WBM"}],"size":2,"total":24}

selectObjs

官网 API

/**
* 根据 Wrapper 条件,查询全部记录
* <p>注意: 只返回第一个字段的值</p>
*
* @param queryWrapper 实体对象封装操作类(可以为 null)
*/
<E> List<E> selectObjs(@Param(Constants.WRAPPER) Wrapper<T> queryWrapper);

Demo 示例:

@Test
public void testSelectObjs() {
// 查询条件.
QueryWrapper<ClientEntity> queryWrapper = new QueryWrapper<>();
  queryWrapper.lambda()
  .like(ClientEntity::getUserNo, "YF5czlv7H9A");
  List<Object> objects = clientMapper.selectObjs(queryWrapper);
    System.out.println("objects = " + JSON.toJSONString(objects));
    }

输出日志:

2026-01-27T16:57:14.890+08:00  INFO 23792 --- [springboot3-mybatisplus] [           main] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Start completed.
JDBC Connection [HikariProxyConnection@1330447795 wrapping com.mysql.cj.jdbc.ConnectionImpl@4449b273] will not be managed by Spring
==>  Preparing: SELECT id,client_id,user_no,user_password,nick_name,real_name,created_time,upated_time FROM client WHERE (user_no LIKE ?)
==> Parameters: %YF5czlv7H9A%(String)
<==    Columns: id, client_id, user_no, user_password, nick_name, real_name, created_time, upated_time
<==        Row: 6, 6, YF5czlv7H9A, Zu5quIbizO6FTfremgOJIiLW18guNF61, 銩るdè心喓怎庅収佪, 舒有许, 2026-01-26 07:22:25, 2026-01-26 07:22:25
<==      Total: 1
Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@7f4f1536]
objects = [6]

selectObjs 回调

官网 API:

/**
* 根据 Wrapper 条件,查询全部记录
* <p>注意: 只返回第一个字段的值</p>
*
* @param queryWrapper  实体对象封装操作类(可以为 null)
* @param resultHandler 结果处理器 {@link ResultHandler}
* @since 3.5.4
*/
<E> void selectObjs(@Param(Constants.WRAPPER) Wrapper<T> queryWrapper, ResultHandler<E> resultHandler);

Demo 示例:

@Test
public void testSelectObjs_02() {
// 查询条件.
QueryWrapper<ClientEntity> queryWrapper = new QueryWrapper<>();
  queryWrapper.lambda()
  .like(ClientEntity::getUserNo, "YF5czlv7H9A");
  // 回调
  ResultHandler<Object> resultHandler = resultContext -> {
    int resultCount = resultContext.getResultCount();
    System.out.println("resultCount = " + resultCount);
    Object resultObject = resultContext.getResultObject();
    System.out.println("其他的一些处理逻辑...");
    System.out.println("resultObject = " + JSON.toJSONString(resultObject));
    };
    clientMapper.selectObjs(queryWrapper, resultHandler);
    }

输出日志:

2026-01-27T17:05:59.813+08:00  INFO 17812 --- [springboot3-mybatisplus] [           main] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Start completed.
JDBC Connection [HikariProxyConnection@1468241972 wrapping com.mysql.cj.jdbc.ConnectionImpl@2739ecc0] will not be managed by Spring
==>  Preparing: SELECT id,client_id,user_no,user_password,nick_name,real_name,created_time,upated_time FROM client WHERE (user_no LIKE ?)
==> Parameters: %YF5czlv7H9A%(String)
<==    Columns: id, client_id, user_no, user_password, nick_name, real_name, created_time, upated_time
<==        Row: 6, 6, YF5czlv7H9A, Zu5quIbizO6FTfremgOJIiLW18guNF61, 銩るdè心喓怎庅収佪, 舒有许, 2026-01-26 07:22:25, 2026-01-26 07:22:25
resultCount = 1
其他的一些处理逻辑...
resultObject = 6
<==      Total: 1
Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@77d0dbba]

selectOne

官网 API:

/**
* 根据 entity 条件,查询一条记录
* <p>查询一条记录,例如 qw.last("limit 1") 限制取一条记录, 注意:多条数据会报异常</p>
*
* @param queryWrapper 实体对象封装操作类(可以为 null)
*/
default T selectOne(@Param(Constants.WRAPPER) Wrapper<T> queryWrapper) {
return this.selectOne(queryWrapper, true);
}

Demo 示例:

@Test
public void testSelectOne() {
/**
* 说明:
*  selectOne 方法调用,如果查询条件的结果会返回多条数据,则会报错。
*/
// 查询条件
QueryWrapper<ClientEntity> queryWrapper = new QueryWrapper<>();
  queryWrapper.lambda()
  .eq(ClientEntity::getId, 1);
  ClientEntity clientEntity = clientMapper.selectOne(queryWrapper);
  System.out.println("clientEntity = " + JSON.toJSONString(clientEntity));
  }

输出日志:

2026-01-27T17:09:18.009+08:00  INFO 29980 --- [springboot3-mybatisplus] [           main] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Start completed.
JDBC Connection [HikariProxyConnection@1206577437 wrapping com.mysql.cj.jdbc.ConnectionImpl@34bf66af] will not be managed by Spring
==>  Preparing: SELECT id,client_id,user_no,user_password,nick_name,real_name,created_time,upated_time FROM client WHERE (id = ?)
==> Parameters: 1(Integer)
<==    Columns: id, client_id, user_no, user_password, nick_name, real_name, created_time, upated_time
<==        Row: 1, 1, Bnyq6t, H7xTsUwWRG3AtEx3uJ2tBh9XtKbUzwvI, 孤胆英雄, 井是一, 2026-01-26 07:22:24, 2026-01-26 07:22:24
<==      Total: 1
Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@69069866]
clientEntity = {"clientId":1,"createdTime":"2026-01-26 07:22:24","id":1,"nickName":"孤胆英雄","realName":"井是一","upatedTime":"2026-01-26 07:22:24","userNo":"Bnyq6t","userPassword":"H7xTsUwWRG3AtEx3uJ2tBh9XtKbUzwvI"}

selectOne 异常控制

如下根据官网 API 注解信息+源码,可知:第2个参数(boolean)用来控制当筛选结果是多条时,是否打印异常信息?还是默认取第1条数据。
故此处不再做 Demo 演示。

官网 API:

/**
* 根据 entity 条件,查询一条记录,现在会根据{@code throwEx}参数判断是否抛出异常,如果为false就直接返回一条数据
* <p>查询一条记录,例如 qw.last("limit 1") 限制取一条记录, 注意:多条数据会报异常</p>
*
* @param queryWrapper 实体对象封装操作类(可以为 null)
* @param throwEx      boolean 参数,为true如果存在多个结果直接抛出异常
*/
default T selectOne(@Param(Constants.WRAPPER) Wrapper<T> queryWrapper, boolean throwEx) {
List<T> list = this.selectList(queryWrapper);
  int size = list.size();
  if (size == 1) {
  return list.get(0);
  } else if (size > 1) {
  if (throwEx) {
  throw new TooManyResultsException("Expected one result (or null) to be returned by selectOne(), but found: " + size);
  }
  return list.get(0);
  }
  return null;
  }

selectPage

官网 API

/**
* 根据 entity 条件,查询全部记录(并翻页)
*
* @param page         分页查询条件
* @param queryWrapper 实体对象封装操作类(可以为 null)
*/
default <P extends IPage<T>> P selectPage(P page, @Param(Constants.WRAPPER) Wrapper<T> queryWrapper) {
  page.setRecords(selectList(page, queryWrapper));
  return page;
  }

Demo 示例:

@Test
public void testSelectPage() {
// 分页
int pageIndex = 1;
int pageSize = 2;
IPage<ClientEntity> page = new Page<>(pageIndex, pageSize);
  // 查询条件.
  QueryWrapper<ClientEntity> queryWrapper = new QueryWrapper<>();
    queryWrapper.lambda()
    .like(ClientEntity::getUserNo, "a");
    IPage<ClientEntity> selectPage = clientMapper.selectPage(page, queryWrapper);
      System.out.println("selectPage = " + JSON.toJSONString(selectPage));
      }

输出日志:

2026-01-27T17:15:30.862+08:00  INFO 38892 --- [springboot3-mybatisplus] [           main] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Start completed.
JDBC Connection [HikariProxyConnection@104664717 wrapping com.mysql.cj.jdbc.ConnectionImpl@5a1c7619] will not be managed by Spring
==>  Preparing: SELECT COUNT(*) AS total FROM client WHERE (user_no LIKE ?)
==> Parameters: %a%(String)
<==    Columns: total
<==        Row: 24
<==      Total: 1
==>  Preparing: SELECT id,client_id,user_no,user_password,nick_name,real_name,created_time,upated_time FROM client WHERE (user_no LIKE ?) LIMIT ?
==> Parameters: %a%(String), 2(Long)
<==    Columns: id, client_id, user_no, user_password, nick_name, real_name, created_time, upated_time
<==        Row: 6, 6, YF5czlv7H9A, Zu5quIbizO6FTfremgOJIiLW18guNF61, 銩るdè心喓怎庅収佪, 舒有许, 2026-01-26 07:22:25, 2026-01-26 07:22:25
<==        Row: 17, 17, 2zDaBMM7WBM, 2T1sQwF5RuSHepE79aFSl4VfmyEu1Dn6, 分了、我来合。, 扶一些, 2026-01-26 07:22:25, 2026-01-26 07:22:25
<==      Total: 2
Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@64c95480]
selectPage = {"current":1,"pages":12,"records":[{"clientId":6,"createdTime":"2026-01-26 07:22:25","id":6,"nickName":"銩るdè心喓怎庅収佪","realName":"舒有许","upatedTime":"2026-01-26 07:22:25","userNo":"YF5czlv7H9A","userPassword":"Zu5quIbizO6FTfremgOJIiLW18guNF61"},{"clientId":17,"createdTime":"2026-01-26 07:22:25","id":17,"nickName":"分了、我来合。","realName":"扶一些","upatedTime":"2026-01-26 07:22:25","userNo":"2zDaBMM7WBM","userPassword":"2T1sQwF5RuSHepE79aFSl4VfmyEu1Dn6"}],"size":2,"total":24}

若有转载,请标明出处:https://blog.csdn.net/CharlesYuangc/article/details/157432114

posted @ 2026-03-04 20:01  gccbuaa  阅读(57)  评论(0)    收藏  举报