Mybatis-plus手写SQL如何使用条件构造器和分页插件
前言:在使用mybatis-plus过程中,使用条件构造器和分页插件非常效率的提升开发速度,但有些业务需要使用连表查询,此时还想使用条件构造器和使用分页时应该如何操作呢?
Mapper接口层
public interface BookOrderMapper extends BaseMapperPlus<BookOrder, BookOrderVo> {List<OrderApp> getOrderAppList(@Param("orderState") String orderState);Page<OrderApp> getOrderAppPage(Page<OrderApp> page, @Param(Constants.WRAPPER) Wrapper<OrderApp> wrapper);
}
xml层
<select id="getOrderAppPage" resultMap="orderApp">SELECT *FROMbook_order t2LEFT JOIN book_order_detail t1 ON t1.order_id = t2.order_id and t1.del_flag = 0LEFT JOIN t_sku t3 ON t1.sku_id = t3.idLEFT JOIN books t4 ON t4.book_id = t3.book_id${ew.customSqlSegment}</select>
调用
// 查询构造器,如果是连表查询的话建议使用QueryWrapper,这样可以手动指定条件列名 例如:t2.xxxboolean b = !StringUtils.equals(orderState, "0");QueryWrapper<OrderApp> queryWrapper = Wrappers.query(OrderApp.class);queryWrapper.eq("t2.user_id",userId);queryWrapper.eq(b,"t2.order_state",orderState);queryWrapper.eq("t2.del_flag","0");queryWrapper.orderByDesc("t2.create_time");// 调用sqlPage<OrderApp> orderAppPage = bookOrderMapper.getOrderAppPage(new Page<>(page, pageSize), queryWrapper);
分页插件:
在返回结果使用Page< T >即可
条件构造器:
- mapper参数中添加 @Param(Constants.WRAPPER) Wrapper< T > wrapper (实参传递QuerWrapper或LamdaQuerWrapper都可以)
- 在sql的最后方添加 sql片段: ${ew.customSqlSegment} (带where关键字) 或 ${ew.sqlSegment}(不带where关键字)