MyBatis-Plus学习
一、MyBatis-Plus 基础核心定义是 MyBatis 的增强工具只做增强不做改变简化开发、提高效率提供通用 Mapper/Service无需编写 SQL 即可实现单表 CRUD、批量、逻辑删除、分页等操作。核心特性无侵入、损耗小、强大 CRUD 操作、支持 Lambda 调用、主键自动生成、支持 ActiveRecord 模式、自定义全局通用操作、内置代码生成器 / 分页插件 / 性能分析插件 / 全局拦截插件等。支持数据库MySQL、Oracle、DB2、H2、PostgreSQL、SQLServer 等及达梦、人大金仓等国产数据库。官方地址官网http://mp.baomidou.com文档https://baomidou.com/pages/24112f代码托管在 Github/Gitee。开发环境要求IDEIDEA、JDK8、Maven3.5.4、MySQL5.7、SpringBoot2.6.3、MyBatis-Plus3.5.1。二、入门案例实现数据库准备创建数据库mybatis_plus建user表并插入测试数据包含id(bigint)、name(varchar)、age(int)、email(varchar)字段。工程搭建初始化 Spring Boot 工程引入核心依赖mybatis-plus-boot-starter、lombok、mysql-connector-java、spring-boot-starter-test。IDEA 安装 Lombok 插件解决注解编译问题。核心配置application.yml配置数据源HikariDataSource区分 SpringBoot2.0/2.1 的驱动类MySQL5.7/8.0 的 URL 格式。启动类添加MapperScan注解扫描 Mapper 接口包。代码编写实体类使用DataLombok简化 get/set 等方法。Mapper 接口继承 MyBatis-Plus 的BaseMapperT泛型接口无需编写方法。测试注入 Mapper调用selectList(null)查询所有数据null 表示无查询条件。日志配置在application.yml中配置 MyBatis 日志实现为org.apache.ibatis.logging.stdout.StdOutImpl打印执行的 SQL 语句。三、基本 CRUD 操作1. 基于 BaseMapperBaseMapperT内置单表 CRUD 所有方法核心方法如下插入insert(T entity)默认基于雪花算法生成主键 ID。删除deleteById(Serializable id)单 ID 删除、deleteBatchIds(Collection idList)批量 ID 删除、deleteByMap(Map columnMap)条件删除。修改updateById(T entity)根据 ID 修改非 null 字段才更新。查询selectById(Serializable id)单 ID 查询、selectBatchIds(Collection idList)批量 ID 查询、selectByMap(Map columnMap)条件查询、selectList(Wrapper wrapper)条件查询列表、selectCount(Wrapper wrapper)查询总数。2. 基于通用 ServiceMyBatis-Plus 封装IServiceT和实现类ServiceImplM extends BaseMapperT, T进一步封装 CRUD区分 Mapper 层命名如get查单行、remove删除、list查集合、page分页。步骤Service 接口继承IServiceT实现类继承ServiceImplMapper, 实体并实现自定义接口。核心方法count()查询总记录数、saveBatch(Collection entityList)批量插入解决 SQL 长度限制问题。四、常用注解1. TableName作用解决实体类名与数据库表名不一致的问题。使用在实体类上标注TableName(表名)如TableName(t_user)。全局配置在application.yml中配置mybatis-plus.global-config.db-config.table-prefix统一设置表前缀如t_无需每个实体单独标注。2. TableId作用标识实体类的主键属性解决主键字段名与实体属性名不一致、主键策略自定义问题。核心属性value指定数据库表的主键字段名如实体属性id对应表字段uid标注TableId(value uid)。type指定主键策略常用IdType.ASSIGN_ID默认雪花算法与数据库自增无关、IdType.AUTO数据库自增需保证表主键设置自增。全局主键策略在application.yml中配置mybatis-plus.global-config.db-config.id-type统一设置所有表的主键策略。雪花算法分布式主键生成算法64bit 长整型包含 1bit 符号位、41bit 时间戳、10bit 机器 ID、12bit 毫秒流水号保证分布式系统主键唯一且有序解决分表后的主键全局唯一问题。3. TableField作用解决实体属性名与数据库字段名不一致的问题。特殊情况实体驼峰命名如userName对应表下划线命名如user_nameMyBatis-Plus 自动转换无需标注非该规则需标注如实体name对应表username标注TableField(username)。4. TableLogic作用实现逻辑删除假删除修改删除状态而非物理删除数据适用于需要数据恢复的场景。实现步骤数据库表添加逻辑删除字段如is_deleted默认值 0 表示未删除。实体类添加对应属性标注TableLogic。调用删除方法时MyBatis-Plus 自动执行UPDATE修改删除状态如is_deleted1查询时自动过滤已删除数据WHERE is_deleted0。五、条件构造器和常用接口1. Wrapper 体系Wrapper 是条件构造抽象类核心子类 / 实现类AbstractWrapper查询条件封装生成 SQL 的 WHERE 子句。QueryWrapper普通查询条件构造器通过字符串指定字段名。UpdateWrapper更新条件构造器可同时封装 SET 子句和 WHERE 子句。LambdaQueryWrapper/LambdaUpdateWrapperLambda 版条件构造器通过实体方法引用指定字段User::getName避免字段名拼写错误推荐使用。2. 核心使用场景QueryWrapper组装查询条件like(字段, 值)、between(字段, 最小值, 最大值)、isNotNull(字段)。组装排序条件orderByDesc(字段)、orderByAsc(字段)。组装删除条件直接作为delete(Wrapper)的参数生成删除条件。条件优先级通过 lambda 表达式and(i - i.条件1().or().条件2())实现括号内的条件优先运算。组装 SELECT 子句select(字段1, 字段2)配合selectMaps()返回 Map 集合避免实体非查询字段为 null。子查询inSql(字段, 子查询SQL)。3. UpdateWrapper专门用于更新操作可通过set(字段, 值)手动设置 SET 子句无需创建实体对象适合只更新部分字段且带复杂条件的场景。4. Condition 条件判断针对用户可选条件如查询时用户名、年龄区间可能为 null通过带condition参数的重载方法判断条件是否成立成立则组装到 SQL 中简化 if-else 代码如like(StringUtils.isNotBlank(username), username, username)。5. Lambda 版 Wrapper 优势通过实体::getField指定字段编译期检查字段名避免运行时因字段名拼写错误导致的异常是开发中的推荐写法。六、核心插件1. 分页插件MyBatis-Plus 内置物理分页插件无需手动编写分页 SQL配置即可使用。配置创建配置类注入MybatisPlusInterceptor添加PaginationInnerInterceptor指定数据库类型如DbType.MYSQL。使用创建PageT(当前页, 每页条数)对象作为selectPage(Page, Wrapper)的参数分页结果封装在 Page 对象中包含数据列表、总记录数、总页数等。自定义 XML 分页Mapper 接口定义方法时将PageT作为第一个参数XML 中编写普通查询 SQLMyBatis-Plus 自动拼接分页条件。2. 乐观锁插件1核心概念乐观锁假设并发操作不会发生冲突更新时检查数据是否被修改若未修改则更新否则失败重试适合读多写少场景。悲观锁假设并发操作一定会发生冲突获取数据时直接加锁阻止其他操作适合写多读少场景。2实现步骤数据库表添加版本号字段如version默认值 0。实体类对应属性标注Version注解。配置类中向MybatisPlusInterceptor添加OptimisticLockerInnerInterceptor。原理查询时获取当前 version更新时执行UPDATE ... SET version version 1 WHERE ... AND version 原版本号版本号不匹配则更新失败。冲突处理更新失败时返回结果为 0重新查询数据获取最新 version再次执行更新操作重试机制。七、通用枚举用于处理数据库中固定值字段如性别、状态避免硬编码数字提高代码可读性。数据库表添加枚举字段如sexint 类型。创建枚举类添加属性使用EnumValue注解标注映射到数据库的属性如EnumValue private Integer sex;。配置扫描枚举在application.yml中设置mybatis-plus.type-enums-package为枚举类所在包。使用实体类直接设置枚举值如user.setSex(SexEnum.MALE)MyBatis-Plus 自动将EnumValue标注的属性值存入数据库。八、代码生成器MyBatis-Plus 内置代码生成器可快速生成 Entity、Mapper、Service、Controller 层代码支持自定义模板引擎。引入依赖mybatis-plus-generator 模板引擎如 Freemarker。快速生成使用FastAutoGenerator配置数据库连接、全局配置作者、输出目录、覆盖已生成文件、包配置父包名、模块名、策略配置需要生成的表名、过滤表前缀、模板引擎执行execute()即可生成代码。九、多数据源适用于纯粹多库、读写分离、一主多从等场景基于dynamic-datasource-spring-boot-starter实现。环境准备创建多个数据库分别存放不同表如mybatis_plus存 user 表mybatis_plus_1存 product 表。引入依赖dynamic-datasource-spring-boot-starter。配置多数据源在application.yml中配置spring.datasource.dynamic设置默认数据源primary、多个数据源master/slave_1的连接信息。指定数据源在 Service/ServiceImpl 类上标注DS(数据源名称)指定该类操作的数据源读写分离场景可在写方法标注主库、读方法标注从库。测试分别注入不同数据源的 Service调用方法可成功操作对应数据库的表。十、MyBatisX 插件作用基于 IDEA 的快速开发插件弥补 MyBatis-Plus 在复杂 SQL、多表联查的不足提高开发效率。核心优势支持 Mapper 接口与 XML 文件的快速跳转、自动生成 SQL 语句、参数提示、结果集映射等具体用法参考官方文档https://baomidou.com/pages/ba5b24/。

