mybatis plus join

最近发现一个好玩的框架,我们知道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中添加依赖

<dependency>
    <groupId>com.github.yulichang</groupId>
    <artifactId>mybatis-plus-join-boot-starter</artifactId>
    <version>1.4.11</version>
</dependency>
二、修改Mapper

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

@Mapper
public interface UserMapper extends MPJBaseMapper<UserDO> {

}
三、测试
简单的连表查询

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

public class SampleTest {

    @Autowired
    private UserMapper userMapper;

    @Test
    public void testSelect() {
        MPJLambdaWrapper<User> wrapper = JoinWrappers.lambda(User.class)
                .selectAll(User.class)//查询user表全部字段
                .select(Address::getCity, Address::getAddress)
                .leftJoin(Address.class, Address::getUserId, User::getId);

        List<UserDTO> 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<User> 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<UserDTO> 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<User> wrapper = JoinWrappers.lambda(User.class)
                .selectCollection(AddressDO.class, UserDTO::getAddressList)
                .leftJoin(Address.class, Address::getUserId, User::getId);
		
        List<UserDTO> list= userMapper.selectJoinList(UserDTO.class, wrapper);
    }
}
一对一查询

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

public class SampleTest {

    @Autowired
    private UserMapper userMapper;

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

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

四、总结

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

  • 4
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
当你在使用Mybatis Plus Join时,如果它在你的代码中报红,可能有几个原因。首先,确保你已经正确地导入了Mybatis Plus Join的依赖。你可以通过执行`mvn install`来安装依赖,并在你的项目中添加正确的配置文件(如`@Configuration`注解的配置类)。 其次,需要确认你使用的是最新版本的Mybatis Plus Join,并且你已经按照正确的方式使用了该框架。最新版本的Mybatis Plus Join包含了mybatis-plus的所有优点,并提供了连表查询和对多对一查询的支持。它可以简化你的代码,并且上手也很容易。 如果你按照以上步骤正确配置了Mybatis Plus Join,并且仍然遇到了问题,你可以查看官方文档,了解更多关于该插件的详细信息和功能。官方文档中可能会提供解决报红问题的方法。 总而言之,确保你正确导入了Mybatis Plus Join的依赖并按照正确的方式使用该插件,以解决报红问题。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [mybatis-plus-join:支持连表查询的mybatis-plusmybatis-plus风格的连表操作提供wrapper.leftJoin(),...](https://download.csdn.net/download/weixin_42127835/15801569)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [mybatis plus join](https://blog.csdn.net/qq_31116181/article/details/128294361)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值