该博客是在springboot整合mybatisplus前提下
首先要使用分页,需要在配置类中注册
@Configuration
public class MybatisPlusConfig {
@Bean
public PaginationInterceptor paginationInterceptor() {
return new PaginationInterceptor();
}
}
然后在mapper层使用注解编写SQL语句,要先写page再写条件构造器,此处使用了左连接查询,并且对数据库中连接查询的两个表起了别名,方便后续做条件筛查
@Select("select * from orders as oo\n" +
"left join order_pay_trace as oopt on oo.order_code = oopt.order_code\n" +
"${ew.customSqlSegment}")
IPage<Orders> findPageLeftJoinPayTrace(IPage<Orders> page, @Param(Constants.WRAPPER) Wrapper<Orders> wrapper);
最后是在service层中往条件构造器中添加筛查条件,此处没有使用lambda表达式,并不是不能用,只是使用lambad表达式的话,如果连接查询的两张表中有相同的字段,那么系统不容易区分是哪个表中的该字段做限制条件,会报错。
String orderCode = paramsMap.get("orderCode");
String state = paramsMap.get("state");
String payCode = paramsMap.get("payCode");
String startCreateAt = paramsMap.get("startCreateAt");
String endCreateAt = paramsMap.get("endCreateAt");
if (StringGeneralUtil.checkNotNull(startCreateAt)) {
startCreateAt += " 00:00:01";
}
if (StringGeneralUtil.checkNotNull(endCreateAt)) {
endCreateAt += " 23:59:59";
}
QueryWrapper<Orders> wrapper = new QueryWrapper();
wrapper.eq(!StringUtils.isEmpty(orderCode), "oo.order_code", orderCode);
wrapper.eq(!StringUtils.isEmpty(state), "oo.state", state);
wrapper.like(!StringUtils.isEmpty(payCode), "oopt.pay_code", payCode);
wrapper.between(!StringUtils.isEmpty(startCreateAt) && !StringUtils.isEmpty(endCreateAt), "oo.create_at", startCreateAt, endCreateAt);
wrapper.orderByDesc("oo.id");
IPage<Orders> result = this.baseMapper.findPageLeftJoinPayTrace(page, wrapper);
return result;