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);