相关新闻

警惕!传统AI框架全是坑,OpenFang的这3个设计,才是未来方向

警惕!传统AI框架全是坑,OpenFang的这3个设计,才是未来方向

在 AI 爆发的今天,我们被各种"智能助手"包围。但你是否发现:它们大多只能"等待"你发出指令——你问,它答;你点,它跑。这种被动的模式,正在被一个全新的概念颠覆。 OpenFang 不是一个聊…

2026/7/4 11:45:49 阅读更多 →
RAG存在的问题及解决方案

RAG存在的问题及解决方案

大家好~ 今天给大家梳理一篇核心论文📝《Seven Failure Points When Engineering a Retrieval Augmented Generation System》中提到的RAG七大核心痛点,搭配对应解决方案,干货满满✨,建议收藏!&#x1f516…

2026/5/17 10:26:14 阅读更多 →
正因为我们是前端,所以代码更需要优雅

正因为我们是前端,所以代码更需要优雅

彩土氛褐1. 基础 1.1 图片加载优化 对于非文章类的大图片先进行一遍压缩,使用各种压缩网站就可以 然后对于各种图片最好都转换为为webp格式,相对于传统格式能降低大小大概四成左右 1.2 gzip压缩 gzip是针对文本类型进行压缩的,例如html、js、…

