mybatis+plus多表连接查询 - 基于注解

发布时间:2023年12月18日

mybatis+plus最大的好处就是不用生成xml文件了,对xml特别反感的人尤为难受,为了彻底摆脱xml,但业务决定技术,在特定场景下的又需要多表查询。怎么办呢,xml和sql都不想写要怎么实现?

第一种办法:mybatis plus 原生支持多表查询是使用wrapper.apply()或last(),唯一的缺点是不能使用别名。

Service层

//返回值
queryWrapper.select("*,order.task_id as taskId");
//查询条件
queryWrapper.apply("LEFT JOIN order ON user.id = order.user_id") ;

实体类

@tableName("user")
public class User{
    @TableField(exist = false)
    private Integer taskId;
}

第二种办法:使用别名但需要写sql

接口层

public interface DeviceMapper extends BaseMapper<UserDO> {
/**
* 联合查询 left join car
/
@Select("select device.*, car.car_number from gps_device as device left join gps_car as car on device.car_id = car.car_id ${ew.customSqlSegment}")

Page joinCarPage(Page<?> page, @Param(Constants.WRAPPER) Wrapper wrapper);

}

Service层

QueryWrapper queryWrapper = new QueryWrapper<>();
queryWrapper.eq(ObjectUtil.isNotEmpty(deviceParam.getDeviceType()), “device.device_type”, deviceParam.getDeviceType());
queryWrapper.like(ObjectUtil.isNotEmpty(deviceParam.getCarNumber()), “car.car_number”, deviceParam.getCarNumber());

第三种办法:添加引用,详情自己百度


<dependency>
    <groupId>com.github.yulichang</groupId>
    <artifactId>mybatis-plus-join-boot-starter</artifactId>
    <version>1.4.4</version>
</dependency>

其它方法:

这方法在plus3.0.7.1上不存在,不知道其它高版本是否有

QueryWrapper<User> queryWrapper = new QueryWrapper<>();
? ? ? ? queryWrapper.eq("status", 1)
? ? ? ? ? ? ? ? .leftJoin("order", "user.id = order.user_id")
? ? ? ? ? ? ? ? .select("user.*", "order.order_name");
? ? ? ? return userMapper.selectList(queryWrapper);
文章来源:https://blog.csdn.net/s_ongfei/article/details/135062921
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。