MyBatis-Plus 快速入门与实战应用

目录

  1. 学习背景与目标
  2. MyBatis-Plus 核心知识点学习
  3. 实战项目:用户信息管理系统
  4. 学习过程中遇到的问题与解决
  5. 学习总结
  6. 互动投票

学习背景与目标

在学习 MyBatis 后,发现其虽然解决了 JDBC 的繁琐操作,但仍需编写大量的 XML 映射文件和 SQL 语句,开发效率较低。而 MyBatis-Plus(简称 MP)作为 MyBatis 的增强工具,在不改变 MyBatis 原有功能的基础上,提供了单表 CRUD 的自动生成、分页、条件构造器等便捷功能,能极大提升开发效率。因此本次学习的核心目标是:

  • 掌握 MyBatis-Plus 的环境搭建流程
  • 理解 MyBatis-Plus 核心功能的使用原理
  • 能通过 MyBatis-Plus 完成简单项目的单表操作

MyBatis-Plus 核心知识点学习

一、MyBatis-Plus 简介

MyBatis-Plus 是由国内团队开发的一款 MyBatis 增强工具,口号是 “为简化开发而生”。其核心特性包括:

  • 无侵入:只做增强不做改变,兼容 MyBatis 所有原有功能
  • 自动 CRUD:内置通用 Mapper、Service,无需编写 SQL 即可完成单表操作
  • 分页插件:支持多种数据库的分页查询,且分页功能简单易用
  • 条件构造器:强大的条件查询封装,无需手写复杂 SQL
  • 代码生成器:可快速生成 Entity、Mapper、Service、Controller 等代码

二、环境搭建步骤(基于 Spring Boot 2.7.x)

1. 开发环境准备
工具 / 框架版本
JDK1.8
Spring Boot2.7.10
MyBatis-Plus3.5.3.1
MySQL8.0.30
Maven3.8.6
2. 创建 Spring Boot 项目

通过 IDEA 的 Spring Initializr 快速创建 Spring Boot 项目,选择基础依赖:Spring WebMySQL Driver

3. 引入 MyBatis-Plus 依赖

在 pom.xml 中添加 MyBatis-Plus 的依赖(注意排除 MyBatis 原生依赖,避免冲突):

xml

<!-- MyBatis-Plus 核心依赖 -->
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-boot-starter</artifactId>
    <version>3.5.3.1</version>
</dependency>
4. 配置数据库连接与 MyBatis-Plus

在 application.yml 中配置数据库连接信息和 MyBatis-Plus 相关配置:

yaml

spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/mp_demo?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai
    username: root
    password: 123456

