【Java】Mybatis

Posted by 西维蜀黍 on 2025-07-21, Last Modified on 2025-07-22

MyBatis觉得在哪方面做的比较好?

MyBatis 在 SQL 灵活性动态 SQL 支持结果集映射与 Spring 整合 方面表现卓越,尤其适合重视 SQL 可控性的项目。

✅ 优势详解:

  • SQL 与代码解耦,灵活可控

    MyBatis 允许开发者直接编写和优化 SQL,相比全自动 ORM(如 Hibernate),MyBatis 让开发者明确知道每条 SQL 的执行逻辑,便于性能调优。

<!-- 示例:XML 中定义 SQL -->
<select id="findUserWithRole" resultMap="userRoleMap">
  SELECT u.*, r.role_name
  FROM user u
  LEFT JOIN user_role ur ON u.id = ur.user_id
  LEFT JOIN role r ON ur.role_id = r.id
  WHERE u.id = #{userId}
</select>
  • 动态 SQL 的强大支持

    可以动态拼接 SQL,通过 等标签动态生成 SQL,避免 Java 代码中繁琐的字符串拼接。

<select id="searchUsers" resultType="User">
  SELECT * FROM user
  <where>
    <if test="name != null">AND name LIKE #{name}</if>
    <if test="status != null">AND status = #{status}</if>
  </where>
</select>
  • 自动映射与自定义映射结合

    自动将查询结果字段名与对象属性名匹配(如驼峰转换)。

<resultMap id="userRoleMap" type="User">
  <id property="id" column="user_id"/>
  <result property="name" column="user_name"/>
  <collection property="roles" ofType="Role">
    <result property="roleName" column="role_name"/>
  </collection>
</resultMap>

插件扩展机制

  • 支持自定义插件拦截 SQL 执行过程,可实现 分页、性能监控、SQL 改写 等。
@Intercepts({
    @Signature(type = Executor.class, method = "query", args = {...})
})
public class PaginationPlugin implements Interceptor {
    // 实现分页逻辑
}

与 Spring 无缝集成

  • 使用 @MapperScan 自动扫描 Mapper 接口,结合 Spring 管理事务,配置简单高效。
@Configuration
@MapperScan("com.example.mapper")
public class MyBatisConfig {
    // 数据源和 SqlSessionFactory 配置
}

MyBatis Plus 和 MyBatis 的区别?

MyBatis Plus 是一个基于 MyBatis 的增强工具库,旨在简化开发并提高效率。以下是 MyBatis Plus 和 MyBatis 之间的一些主要区别:

✅ 核心差异点

  • CRUD 操作

    MyBatis Plus 通过继承 BaseMapper 接口,提供了一系列内置的快捷方法,使得 CRUD 操作更加简单,无需编写重复的 SQL 语句。

  • 代码生成器

    MyBatis Plus 提供了代码生成器功能,可以根据数据库表结构自动生成实体类、Mapper 接口以及 XML 映射文件,减少了手动编写的工作量。

  • 通用方法封装

    MyBatis Plus 封装了许多常用的方法,如条件构造器、排序、分页查询等,简化了开发过程,提高了开发效率。

  • 分页插件

    MyBatis Plus 内置了分页插件,支持各种数据库的分页查询,开发者可以轻松实现分页功能;而在传统的 MyBatis 中,开发者需要自己手动实现分页逻辑。

  • 多租户支持

    MyBatis Plus 提供了多租户的支持,可以轻松实现多用户数据隔离的功能。

  • 注解支持

    MyBatis Plus 引入了更多的注解支持,使得开发者可以通过注解来配置实体与数据库表之间的映射关系,减少了 XML 配置文件的编写。

Reference