欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 社会 > MyBatis-Plus-Join (MPJ) 框架介绍

MyBatis-Plus-Join (MPJ) 框架介绍

2025/2/12 22:49:38 来源:https://blog.csdn.net/weixin_52236586/article/details/145581627  浏览:    关键词:MyBatis-Plus-Join (MPJ) 框架介绍

MyBatis-Plus-Join (MPJ) 框架介绍

MyBatis-Plus-Join (MPJ) 是一个基于 MyBatis-Plus 的多表关联查询框架,它提供了一种优雅的方式来处理复杂的表关联查询。

主要特性

  1. Lambda 式查询

    wrapper.selectAs(Teacher::getId, TeacherLeaveVO::getTeacherId).leftJoin(Course.class, Course::getTeacherId, Teacher::getId)
    
  2. 自动字段映射

    // 自动映射所有字段
    wrapper.selectAll(Teacher.class).selectAll(Course.class)
    
  3. 灵活的关联方式

    // 支持左连接、右连接、内连接
    .leftJoin()  // 左连接
    .rightJoin() // 右连接
    .innerJoin() // 内连接
    
  4. 分页查询支持

    mapper.selectJoinPage(new Page<>(current, size), VO.class, wrapper)
    

使用步骤

  1. 添加依赖

    <dependency><groupId>com.github.yulichang</groupId><artifactId>mybatis-plus-join</artifactId><version>1.4.6</version>
    </dependency>
    
  2. Mapper 继承

    @Mapper
    public interface TeacherMapper extends MPJBaseMapper<Teacher> {
    }
    
  3. 构建查询

    MPJLambdaWrapper<Teacher> wrapper = new MPJLambdaWrapper<>(Teacher.class).selectAll(Teacher.class).leftJoin(Course.class, Course::getTeacherId, Teacher::getId);
    

查询方式对比

传统 MyBatis

<select id="getTeacherLeaves">SELECT t.id, t.name,c.id, c.name,sl.student_id, sl.leave_dateFROM teacher tLEFT JOIN course c ON c.teacher_id = t.idLEFT JOIN student_leave sl ON sl.course_id = c.idWHERE t.id = #{teacherId}
</select>

MPJ 方式

wrapper.selectAll(Teacher.class).selectAll(Course.class).selectAll(StudentLeave.class).leftJoin(Course.class, Course::getTeacherId, Teacher::getId).leftJoin(StudentLeave.class, StudentLeave::getCourseId, Course::getId)

优势

  1. 类型安全

    • 使用 Lambda 表达式,避免字段名拼写错误
    • 重构时自动更新关联字段
  2. 代码简洁

    • 无需编写 XML
    • 链式调用更直观
  3. 维护方便

    • 统一的查询方式
    • 复用查询条件
  4. 功能完整

    • 支持分页
    • 支持多表关联
    • 支持字段别名
    • 支持条件构建

最佳实践

  1. 抽取公共查询条件

    private MPJLambdaWrapper<Teacher> baseWrapper() {return new MPJLambdaWrapper<>(Teacher.class).selectAll(Teacher.class).selectAll(Course.class);
    }
    
  2. 使用 VO 对象映射

    @Data
    public class TeacherLeaveVO {private Long teacherId;private String teacherName;// ...
    }
    
  3. 合理使用字段选择

    // 选择特定字段而不是全部
    .select(Teacher::getId, Teacher::getName)
    // 需要所有字段时使用 selectAll
    .selectAll(Teacher.class)
    

注意事项

  1. 字段命名要符合规范,建议使用驼峰命名
  2. 合理使用表别名避免字段冲突
  3. 关注查询性能,避免不必要的关联
  4. 适当使用索引优化查询性能

MPJ 极大地简化了多表关联查询的编写,提高了开发效率,是一个值得使用的 MyBatis-Plus 扩展工具。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com