MyBatis 与 MyBatis-Plus 的区别

在 Java 持久层框架中,MyBatis 和 MyBatis-Plus 是两款广泛使用的工具,它们既有紧密的联系,又存在显著差异。下面从核心特性、使用方式等方面详细对比两者的区别。

1. 核心定位不同

  • MyBatis

    是一款轻量级的持久层框架,它的核心思想是通过 XML 或注解方式将 SQL 语句与 Java 方法绑定,让开发者可以灵活控制 SQL 编写,避免了 JDBC 繁琐的代码编写。但 MyBatis 只提供基础的 CRUD 支持,很多通用操作需要开发者手动编写 SQL。

  • MyBatis-Plus

    是在 MyBatis 基础上开发的增强工具,遵循"只做增强,不做改变"的原则。它在保留 MyBatis 原有功能的同时,增加了大量实用特性,旨在简化开发,减少重复的 SQL 编写工作。

2. 通用 CRUD 操作支持

  • MyBatis

    对于基本的增删改查(CRUD)操作,需要开发者手动编写 SQL 语句(无论是在 XML 中还是通过注解)。例如,查询单条数据需要编写:

    xml 复制代码
    <select id="selectById" resultType="User">
        SELECT * FROM user WHERE id = #{id}
    </select>
  • MyBatis-Plus

    提供了 BaseMapper 接口,该接口中封装了大量通用的 CRUD 方法,开发者只需让自己的 Mapper 接口继承 BaseMapper,即可直接调用这些方法,无需编写 SQL。例如:

    java 复制代码
    public interface UserMapper extends BaseMapper<User> {
        // 无需编写代码,直接使用 selectById、insert、update 等方法
    }
    // 调用示例
    User user = userMapper.selectById(1);

3. 条件构造器的差异

  • MyBatis

    当需要动态拼接 SQL 条件(如多条件查询)时,需使用 <if> <where> 等标签在 XML 中手动拼接,例如:

    xml 复制代码
    <select id="selectByCondition" resultType="User">
        SELECT * FROM user
        <where>
            <if test="name != null">AND name LIKE #{name}</if>
            <if test="age != null">AND age > #{age}</if>
        </where>
    </select>
  • MyBatis-Plus

    提供了 Wrapper 条件构造器,可以通过 Java 代码动态构建查询条件,无需编写 XML。例如:

    java 复制代码
    QueryWrapper<User> queryWrapper = new QueryWrapper<>();
    queryWrapper.like("name", "张").gt("age", 18);
    List<User> userList = userMapper.selectList(queryWrapper);

    这种方式更直观,且避免了 XML 中繁琐的标签拼接。

4. 其他增强功能

MyBatis-Plus 在 MyBatis 基础上增加了诸多实用功能,而这些是 MyBatis 不具备的:

  • 代码生成器:可以根据数据库表结构自动生成实体类、Mapper 接口、Service 等代码,大幅减少重复劳动。
  • 分页插件:内置分页功能,只需简单配置即可实现分页查询,无需手动编写分页 SQL。
  • 逻辑删除:通过注解即可实现逻辑删除(更新删除标识字段),无需手动编写更新语句。
  • 字段自动填充:支持对创建时间、修改时间等字段进行自动填充,无需在代码中手动设置。

底层关系与适用场景

  • MyBatis-Plus 是 基于 MyBatis 实现 的,完全兼容 MyBatis 的所有功能,两者可以无缝切换。
  • 若项目需要高度自定义 SQL,且不需要太多通用功能,MyBatis 足够轻量灵活。
  • 若项目存在大量重复的 CRUD 操作,或需要快速开发以提升效率,MyBatis-Plus 是更好的选择,它能显著减少代码量,降低开发成本。

总之,MyBatis-Plus 是 MyBatis 的"增强版",在保留灵活性的同时,为开发者提供了更多便捷工具,尤其适合快速开发场景。