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

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 {
/**
* 联合查询 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());

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



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

其它方法:

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

QueryWrapper queryWrapper = new QueryWrapper<>();
        queryWrapper.eq("status", 1)
                .leftJoin("order", "user.id = order.user_id")
                .select("user.*", "order.order_name");
        return userMapper.selectList(queryWrapper);

你可能感兴趣的:(mybatis,sql,java)