文章详情

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

请输入下面的图形验证码

提交验证

短信预约提醒成功

MybatisPlus多表连接查询

2023-08-16 19:29

关注

mybatis-plus作为mybatis的增强工具,它的出现极大的简化了开发中的数据库操作,但是长久以来,它的联表查询能力一直被大家所诟病。一旦遇到left join或right join的左右连接,你还是得老老实实的打开xml文件,手写上一大段的sql语句。

偶然碰到了这么一款叫做mybatis-plus-join的工具(后面就简称mpj了),使用了一下,不得不说真香!彻底将我从xml地狱中解放了出来,终于可以以类似mybatis-plus中QueryWrapper的方式来进行联表查询了,话不多说,我们下面开始体验。

插件文档 https://mybatisplusjoin.com/

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

一、添加依赖

在pom中添加 mybatis plus join依赖

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

二、创建实体

添加两个数据库实体类 UserAddress 和结果类 UserDTO
这里用lombok简单代码

@Data@ToString@TableName("area")public class User {@TableId    private Long id;    private String name;    private Integer age;    private String email;}
@Data@ToString@TableName("address")public class Address {@TableId    private Long id;    private Long userId;    private String city;    private String address;}
@Data@ToStringpublic class UserDTO{    private Long id;    private String name;    private Integer age;    private String email;//address关联表中的两个字段    private String city;    private String address;    //地址列表 用于接下来的一对多映射查询private List
addressList;//地址 用于接下来的一对一映射查询private Address address;}

三、创建mapper

添加mapper并且继承MPJBaseMapper

@Mapperpublic interface UserMapper extends MPJBaseMapper {}
@Mapperpublic interface AddressMapper extends MPJBaseMapper
{}

四、连表查询测试

实体和mapper都建好了就可以直接用了~~
@SpringBootTestpublic class SampleTest {    @Autowired    private UserMapper userMapper;    @Test    public void testSelect() {        MPJLambdaWrapper wrapper = new MPJLambdaWrapper()                .selectAll(User.class)//查询user表全部字段                .select(Address::getCity, Address::getAddress)                .leftJoin(Address.class, Address::getUserId, User::getId);        List userList = userMapper.selectJoinList(UserDTO.class, wrapper);        userList.forEach(System.out::println);    }}
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(id=1, name=Jone, age=18, email=test1@baomidou.com,city=北京,address=人民广场)User(id=2, name=Jack, age=20, email=test2@baomidou.com,city=上海,address=人民广场)User(id=3, name=Tom, age=28, email=test3@baomidou.com,city=广州,address=人民广场)User(id=4, name=Sandy, age=21, email=test4@baomidou.com,city=上海,address=人民广场)User(id=5, name=Billie, age=24, email=test5@baomidou.com,city=北京,address=人民广场)
连表分页也是很常用的功能,MPJ也支持,调用selectJoinPage()就可以了
@SpringBootTestpublic class SampleTest {    @Autowired    private UserMapper userMapper;    @Test    public void testSelect() {        MPJLambdaWrapper wrapper = new MPJLambdaWrapper()                .selectAll(User.class)//查询user表全部字段                .select(Address::getCity, Address::getAddress)                .leftJoin(Address.class, Address::getUserId, User::getId);        Page page= userMapper.selectJoinPage(new Page(1,10), 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 LIMIT ?

小结:
通过以上几个简单的步骤,我们就实现了 User 表的连表功能,甚至连 XML 文件都不用编写!
从以上步骤中,我们可以看到集成MyBatis-Plus-Join非常的简单,只需要引入 starter 工程即可。
但 MyBatis-Plus-Join 的强大远不止这些功能,
可以查阅插件文档 https://mybatisplusjoin.com//
接下来测试一对多和一对一映射查询

五、一对多、一对一映射

一对多 selectCollection

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

一对一 selectAssociation

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

六、总结

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

来源地址:https://blog.csdn.net/bjdiys/article/details/130230405

阅读原文内容投诉

免责声明:

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

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

软考中级精品资料免费领

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

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

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

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

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

    难度     221人已做
    查看

相关文章

发现更多好内容

猜你喜欢

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