mybatis-plus如何加括号

9 篇文章 0 订阅
3 篇文章 0 订阅

mp中如何添加括号

6.1 业务实现

如何通过mp语句实现这种SQL

SELECT
	count( 0 ) 
FROM
	tc_order 
WHERE
	(
	
	(
	
	(order_type = ? AND order_status IN (?)) 
			OR 
	(order_type = ? AND order_status IN (?)) 
			OR 
	(order_type = ? AND order_status IN (?))
	
	) 
	
		AND (app_id IN (?,?)) 
		AND (created_date BETWEEN ? AND ?)
		
	)

实现代码

QueryWrapper<TcOrderDO> queryWrapper = new QueryWrapper<>();

if (query.getOrderStatus() != null) {
    OrderStatusQueryEnum orderStatusQueryEnum = OrderStatusQueryEnum.codeOf(Integer.parseInt(query.getOrderStatus()));
    queryWrapper.and(wrapper -> {
        for (QueryStatusMapDTO queryStatusMapDTO : orderStatusQueryEnum.getQueryStatusMap()) {
            wrapper.or(wp -> wp.eq("order_type", queryStatusMapDTO.getOrderTypeCode())
                       .in("order_status", queryStatusMapDTO.getOrderTypeStatusCodes()));
        }
    });
}

queryWrapper.and(wp -> wp.in("app_id", "70f01e7xxxxxxxx", "aaaaaaaaa346c0"));

if (query.getUserId() != null) {
    queryWrapper.and(wp -> wp.in("user_id", query.getUserId()));
}

if (query.getPlaceOrderData() != null) {
    LocalDate placeOrderData = query.getPlaceOrderData();
    LocalDateTime startTime = LocalDateTime.of(placeOrderData.getYear(), placeOrderData.getMonth(), placeOrderData.getDayOfMonth()
                                               , 0, 0, 0);
    LocalDateTime endTime = LocalDateTime.of(placeOrderData.getYear(), placeOrderData.getMonth(), placeOrderData.getDayOfMonth()
                                             , 23, 59, 59);
    queryWrapper.and(wp -> wp.between("created_date", startTime, endTime));
}

List<TcOrderDO> tcOrderDOS = this.getBaseMapper().selectList(queryWrapper);
6.2 详细解释
6.2.1想给循环语句外面套括号
//循环语句外加括号 + 内部语句加括号
queryWrapper.and(wrapper -> {
    for (QueryStatusMapDTO queryStatusMapDTO : orderStatusQueryEnum.getQueryStatusMap()) {
        wrapper.or(wp -> wp.eq("order_type", queryStatusMapDTO.getOrderTypeCode())
                   .in("order_status", queryStatusMapDTO.getOrderTypeStatusCodes()));
    }
});

//简单版 循环语句外加括号
queryWrapper.and(wrapper -> {
            for(String bm : list) {
                wrapper.like("xxxxx", bm).or();
            }
            return wrapper;
        });
6.2.2 实现 B or C => (B or C)
queryWrapperw.eq("pid", bid).or().eq("pid2",bid); //错误示范

打印结果:select * form litemall_business where deleted=0 and pid=1 or pid2=1

queryWrapperw.and(wrapper -> wrapper.eq("pid", bid).or().eq("pid2", bid)); //正确结果

打印结果:select * form litemall_business where deleted=0 and (pid=1 or pid2=1)

6.2.3 A or(C and D)
@GetMapping("/A_or_CandD")
    public Object A_or_CandD() {
        //SELECT id,name,age,sex FROM student WHERE (name = ? OR (name = ? AND age = ?)) 
      List<Student> list =
          studentService
              .lambdaQuery()
              .eq(Student::getName, "1")
              .or(wp -> wp.eq(Student::getName, "1").eq(Student::getAge, 12))
              .list();
      return list;
6.2.4 (AandB)or(CandD)
@GetMapping("/AandB_or_CandD")
  public Object AandB_or_CandD() {
    // SELECT id,name,age,sex FROM student WHERE ((name = ? AND age = ?) OR (name = ? AND age = ?)) 
    List<Student> list =
        studentService
            .lambdaQuery()
            .and(wp -> wp.eq(Student::getName, "1").eq(Student::getAge, 12))
            .or(wp -> wp.eq(Student::getName, "1").eq(Student::getAge, 12))
            .list();
    return list;
  }
  • 6
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值