【04】SpringBoot3 MybatisPlus 查询(Mapper)

SpringBoot3 MybatisPlus 查询(Mapper)

前言

本篇中使用到的项目工程是在《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

相关推荐
人道领域2 小时前
javaWeb从入门到进阶(SpringBoot基础案例)
java·开发语言·spring
u0104058362 小时前
利用Java CompletableFuture优化企业微信批量消息发送的异步编排
java·开发语言·企业微信
yangminlei2 小时前
SpringSecurity核心源码剖析+jwt+OAuth(一):SpringSecurity的初次邂逅(概念、认证、授权)
java·开发语言·python
小张快跑。2 小时前
【SpringBoot进阶指南(一)】SpringBoot整合MyBatis实战、Bean管理、自动配置原理、自定义starter
java·开发语言·spring boot
A懿轩A2 小时前
【2026 最新】Java 与 IntelliJ IDEA 详细下载安装教程 带图演示(Windows 版)
java·windows·intellij-idea
好好沉淀2 小时前
maven依赖爆红处理
java·maven
草履虫建模2 小时前
A02 Maven 基础配置:本地仓库、镜像、项目编码与常见问题(IDEA 实战)
xml·java·spring boot·spring·maven·intellij-idea·idea
编程之升级打怪2 小时前
Intellij IDEA常用快捷方式
java·intellij-idea
java1234_小锋2 小时前
Java项目中如何选择垃圾回收器?
java·开发语言