mybatis-plus 基于 Mapper接口的 select 📅 发布时间:2026/7/12 7:26:40 👁️ 浏览次数: 文章目录基于BaseMapper的crud总结前置准备必看各方法使用示例在 UserService 中编写1. selectById根据 ID 查询单个实体2. selectOne根据条件查询单个记录3. selectBatchIds批量根据 ID 查询4. selectList根据条件查询全部记录5. selectByMap根据 Map 条件查询6. selectMaps查询结果转 Map 列表7. selectObjs只返回第一个字段的值8. selectPage分页查询需先配置分页插件9. selectMapsPage分页查询结果转 Map10. selectCount查询符合条件的总记录数基于BaseMapper的crud通用 CRUD 封装 BaseMapper接口Mybatis-Plus 启动时自动解析实体表关系映射转换为 Mybatis 内部对象注入容器内部包含常见的单表操作总结条件构建优先使用LambdaQueryWrapper替代QueryWrapper避免硬编码数据库列名导致错误。关键注意点selectOne条件匹配多条记录会抛异常仅用于“唯一条件”场景selectByMapMap 的 key 是数据库列名不是实体属性名selectPage必须先配置分页插件否则分页失效只会查所有数据空值处理selectList/selectMaps无匹配结果时返回空 List不是 null无需额外判空。前置准备必看先定义通用的实体类、Mapper 接口和注入方式后续示例都基于此// 1. 实体类对应数据库 user 表DataTableName(user)// 指定数据库表名publicclassUser{TableId(typeIdType.AUTO)// 主键自增privateLongid;// 数据库字段id (BIGINT)privateStringuserName;// 数据库字段user_name (VARCHAR)privateIntegerage;// 数据库字段age (INT)privateStringemail;// 数据库字段email (VARCHAR)}// 2. Mapper 接口继承 BaseMapperpublicinterfaceUserMapperextendsBaseMapperUser{}// 3. Spring Boot 环境下注入 MapperService 层示例ServicepublicclassUserService{AutowiredprivateUserMapperuserMapper;// 注入 Mapper后续示例都用这个对象}各方法使用示例在 UserService 中编写1. selectById根据 ID 查询单个实体// 根据 ID1 查询用户publicUsergetUserById(Longid){// 参数主键 ID支持 Integer/Long/String 等 Serializable 类型UseruseruserMapper.selectById(1L);returnuser;}// 输出示例User(id1, userName张三, age20, emailzhangsantest.com)2. selectOne根据条件查询单个记录注意如果匹配结果超过 1 条会抛出TooManyResultsException异常适合确定条件唯一的场景。// 根据用户名查询单个用户假设 userName 唯一publicUsergetUserByUserName(StringuserName){// 构建查询条件eq equals等于QueryWrapperUserqueryWrappernewQueryWrapperUser().eq(user_name,userName);// 这里填数据库列名或用 lambda 避免硬编码// Lambda 写法推荐避免列名写错// LambdaQueryWrapperUser lambdaWrapper new LambdaQueryWrapperUser()// .eq(User::getUserName, userName);UseruseruserMapper.selectOne(queryWrapper);returnuser;}// 输入userName张三 → 输出唯一匹配的 User 对象无结果返回 null3. selectBatchIds批量根据 ID 查询// 批量查询 ID1、2、3 的用户publicListUserlistUserByIds(){// 参数ID 集合List/Set 等 Collection 类型ListLongidListArrays.asList(1L,2L,3L);ListUseruserListuserMapper.selectBatchIds(idList);returnuserList;}// 输出包含 3 个 User 对象的 List无匹配 ID 则对应位置无数据4. selectList根据条件查询全部记录// 查询年龄大于 18 且邮箱不为空的用户publicListUserlistUserByCondition(){QueryWrapperUserqueryWrappernewQueryWrapperUser().gt(age,18)// gt greater than大于.isNotNull(email);// 邮箱不为空ListUseruserListuserMapper.selectList(queryWrapper);returnuserList;}// 输出所有符合条件的 User 对象列表无结果返回空 List不会为 null5. selectByMap根据 Map 条件查询关键Map 的key 是数据库列名不是实体属性名value 是匹配值条件默认是“等于”。// 查询 age20 且 user_name张三 的用户publicListUserlistUserByMap(){MapString,ObjectcolumnMapnewHashMap();columnMap.put(age,20);// 数据库列名agecolumnMap.put(user_name,张三);// 数据库列名user_name不是 userNameListUseruserListuserMapper.selectByMap(columnMap);returnuserList;}// 输出符合条件的 User 列表多条件默认 AND 关系6. selectMaps查询结果转 Map 列表适合不需要实体类、只需要部分字段的场景Map 的 key 是数据库列名value 是字段值。// 查询年龄18的用户的 id 和 user_namepublicListMapString,ObjectlistUserMap(){QueryWrapperUserqueryWrappernewQueryWrapperUser().select(id,user_name)// 只查询指定列减少数据传输.gt(age,18);ListMapString,ObjectmapListuserMapper.selectMaps(queryWrapper);returnmapList;}// 输出示例[{id1, user_name张三}, {id2, user_name李四}]7. selectObjs只返回第一个字段的值不管查询的是哪些列只取结果集中第一列的值适合只需要主键 ID 列表的场景。// 查询所有年龄18的用户的 ID只取第一列publicListObjectlistUserId(){QueryWrapperUserqueryWrappernewQueryWrapperUser().select(id)// 显式指定第一列为 id推荐.gt(age,18);ListObjectidListuserMapper.selectObjs(queryWrapper);returnidList;}// 输出示例[1, 2, 3]Long 类型的 ID 被封装为 Object8. selectPage分页查询需先配置分页插件第一步先配置 MyBatis-Plus 分页插件Spring Boot 配置类ConfigurationpublicclassMyBatisPlusConfig{BeanpublicMybatisPlusInterceptormybatisPlusInterceptor(){MybatisPlusInterceptorinterceptornewMybatisPlusInterceptor();// 添加分页插件适配 MySQLinterceptor.addInnerInterceptor(newPaginationInnerInterceptor(DbType.MYSQL));returninterceptor;}}第二步分页查询示例// 分页查询第 1 页每页 10 条条件age18publicIPageUserpageUser(intpageNum,intpageSize){// 1. 构建分页对象页码从 1 开始不是 0IPageUserpagenewPage(pageNum,pageSize);// 2. 构建查询条件QueryWrapperUserqueryWrappernewQueryWrapperUser().gt(age,18);// 3. 分页查询结果会自动封装到 page 对象中IPageUseruserPageuserMapper.selectPage(page,queryWrapper);// 分页结果常用属性longtotaluserPage.getTotal();// 总记录数longpagesuserPage.getPages();// 总页数ListUserrecordsuserPage.getRecords();// 当前页数据列表returnuserPage;}// 调用pageUser(1, 10) → 输出第 1 页的 10 条数据及总记录数/总页数9. selectMapsPage分页查询结果转 Map用法和 selectPage 一致只是返回结果是 Map 列表适合不需要实体类的场景// 分页查询第 1 页每页 10 条只查 id 和 user_namepublicIPageMapString,ObjectpageUserMap(intpageNum,intpageSize){IPageMapString,ObjectpagenewPage(pageNum,pageSize);QueryWrapperUserqueryWrappernewQueryWrapperUser().select(id,user_name).gt(age,18);IPageMapString,ObjectmapPageuserMapper.selectMapsPage(page,queryWrapper);returnmapPage;}// 输出分页对象中 records 是 Map 列表包含 id 和 user_name 字段10. selectCount查询符合条件的总记录数// 查询年龄18的用户总数publicIntegercountUserByAge(){QueryWrapperUserqueryWrappernewQueryWrapperUser().gt(age,18);IntegercountuserMapper.selectCount(queryWrapper);returncount;}// 输出符合条件的记录数比如 50
基于搜索的剪枝方法 https://cs.nju.edu.cn/wujx/paper/Pruning_Survey_MLA21.pdf一、先给你打个总比喻:剪枝到底在干嘛? 我们可以把神经网络看成一栋超级大别墅: 房间太多、走廊太宽,跑起来慢、占地大(模型大、FLOPs高、推理慢࿰… 2026/7/11 11:54:42
AI写论文必知!4款AI论文写作工具,让你告别论文写作的烦恼! 在期刊论文写作上感到烦恼吗? 面对繁杂的文献资料和格式要求,很多学术研究者常常会陷入低效率的写作困境。别担心,接下来我将为大家介绍四款实用的AI论文写作工具,这些工具能够从文献检索、论文大纲设计到语言润色,全… 2026/7/12 1:23:14
[特殊字符] GenBI:轻松查询数据库,快速生成商业智能报告! Wren AI - 开源的生成式商业智能代理 在数据驱动的时代,快速获取准确的信息至关重要。 Wren AI(Generative BI)通过自然语言查询任何数据库,快速生成准确的 SQL 语句(Text-to-SQL)和图表(Text-… 2026/7/11 22:21:40
第6章数据库设计基础知识 第6章 数据库设计基础知识 6.1 数据库基本概念 核心概念 数据库系统(DBS):由数据库(DB)、数据库管理系统(DBMS)、数据库管理员(DBA)、应用程序与用户、数据五部分组成。三… 2026/7/12 23:03:01
GTA5线上小助手:如何用免费开源工具彻底改变你的游戏体验? GTA5线上小助手:如何用免费开源工具彻底改变你的游戏体验? 【免费下载链接】GTA5OnlineTools GTA5线上小助手 项目地址: https://gitcode.com/gh_mirrors/gt/GTA5OnlineTools 还在为GTA5线上模式中的重复任务、有限的自定义选项和繁琐的操作感到困… 2026/7/12 23:00:59
基于HarmonyOS的情侣美食管理应用开发实战(十三)- 修复主页菜谱列表不显示问题 基于HarmonyOS的情侣美食管理应用开发实战(一)- 修复主页菜谱列表不显示问题 问题现象 在 HarmonyOS 应用开发过程中,遇到了一个奇怪的问题: 主页"我的菜谱"模块:显示"共4个",但列表… 2026/7/12 23:00:59
Creative View Pager深度解析:10个高级定制技巧与最佳实践 Creative View Pager深度解析:10个高级定制技巧与最佳实践 【免费下载链接】creative-viewpager Creative View Pager easy to use in Android 项目地址: https://gitcode.com/gh_mirrors/cr/creative-viewpager Creative View Pager是一个功能强大的Android… 2026/7/12 22:58:58
WebSocket 异常处理最佳实践:基于 gh_mirrors/webso/websocket-client 的完整指南 [特殊字符] WebSocket 异常处理最佳实践:基于 gh_mirrors/webso/websocket-client 的完整指南 🚀 【免费下载链接】websocket-client 🔧 .NET/C# websocket client library 项目地址: https://gitcode.com/gh_mirrors/webso/websocket-client 在实… 2026/7/12 22:58:58
YOLO11 改进 - 特征融合 | SMMM结构感知多尺度掩码模块,筛除冗余、强化边界与语义交互,助力图像分割高效涨点 | AAAI 2026 前言 本文介绍了结构感知多尺度掩码模块——SMMM,用于优化编码器与解码器之间的特征融合。该方法通过多尺度深度可分离卷积捕获不同感受野下的边缘、纹理与结构信息,并利用结构显著性掩码对关键区域进行自适应筛选,抑制背景噪声与冗余特征。… 2026/7/12 22:58:58
Git reset 与 revert 深度对比:5个关键差异与 3 种典型应用场景 Git Reset 与 Revert 深度对比:5个关键差异与3种典型应用场景在团队协作开发中,代码版本管理如同行走钢丝——一步失误可能导致整个项目陷入混乱。作为Git进阶用户,你是否曾在深夜面对错误的提交束手无策?是否在强制推送后收到同事… 2026/7/12 0:01:13
GitHub 学生包申请避坑:5个常见失败原因与开发者工具调试方案 GitHub 学生包申请技术排障指南:5个高频失败场景与开发者工具实战方案第一次尝试申请GitHub学生包时,我盯着屏幕上那个不断转圈的加载动画整整15分钟,最终只等来了一行冰冷的错误提示。这可能是许多开发者共同的经历——明明按照教程操作&… 2026/7/12 0:01:13
冒烟测试用例设计规范:5%-10%覆盖率下的3类核心场景与执行标准 冒烟测试用例设计的黄金法则:5%-10%覆盖率下的精准筛选策略在快节奏的敏捷开发环境中,冒烟测试作为质量保障的第一道防线,其重要性不言而喻。当测试资源有限而时间紧迫时,如何从海量测试用例中精准筛选出那关键的5%-10%࿰… 2026/7/12 0:03:14
Git reset 与 revert 深度对比:5个关键差异与 3 种典型应用场景 Git Reset 与 Revert 深度对比:5个关键差异与3种典型应用场景在团队协作开发中,代码版本管理如同行走钢丝——一步失误可能导致整个项目陷入混乱。作为Git进阶用户,你是否曾在深夜面对错误的提交束手无策?是否在强制推送后收到同事… 2026/7/12 0:01:13
GitHub 学生包申请避坑:5个常见失败原因与开发者工具调试方案 GitHub 学生包申请技术排障指南:5个高频失败场景与开发者工具实战方案第一次尝试申请GitHub学生包时,我盯着屏幕上那个不断转圈的加载动画整整15分钟,最终只等来了一行冰冷的错误提示。这可能是许多开发者共同的经历——明明按照教程操作&… 2026/7/12 0:01:13
冒烟测试用例设计规范:5%-10%覆盖率下的3类核心场景与执行标准 冒烟测试用例设计的黄金法则:5%-10%覆盖率下的精准筛选策略在快节奏的敏捷开发环境中,冒烟测试作为质量保障的第一道防线,其重要性不言而喻。当测试资源有限而时间紧迫时,如何从海量测试用例中精准筛选出那关键的5%-10%࿰… 2026/7/12 0:03:14