# MyBatis-Plus 配置
mybatis-plus:
  # 实体类别名包路径
  type-aliases-package: com.example.mpdemo.entity
  # Mapper 映射文件路径
  mapper-locations: classpath:mapper/*.xml
  # 配置日志
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

截图 1:application.yml 配置文件(此处插入本地截图:展示上述配置代码的 IDE 界面)

5. 编写实体类

以 User 实体类为例,使用 MyBatis-Plus 的注解标识主键和字段映射:

java

运行

package com.example.mpdemo.entity;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;

import java.util.Date;

@Data
@TableName("tb_user") // 对应数据库表名
public class User {
    @TableId(type = IdType.AUTO) // 主键自增
    private Long id;
    private String username;
    private String password;
    private String email;
    private String phone;
    private Date createTime;
}
6. 编写 Mapper 接口

只需继承 MyBatis-Plus 的 BaseMapper 接口,即可获得内置的 CRUD 方法:

java

运行

package com.example.mpdemo.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.example.mpdemo.entity.User;
import org.apache.ibatis.annotations.Mapper;

@Mapper
public interface UserMapper extends BaseMapper<User> {
    // 无需编写任何方法,BaseMapper 已提供CRUD功能
}
7. 启动类添加扫描注解(可选)

如果 Mapper 接口未添加 @Mapper 注解,可在启动类添加 @MapperScan 注解扫描 Mapper 包:

java

运行

package com.example.mpdemo;

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
@MapperScan("com.example.mpdemo.mapper") // 扫描Mapper包
public class MpDemoApplication {
    public static void main(String[] args) {
        SpringApplication.run(MpDemoApplication.class, args);
    }
}

三、核心功能体验:自动 CRUD 与分页查询

1. 测试新增用户

在测试类中注入 UserMapper,调用 insert 方法:

java

运行

package com.example.mpdemo;

import com.example.mpdemo.entity.User;
import com.example.mpdemo.mapper.UserMapper;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

import java.util.Date;

@SpringBootTest
class MpDemoApplicationTests {

    @Autowired
    private UserMapper userMapper;

    @Test
    void testInsert() {
        User user = new User();
        user.setUsername("test_mp");
        user.setPassword("123456");
        user.setEmail("test@mp.com");
        user.setPhone("13800138000");
        user.setCreateTime(new Date());
        // 调用BaseMapper的insert方法
        int rows = userMapper.insert(user);
        System.out.println("新增成功,影响行数:" + rows);
        System.out.println("新增用户ID:" + user.getId());
    }
}

截图 2:新增用户测试结果(此处插入本地截图:展示测试方法运行后控制台输出的新增成功日志)

2. 配置分页插件

MyBatis-Plus 的分页功能需要配置分页拦截器:

java

运行

package com.example.mpdemo.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;
    }
}
3. 测试分页查询

java

运行

@Test
void testPage() {
    // 创建分页对象:第1页,每页5条数据
    Page<User> page = new Page<>(1, 5);
    // 执行分页查询
    userMapper.selectPage(page, null);
    // 获取分页结果
    System.out.println("总记录数:" + page.getTotal());
    System.out.println("总页数:" + page.getPages());
    System.out.println("当前页数据:" + page.getRecords());
}

截图 3:分页查询测试结果(此处插入本地截图:展示分页查询的控制台输出结果)

实战项目:用户信息管理系统

本次上课完成的实战项目是基于 Spring Boot + MyBatis-Plus 的用户信息管理系统,实现了用户的新增、查询、修改、删除和分页查询功能。

一、项目结构

plaintext

mpdemo/
├── src/
│   ├── main/
│   │   ├── java/
│   │   │   └── com/
│   │   │       └── example/
│   │   │           ├── mpdemo/
│   │   │           │   ├── MpDemoApplication.java
│   │   │           │   ├── config/
│   │   │           │   │   └── MyBatisPlusConfig.java
│   │   │           │   ├── controller/
│   │   │           │   │   └── UserController.java
│   │   │           │   ├── entity/
│   │   │           │   │   └── User.java
│   │   │           │   ├── mapper/
│   │   │           │   │   └── UserMapper.java
│   │   │           │   └── service/
│   │   │           │       ├── UserService.java
│   │   │           │       └── impl/
│   │   │           │           └── UserServiceImpl.java
│   │   │           └── resources/
│   │   │               ├── application.yml
│   │   │               └── mapper/
│   │   │                   └── UserMapper.xml
│   └── test/
│       └── java/
│           └── com/
│               └── example/
│                   └── mpdemo/
│                       └── MpDemoApplicationTests.java
└── pom.xml

截图 4:项目结构截图(此处插入本地截图:展示 IDE 中的项目目录结构)

二、核心业务代码

1. Service 层

java

运行

// UserService 接口
public interface UserService extends IService<User> {
}

// UserServiceImpl 实现类
@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {
}
2. Controller 层

java

运行

@RestController
@RequestMapping("/user")
public class UserController {

    @Autowired
    private UserService userService;

    // 新增用户
    @PostMapping
    public String addUser(@RequestBody User user) {
        user.setCreateTime(new Date());
        boolean save = userService.save(user);
        return save ? "新增成功" : "新增失败";
    }

    // 分页查询用户
    @GetMapping("/page")
    public Page<User> pageUser(@RequestParam(defaultValue = "1") Integer pageNum,
                               @RequestParam(defaultValue = "5") Integer pageSize) {
        return userService.page(new Page<>(pageNum, pageSize));
    }

    // 根据ID删除用户
    @DeleteMapping("/{id}")
    public String deleteUser(@PathVariable Long id) {
        boolean remove = userService.removeById(id);
        return remove ? "删除成功" : "删除失败";
    }
}

三、接口测试

使用 Postman 测试用户新增接口,请求地址:http://localhost:8080/user,请求方式:POST,请求体为 JSON 格式:

json

{
    "username": "test_postman",
    "password": "654321",
    "email": "postman@mp.com",
    "phone": "13900139000"
}

截图 5:Postman 测试结果(此处插入本地截图:展示 Postman 中新增用户的成功响应)

学习过程中遇到的问题与解决

问题 1:启动项目时提示 “找不到 Mapper 接口”

现象:启动 Spring Boot 项目后,调用接口时报错 org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)原因:未正确配置 Mapper 扫描路径,导致 Spring 无法扫描到 Mapper 接口。解决方法

  1. 在 Mapper 接口上添加 @Mapper 注解;
  2. 或在启动类上添加 @MapperScan("com.example.mpdemo.mapper") 注解,指定 Mapper 包路径。截图 6:问题解决后的启动日志(此处插入本地截图:展示项目成功启动的控制台日志)

问题 2:分页查询时总记录数为 0,只返回当前页数据

现象:执行分页查询后,page.getTotal() 为 0,但 page.getRecords() 有数据。原因:未配置分页插件,MyBatis-Plus 无法自动计算总记录数。解决方法:在配置类中添加分页拦截器(如前文 MyBatisPlusConfig 类),确保分页插件生效。

问题 3:实体类字段与数据库表字段名不一致导致查询结果为 null

现象:查询用户信息时,部分字段(如 create_time)返回 null。原因:数据库表字段为下划线命名(create_time),实体类字段为驼峰命名(createTime),MyBatis-Plus 默认开启驼峰命名转换,但如果配置错误可能导致转换失效。解决方法

  1. 确认 mybatis-plus.configuration.map-underscore-to-camel-case 为 true(默认开启);
  2. 或使用 @TableField("create_time") 注解显式指定字段映射。

学习总结

本次学习 MyBatis-Plus 收获颇丰,主要总结以下几点:

  1. 效率提升:MyBatis-Plus 的 BaseMapper 和 IService 提供了丰富的 CRUD 方法,无需编写重复的 SQL 语句,极大减少了开发工作量,相比原生 MyBatis 开发效率提升约 50%。
  2. 功能强大:分页插件和条件构造器简化了复杂查询的编写,尤其是条件构造器,可通过链式调用快速构建多条件查询,比手写 SQL 更易维护。
  3. 易上手性:MyBatis-Plus 对 MyBatis 完全兼容,学习成本低,只需掌握核心注解和配置即可快速上手。
  4. 问题排查能力:在学习过程中遇到的各种问题,让我更深入理解了 Spring Boot 与 MyBatis-Plus 的整合原理,也提升了问题排查和解决的能力。

同时也认识到,MyBatis-Plus 虽然适合单表操作,但对于复杂的多表联查,仍需结合 MyBatis 的 XML 映射文件或注解编写 SQL,因此在实际开发中需根据业务场景灵活选择。

互动投票

为了更好地了解大家的学习需求,特设置以下投票:你最想深入学习 MyBatis-Plus 的哪个功能?

  1. 代码生成器
  2. 条件构造器高级用法
  3. 多表联查与自定义 SQL
  4. 乐观锁与逻辑删除
  5. 其他功能
基于可靠性评估序贯蒙特卡洛模拟法的配电网可靠性评估研究(Matlab代码实现)内容概要:本文围绕“基于可靠性评估序贯蒙特卡洛模拟法的配电网可靠性评估研究”,介绍了利用Matlab代码实现配电网可靠性的仿真分析方法。重点采用序贯蒙特卡洛模拟法对配电网进行长时间段的状态抽样统计,通过模拟系统元件的故障修复过程,评估配电网的关键可靠性指标,如系统停电频率、停电持续时间、负荷点可靠性等。该方法能够有效处理复杂网络结构设备时序特性,提升评估精度,适用于含分布式电源、电动汽车等新型负荷接入的现代配电网。文中提供了完整的Matlab实现代码案例分析,便于复现和扩展应用。; 适合人群:具备电力系统基础知识和Matlab编程能力的高校研究生、科研人员及电力行业技术人员,尤其适合从事配电网规划、运行可靠性分析相关工作的人员; 使用场景及目标:①掌握序贯蒙特卡洛模拟法在电力系统可靠性评估中的基本原理实现流程;②学习如何通过Matlab构建配电网仿真模型并进行状态转移模拟;③应用于含新能源接入的复杂配电网可靠性定量评估优化设计; 阅读建议:建议结合文中提供的Matlab代码逐段调试运行,理解状态抽样、故障判断、修复逻辑及指标统计的具体实现方式,同时可扩展至不同网络结构或加入更多不确定性因素进行深化研究。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值