2026/5/17 10:26:12 阅读更多 →

最新新闻

电力负荷预测:SVM与PSO优化算法实战解析

电力负荷预测:SVM与PSO优化算法实战解析

1. 电力短期负荷预测的技术挑战与算法选型 电力系统调度面临的核心难题之一是如何准确预测未来24小时至一周内的负荷变化。传统的时间序列分析方法(如ARIMA)和回归模型在处理非线性、非平稳的负荷数据时表现乏力,特别是在面对极端天气事件、节…

2026/7/4 11:44:41 阅读更多 →
基于YOLOv8的混凝土缺陷智能检测系统开发

基于YOLOv8的混凝土缺陷智能检测系统开发

1. 项目概述:混凝土缺陷智能检测系统 在土木工程领域,混凝土结构的安全评估一直是个耗时费力的工作。传统的人工检测方法不仅效率低下,而且受限于检测人员的专业水平和工作状态。我们开发的这套基于YOLOv8的混凝土缺陷检测系统,能…

2026/7/4 11:44:41 阅读更多 →
研究生科研效率提升:AI工具筛选与实战指南

研究生科研效率提升:AI工具筛选与实战指南

1. 研究生科研效率提升的关键痛点读研期间最宝贵的资源就是时间。我见过太多同学把大量精力耗费在低效的文献阅读、数据整理和论文写作上,最终导致研究进度滞后。根据Nature最新调查,全球62%的研究生存在"时间贫困"现象,其中AI工具…

