MyBatis-Plus联表查询的短板,终于有一款工具补齐了
发布网友
发布时间:2024-10-13 16:33
我来回答
共1个回答
热心网友
时间:2024-12-01 17:02
mybatis-plus作为简化数据库操作的增强工具,长久以来,其联表查询能力一直是开发者的诟病。复杂连接查询仍需手动编写SQL,陷入繁琐的xml文件中。然而,随着mybatis-plus-join(简称mpj)工具的出现,这一困境得到解决。mpj彻底解放了开发者从xml地狱中,提供了与mybatis-plus相似的接口进行联表查询。
引入mpj依赖后,无需进行特殊配置,直接引入即可。在Spring Boot项目中,配置数据源连接信息即可。为了测试联表查询,首先构建测试表:订单表、用户表、商品表,通过用户id和商品id与其他两张表关联。
针对原有Mapper层接口进行修改,继承MPJBaseMapper接口。对其他表的Mapper接口同样改造,服务层可选择继承MPJBaseService与MPJBaseServiceImpl,但非必需。
在Service中注入改造后的Mapper接口,只需注入主表OrderMapper即可完成三表联查。通过mpjLambdaWrapper构建查询条件,调用mapper的selectJoinList()方法实现关联查询,返回结果并自定义接收类OrderDto。该类继承实体并添加需要返回的列。MPJLambdaWrapper提供构建查询条件的核心功能,可调用mybatis-plus原生方法,同时默认主表别名为t,其他表按先后顺序使用别名t1、t2、t3等。
使用mpjLambdaWrapper时,确保引用表名使用别名而非数据库原表名,以避免运行时错误。同时支持子查询操作,适用于复杂业务场景。mpjQueryWrapper提供与普通QueryWrapper类似的方式进行联表查询,运行结果相同,但在引用表名时,应使用别名而非原表名。
mpj还支持分页查询,通过引入分页*,实现列表查询的分页功能。调用selectJoinPage()方法,添加分页参数Page对象,解析日志查看生成的SQL语句,底层通过添加limit实现分页功能。
经过测试,mpj在联表查询方面提供了高效便捷的解决方案,适应用于项目中非复杂场景下的SQL查询,大幅提高开发效率。然而,项目issues中指出当前版本存在一些问题,期待后续版本的完善。
来源