Lecture01-MyBatisPlus简介

文章目录

    [toc]

    单词词性音标含义
    MyBatisn./maɪˈbeɪtɪs/一款流行的 Java 持久层框架,用于简化 JDBC 操作数据库的代码
    Plusprep./plʌs/加、增强(MyBatis-Plus 是 MyBatis 的增强工具,在保留原有能力的基础上增加更多便捷功能)
    Wrappern./ˈræpə(r)/包装器(MyBatis-Plus 中用 Wrapper 对象封装查询/更新条件,如 QueryWrapper)
    Entityn./ˈentəti/实体(Entity 类与数据库表对应,一个实体对象对应表中一行数据)

    Lecture01-MyBatisPlus简介

    一、回顾:之前操作数据库的痛点

    在 Spring 课程中,我们用 JdbcTemplate 操作数据库。回顾一下它的写法:

    // ① 查一个员工:SQL 要自己写,列名要手动起别名和属性对应
    String sql = """
            select emp_id empId,
            emp_no empNo,
            emp_name empName,
            emp_salary empSalary,
            emp_birthday empBirthday,
            phone_num phoneNum,
            dept_id deptId from t_emp where emp_id=?
            """;
    Employee employee = jdbcTemplate.queryForObject(sql, new BeanPropertyRowMapper<>(Employee.class), 3);
    
    // ② 新增一个员工:SQL 和参数要自己拼
    String sql2 = """
            insert into t_emp(emp_no, emp_name, emp_salary, emp_birthday, phone_num, dept_id)
            values (?, ?, ?, now(), ?, ?)
            """;
    jdbcTemplate.update(sql2, "No.55555", "jerry", 9999.99, "13511112222", 2);
    

    这种写法的痛点非常明显:

    • SQL 要自己写,尤其是复杂的条件查询,SQL 又长又容易错
    • 列名映射要自己处理:数据库的 emp_id 要手动起别名 empId 才能装进实体
    • 增删改查的代码大量重复,换个表又要重新写一遍
    • 只要 SQL 语法错了,要运行起来才能发现

    二、MyBatis-Plus 是什么

    MyBatis-Plus(简称 MP)是 MyBatis 的增强工具。官方的定位是:

    只做增强不做改变,为简化开发而生。

    翻译成人话就是:

    • 我们不用自己写 SQL,调用一个方法,框架自动生成 SQL 去执行
    • 单表的增、删、改、查,一条 SQL 都不用写
    • 复杂的查询条件,用条件构造器(Wrapper)链式拼接,像搭积木一样
    • 分页、逻辑删除、乐观锁、自动填充等常用功能,配置一个插件就能用

    为什么我们不学 MyBatis 直接学 MyBatis-Plus?

    因为 MyBatis 的定位是「SQL 你来写,框架帮你执行」;而 MyBatis-Plus 的定位是「SQL 我来生成,你只管调用方法」。在实际开发中,大部分单表操作直接用 MyBatis-Plus 就够了,手写 SQL 的场景越来越少。所以不需要先学 MyBatis,直接学怎么用 MyBatis-Plus 更高效。


    三、同一需求,两种写法对比

    以「按姓名模糊查询员工,并按工资降序」为例:

    ①JdbcTemplate 写法

    String sql = """
            select emp_id empId, emp_no empNo, emp_name empName, emp_salary empSalary,
                   emp_birthday empBirthday, phone_num phoneNum, dept_id deptId
            from t_emp
            where emp_name like ?
            order by emp_salary desc
            """;
    List<Employee> employeeList = jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(Employee.class), "%张%");
    

    ②MyBatis-Plus 写法

    List<Employee> employeeList = 
        employeeMapper.selectList(new LambdaQueryWrapper<>()
                                       .like(Employee::getEmpName, "张")
                                       .orderByDesc(Employee::getEmpSalary));
    

    对比结果一目了然:

    • JdbcTemplate:SQL 字符串 + 参数,写错只有运行才知道
    • MyBatis-Plus:方法链 + 实体属性,属性名写错编译期直接报错

    四、MyBatis-Plus 能干什么(本教程范围)

    本教程只讲最常用、最核心的能力,不讲底层原理:

    能力说明章节
    内置增删改查继承 BaseMapper,方法直接可用,不用写 SQL第 4 章
    条件构造器多条件组合查询、模糊查询、排序、分组第 5、6 章
    分页查询一个插件 + 一个 Page 对象第 7 章
    局部更新只更新指定的列第 8 章
    逻辑删除删除不是真删,加个标记第 9 章
    字段自动填充创建时间、更新时间自动维护第 9 章
    乐观锁并发更新时防止数据被覆盖第 10 章
    Service 层封装批量操作、链式调用第 11 章

    五、学习路线图

    MyBatis-Plus 学习路线图

    三个阶段:

    1. 入门:第 1~4 章,先跑通、会 CRUD
    2. 查询与更新核心:第 5~8 章,条件构造器 + 分页,工作中 80% 的场景
    3. 进阶功能:第 9~11 章,逻辑删除、自动填充、乐观锁、Service 层;第 12 章综合实战

    六、本章小结

    • MyBatis-Plus 是 MyBatis 的增强工具,核心价值是不用写 SQL
    • 单表 CRUD、条件查询、分页等常用操作,调用方法即可完成
    • 学习路线:入门 → 查询核心 → 进阶功能 → 综合实战

    下一章我们开始动手:搭一个 Spring Boot 工程,跑通第一个 MyBatis-Plus 查询。

    end