文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

MybatisPlus多表连表查询

2023-08-17 13:23

关注

最近发现一个好玩的框架,我们知道mybatis-plus在连表查询上是不行的,如果需要连表查询,那么我们就得乖乖的去写xml文件了,但是今天发现一个新的框架 mybatis-plus-join。它既包含了mybatis-plus的所有优点,然后还支持连表查询,还支持对多,对一的查询

mybatis-plus-join是mybatis plus的一个多表插件,上手简单,几分钟就能学会全部使用方式。行了废话不多说直接看代码吧。

插件文档 https://mybatisplusjoin.com/
插件Github仓库 https://github.com/yulichang/mybatis-plus-join

一、安装插件

在pom中添加依赖

    com.github.yulichang    mybatis-plus-join-boot-starter    1.4.5

二、修改Mapper

将实体mapper有Mybatis plus的BaseMapper改成插件的 MPJBaseMapper

@Mapperpublic interface UserMapper extends MPJBaseMapper {}

三、测试

简单的连表查询

查询 user 表全部字段address表的 city、address字段

public class SampleTest {    @Autowired    private UserMapper userMapper;    @Test    public void testSelect() {        MPJLambdaWrapper wrapper = JoinWrappers.lambda(User.class)                .selectAll(User.class)//查询user表全部字段                .select(Address::getCity, Address::getAddress)                .leftJoin(Address.class, Address::getUserId, User::getId);        List userList = userMapper.selectJoinList(UserDTO.class, wrapper);    }}

生成的sql

SELECT t.id,t.name,t.age,t.email,t2.city,t2.address FROM user t LEFT JOIN address t1 ON t1.user_id = t.id

通过以上几个简单的步骤,我们就实现了 User 表的连表功能,甚至连 XML 文件都不用编写!
从以上步骤中,我们可以看到集成MyBatis-Plus-Join非常的简单,只需要引入 starter 工程即可。
但 MyBatis-Plus-Join 的强大远不止这些功能,全部功能请参考 插件文档 https://mybatisplusjoin.com/

分页查询

mybatis plus join插件支持mybatis plus原生的插件

public class SampleTest {    @Autowired    private UserMapper userMapper;    @Test    public void testSelect() {        MPJLambdaWrapper wrapper = JoinWrappers.lambda(User.class)                .selectAll(User.class)//查询user表全部字段                .select(Address::getCity, Address::getAddress)                .leftJoin(Address.class, Address::getUserId, User::getId);//分页查询 只需调用selectJoinPage方法,传入Mybatis Plus的page对象就行了        Page page = userMapper.selectJoinPage(new Page<>(1, 10), UserDTO.class, wrapper);    }}

对应sql
我这用的是Mysql,会添加 Limit, 分页插件会更具不同数据库拼接不同的分页方言

SELECT t.id,t.name,t.age,t.email,t2.city,t2.address FROM user t LEFT JOIN address t1 ON t1.user_id = t.id LIMIT ?
一对多查询

对多查询也很方便,只需调用selectCollection就行了, 对多查询需要List集合作为映射字段类型

public class SampleTest {    @Autowired    private UserMapper userMapper;    @Test    public void testSelect() {        MPJLambdaWrapper wrapper = JoinWrappers.lambda(User.class)                .selectCollection(AddressDO.class, UserDTO::getAddressList)                .leftJoin(Address.class, Address::getUserId, User::getId);        List list= userMapper.selectJoinList(UserDTO.class, wrapper);    }}
一对一查询

一对一查询和对多查询用法一模一样, 把selectCollection换成selectAssociation就行了, 映射字段就不能是集合了,改成对应的实体类或DTO类

public class SampleTest {    @Autowired    private UserMapper userMapper;    @Test    public void testSelect() {        MPJLambdaWrapper wrapper = JoinWrappers.lambda(User.class)                .selectAssociation(AddressDO.class, UserDTO::getAddressDto)                .leftJoin(Address.class, Address::getUserId, User::getId);        List list= userMapper.selectJoinList(UserDTO.class, wrapper);    }}

通过以上几个简单的步骤,我们就实现了 User 表的一对一和一对多功能,甚至连 XML 文件都不用编写!
插件还支持指定字段映射,指定别名映射,嵌套映射等强大的功能, 全部功能请参考 插件文档 https://mybatisplusjoin.com/

四、总结

无侵入:只做增强不做改变,引入它不会对现有工程产生影响,如丝般顺滑
无感引入, 支持MP风格的查询, 您会MP就会MPJ, 无需额外的学习成本
兼容MP的别名、逻辑删除、枚举列、TypeHandle列等特性
全部功能请参考 插件文档 https://mybatisplusjoin.com/
如果您在使用过程中有任何问题或疑问,欢迎提issue或通过Github或Gitee咨询作者

来源地址:https://blog.csdn.net/qq_31116181/article/details/130235857

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