
一、Maven 引入依赖 pom.xml1. 基础依赖SpringBoot3 MP 3.5.xSpringBoot3 必须使用mybatis-plus-boot-starter 3.5底层适配 jakarta 包 MySQL 驱动 8.x 以上。xml!-- SpringBoot Web可选后台接口需要 -- dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-web/artifactId /dependency !-- MySQL 驱动 -- dependency groupIdcom.mysql/groupId artifactIdmysql-connector-j/artifactId scoperuntime/scope /dependency !-- 连接池 HikariCPSpringBoot内置无需额外导入 -- !-- MyBatis-Plus 启动器整合MyBatis无需单独引入mybatis -- dependency groupIdcom.baomidou/groupId artifactIdmybatis-plus-boot-starter/artifactId version3.5.7/version /dependency !-- Lombok 简化实体类可选推荐 -- dependency groupIdorg.projectlombok/groupId artifactIdlombok/artifactId optionaltrue/optional /dependency二、application.yml 核心配置yaml# 数据库连接 spring: datasource: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://127.0.0.1:3306/machinery_ecommerce?useUnicodetruecharacterEncodingutf8useSSLfalseserverTimezoneAsia/Shanghai username: root password: 你的数据库密码 # MyBatis-Plus 配置 mybatis-plus: # mapper xml 文件路径自定义SQL多表联查时使用 mapper-locations: classpath:mapper/**/*.xml # 实体类别名包xml中可直接写类名不用全限定名 type-aliases-package: com.entity configuration: map-underscore-to-camel-case: true # 开启下划线转驼峰 order_no - orderNo log-impl: org.apache.ibatis.logging.stdout.StdOutImpl # 打印执行SQL日志 global-config: db-config: id-type: assign_id # 主键策略assign_id雪花算法auto自增 logic-delete-field: isDelete # 逻辑删除字段名 logic-delete-value: 1 # 删除值 logic-not-delete-value: 0 # 未删除值三、启动类添加 Mapper 扫描注解java运行import org.mybatis.spring.annotation.MapperScan; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; SpringBootApplication // 扫描所有Mapper接口所在包 MapperScan(com.mapper) public class EcommerceApplication { public static void main(String[] args) { SpringApplication.run(EcommerceApplication.class, args); } }四、实体类编写MP 核心注解表order_info字段id、order_no、total_amount、create_time、update_time、is_deletejava运行package com.entity; import com.baomidou.mybatisplus.annotation.*; import lombok.Data; import java.math.BigDecimal; import java.time.LocalDateTime; Data TableName(order_info) // 绑定数据库表名 public class OrderInfo { // 主键 TableId private Long id; private String orderNo; private BigDecimal totalAmount; // 新增自动填充 TableField(fill FieldFill.INSERT) private LocalDateTime createTime; // 新增更新自动填充 TableField(fill FieldFill.INSERT_UPDATE) private LocalDateTime updateTime; // 逻辑删除字段 TableLogic private Integer isDelete; }五、创建 Mapper 接口继承 BaseMapper 获得内置 CRUDjava运行package com.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.entity.OrderInfo; import org.apache.ibatis.annotations.Mapper; Mapper public interface OrderInfoMapper extends BaseMapperOrderInfo { // BaseMapper自带 insert、deleteById、updateById、selectById 等方法 // 多表复杂查询可在此写自定义方法配套 mapper/OrderInfoMapper.xml }六、自动填充处理器创建时间 / 更新时间自动赋值新建配置类MyMetaObjectHandlerjava运行package com.config; import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler; import org.apache.ibatis.reflection.MetaObject; import org.springframework.stereotype.Component; import java.time.LocalDateTime; Component public class MyMetaObjectHandler implements MetaObjectHandler { // 插入执行 Override public void insertFill(MetaObject metaObject) { this.strictInsertFill(metaObject, createTime, LocalDateTime::now, LocalDateTime.class); this.strictInsertFill(metaObject, updateTime, LocalDateTime::now, LocalDateTime.class); } // 更新执行 Override public void updateFill(MetaObject metaObject) { this.strictUpdateFill(metaObject, updateTime, LocalDateTime::now, LocalDateTime.class); } }七、分页插件配置必须配置否则分页 total 为 0MP 分页需要注册插件新建 MP 配置类java运行package com.config; 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; Configuration public class MyBatisPlusConfig { Bean public MybatisPlusInterceptor mybatisPlusInterceptor() { MybatisPlusInterceptor interceptor new MybatisPlusInterceptor(); // 分页插件 interceptor.addInnerInterceptor(new PaginationInnerInterceptor()); return interceptor; } }八、Service 层标准封装可选业务分层规范1. Service 接口java运行package com.service; import com.baomidou.mybatisplus.extension.service.IService; import com.entity.OrderInfo; public interface OrderInfoService extends IServiceOrderInfo { }2. ServiceImpl 实现类自带批量、条件查询封装java运行package com.service.impl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.entity.OrderInfo; import com.mapper.OrderInfoMapper; import com.service.OrderInfoService; import org.springframework.stereotype.Service; Service public class OrderInfoServiceImpl extends ServiceImplOrderInfoMapper, OrderInfo implements OrderInfoService { }九、常用 MP 代码示例Controller/Service1. 单表 CRUDjava运行Autowired private OrderInfoService orderService; // 根据id查询 OrderInfo order orderService.getById(1L); // 新增 orderService.save(order); // 更新 orderService.updateById(order); // 逻辑删除 orderService.removeById(1L);2. Lambda 条件查询推荐无硬编码字段java运行LambdaQueryWrapperOrderInfo wrapper new LambdaQueryWrapper(); wrapper.eq(OrderInfo::getOrderNo, OD20260710) .gt(OrderInfo::getTotalAmount, new BigDecimal(100)) .orderByDesc(OrderInfo::getCreateTime); ListOrderInfo list orderService.list(wrapper);3. 分页查询java运行// pageNum1pageSize10 PageOrderInfo page new Page(1, 10); LambdaQueryWrapperOrderInfo wrapper new LambdaQueryWrapper(); wrapper.eq(OrderInfo::getIsDelete, 0); PageOrderInfo pageResult orderService.page(page, wrapper); // 总条数 long total pageResult.getTotal(); // 当前页数据 ListOrderInfo records pageResult.getRecords();十、复杂多表自定义 SQL兼容原生 MyBatis XMLMapper 接口新增自定义方法java运行ListOrderVO selectOrderWithProduct();resources/mapper/OrderInfoMapper.xml 编写原生 SQLxml?xml version1.0 encodingUTF-8? !DOCTYPE mapper PUBLIC -//mybatis.org//DTD Mapper 3.0//EN http://mybatis.org/dtd/mybatis-3-mapper.dtd mapper namespacecom.mapper.OrderInfoMapper select idselectOrderWithProduct resultTypecom.vo.OrderVO SELECT o.*,p.product_name FROM order_info o LEFT JOIN product p ON o.product_id p.id /select /mapper十一、常见整合踩坑分页查询 total0未注册PaginationInnerInterceptor分页插件必须配置 Bean。字段下划线无法映射 orderNonullyml 未开启map-underscore-to-camel-case: true。创建时间不自动填充缺少MetaObjectHandler配置类或实体注解FieldFill写错。逻辑删除执行 update 而不是 deleteyml 全局 db-config 配置 logic-delete-field 字段名。Mapper 无法注入报找不到 Bean启动类MapperScan包路径写错或 Mapper 接口缺少Mapper。SpringBoot2 与 SpringBoot3 依赖不通用 Boot2 使用 3.4.x 版本Boot3 使用 3.5.x。