2026/7/4 11:44:41 阅读更多 →
Web界面配置NAT:从原理到实战的完整指南

Web界面配置NAT:从原理到实战的完整指南

1. 项目概述:为什么我们需要Web界面来配置NAT? 如果你管理过网络,无论是家庭的小型路由器,还是企业级的防火墙,大概率都接触过NAT(网络地址转换)。这个技术可以说是现代互联网的“隐形守护者”&…

2026/7/4 11:42:41 阅读更多 →
PIC18F85J50与UG95 LTE模块的嵌入式通信方案解析

PIC18F85J50与UG95 LTE模块的嵌入式通信方案解析

1. 项目背景与核心价值在嵌入式系统开发领域,地理位置的限制常常成为项目实施的瓶颈。传统方案要么依赖昂贵的卫星通信模块,要么受制于特定运营商的网络覆盖。而UG95(Quectel UG95) LTE Cat 1模块与PIC18F85J50微控制器的组合&…

2026/7/4 11:40:40 阅读更多 →
2026年渗透测试工程师面试指南:15道核心题目深度解析与实战技巧

2026年渗透测试工程师面试指南:15道核心题目深度解析与实战技巧

1. 项目概述:一份来自实战的面试通关指南 又到了招聘季,看着身边不少朋友和团队里的新人开始为面试奔波,我总想起自己当年在会议室里被连环追问的场景。对于“渗透测试工程师”这个岗位来说,面试从来不只是考察你会不会用几个工具…

2026/7/4 11:38:40 阅读更多 →

日新闻

Memcached 1.6.43 发布:关键安全修复版本,多项问题得到解决

Memcached 1.6.43 发布:关键安全修复版本,多项问题得到解决

Memcached 1.6.43 正式发布,这是一个关键的安全修复版本,修复了多个方面的问题,还对部分功能进行了优化。 安全修复亮点 此次发布在安全修复上表现突出。binprot 避免了项目引用计数溢出,mcmc 因安全问题提升了上游版本号&#xf…

2026/7/4 0:04:29 阅读更多 →
终极指南:使用HMCL启动器跨平台畅玩Minecraft的完整解决方案

终极指南:使用HMCL启动器跨平台畅玩Minecraft的完整解决方案

终极指南:使用HMCL启动器跨平台畅玩Minecraft的完整解决方案 【免费下载链接】HMCL A Minecraft Launcher which is multi-functional, cross-platform and popular 项目地址: https://gitcode.com/gh_mirrors/hm/HMCL HMCL(Hello Minecraft! Lau…

2026/7/4 0:06:29 阅读更多 →
KMX63与PIC18F66K40在嵌入式HMI中的硬件协同与低功耗设计

KMX63与PIC18F66K40在嵌入式HMI中的硬件协同与低功耗设计

1. KMX63与PIC18F66K40的硬件协同架构解析KMX63作为一款三轴加速度计和磁力计组合传感器,与PIC18F66K40微控制器的搭配堪称嵌入式HMI开发的黄金组合。这套硬件组合的核心优势在于KMX63提供的高精度运动感知能力与PIC18F66K40强大的信号处理能力形成了完美互补。KMX6…

2026/7/4 0:06:29 阅读更多 →

周新闻

月新闻