Mybatis-plus 处理 (is_sent = 0 OR is_sent IS NULL)

53 阅读1分钟

现需要根据(is_sent = 0 OR is_sent IS NULL)条件进行查询,原始sql如下:

SELECT * FROM exam_notice_entity 
WHERE published_datetime = '2023-04-05' 
AND ((is_sent = 0 OR is_sent IS NULL)) 

在代码中格式如下:


LocalDate today = LocalDate.now();
Date todayAsDate = Date.from(today.atStartOfDay(ZoneId.systemDefault()).toInstant());
List<ExamNoticeEntity> notices = examNoticeService.list(Wrappers.<ExamNoticeEntity>lambdaQuery()
   .eq(ExamNoticeEntity::getPublishedDatetime, todayAsDate)
      .and(i -> i
         .eq(ExamNoticeEntity::getIsSent, YesNoEnum.NO.getValue())
         .or()
         .isNull(ExamNoticeEntity::getIsSent)
      ));
      
// 错误示例
List<ExamNoticeEntity> notices = examNoticeService.list(Wrappers.<ExamNoticeEntity>lambdaQuery()
   .eq(ExamNoticeEntity::getPublishedDatetime, todayAsDate)
   .eq(ExamNoticeEntity::getIsSent, YesNoEnum.NO.getValue())
   .or()
   .isNull(ExamNoticeEntity::getIsSent));