SpringBoot3 MybatisPlus 查询(Mapper)
- 前言
- 配置分页插件
-
- [pom.xml 文件](#pom.xml 文件)
- 添加配置文件
- [查询 API](#查询 API)
-
- selectById
- selectByIds
- [selectByIds 回调](#selectByIds 回调)
- selectByMap
- [selectByMap 回调](#selectByMap 回调)
- selectCount
- selectList
- [selectList 回调](#selectList 回调)
- [select 分页](#select 分页)
- [select 分页+回调](#select 分页+回调)
- selectMaps
- [selectMaps 回调](#selectMaps 回调)
- [selectMaps 分页](#selectMaps 分页)
- [selectMaps 分页+回调](#selectMaps 分页+回调)
- selectMapsPage
- selectObjs
- [selectObjs 回调](#selectObjs 回调)
- selectOne
- [selectOne 异常控制](#selectOne 异常控制)
- selectPage
前言
本篇中使用到的项目工程是在《SpringBoot3 MybatisPlus 加入日志功能》基础上,持续功能开发。
对于即将过期的方法将不再举例说明。

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

pom.xml 文件
xml
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-jsqlparser</artifactId>
<version>3.5.15</version>
</dependency>
添加配置文件
java
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
java
/**
* 根据 ID 查询
*
* @param id 主键ID
*/
T selectById(Serializable id);
Demo 示例:
java
@Test
public void testSelectById() {
ClientEntity clientEntity = clientMapper.selectById(1L);
System.out.println("clientEntity = " + JSON.toJSONString(clientEntity));
}
输出日志:

selectByIds
官网 API
java
/**
* 查询(根据ID 批量查询)
*
* @param idList 主键ID列表(不能为 null 以及 empty)
* @return 数据列表
*/
List<T> selectByIds(@Param(Constants.COLL) Collection<? extends Serializable> idList);
Demo 示例:
java
@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
java
/**
* 查询(根据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 示例:
java
@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
java
/**
* 查询(根据 columnMap 条件)
*
* @param columnMap 表字段 map 对象
*/
default List<T> selectByMap(Map<String, Object> columnMap) {
return this.selectList(Wrappers.<T>query().allEq(columnMap));
}
Demo 示例:
java
@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
java
/**
* 查询(根据 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 示例:
java
@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
java
/**
* 根据 Wrapper 条件,查询总记录数
*
* @param queryWrapper 实体对象封装操作类(可以为 null)
*/
Long selectCount(@Param(Constants.WRAPPER) Wrapper<T> queryWrapper);
Demo 示例:
java
@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
java
/**
* 根据 entity 条件,查询全部记录
*
* @param queryWrapper 实体对象封装操作类(可以为 null)
*/
List<T> selectList(@Param(Constants.WRAPPER) Wrapper<T> queryWrapper);
Demo 示例:
java
@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));
}
输出日志:
java
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
java
/**
* 根据 entity 条件,查询全部记录
*
* @param queryWrapper 实体对象封装操作类(可以为 null)
* @param resultHandler 结果处理器 {@link ResultHandler}
* @since 3.5.4
*/
void selectList(@Param(Constants.WRAPPER) Wrapper<T> queryWrapper, ResultHandler<T> resultHandler);
Demo 示例:
java
@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);
}
输出日志:
java
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
java
/**
* 根据 entity 条件,查询全部记录(并翻页)
*
* @param page 分页查询条件
* @param queryWrapper 实体对象封装操作类(可以为 null)
* @since 3.5.3.2
*/
List<T> selectList(IPage<T> page, @Param(Constants.WRAPPER) Wrapper<T> queryWrapper);
Demo 示例:
java
@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));
}
输出日志:
java
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
java
/**
* 根据 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 示例:
java
@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);
}
输出日志:
java
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
java
/**
* 根据 Wrapper 条件,查询全部记录
*
* @param queryWrapper 实体对象封装操作类
*/
List<Map<String, Object>> selectMaps(@Param(Constants.WRAPPER) Wrapper<T> queryWrapper);
Demo 示例:
java
@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));
}
输出日志:
java
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
java
/**
* 根据 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 示例:
java
@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);
}
输出日志:
java
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
java
/**
* 根据 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 示例:
java
@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));
}
输出日志:
java
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
java
/**
* 根据 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 示例:
java
@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);
}
输出日志:
java
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
java
/**
* 根据 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 示例:
java
@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));
}
输出日志:
java
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
java
/**
* 根据 Wrapper 条件,查询全部记录
* <p>注意: 只返回第一个字段的值</p>
*
* @param queryWrapper 实体对象封装操作类(可以为 null)
*/
<E> List<E> selectObjs(@Param(Constants.WRAPPER) Wrapper<T> queryWrapper);
Demo 示例:
java
@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));
}
输出日志:
java
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:
java
/**
* 根据 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 示例:
java
@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);
}
输出日志:
java
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:
java
/**
* 根据 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 示例:
java
@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));
}
输出日志:
java
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:
java
/**
* 根据 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
java
/**
* 根据 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 示例:
java
@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));
}
输出日志:
java
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