mybatis plus合并两个wrapper

该博客详细介绍了如何在MyBatisPlus中使用QueryWrapper进行复杂查询,包括联合查询、自定义SQL片段以及参数合并等操作。通过示例代码展示了如何查询未生成基准报警的基准缺陷,涉及数据表连接、条件构造等核心概念。
摘要由CSDN通过智能技术生成
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.toolkit.Constants;
import com.guotie.mdc.base.po.datumdefect.DatumDefectPO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;

import java.util.List;

/**
 * @author liaoz
 */
@Mapper
public interface DatumDefectDao extends BaseMapper<DatumDefectPO> {
    /**
     * 查询未生成基准报警的基准缺陷
     *
     * @param frameTable 关联表 可能是 data_alarm_frame_w data_alarm_frame_g data_alarm_frame_s
     */
    @Select("SELECT d.* FROM e01d d LEFT JOIN ( " +
            "SELECT f.datum_defect_id FROM ${frameTable} f LEFT JOIN ${alarmTable} a ON f.alarm_id = a.id ${ew.customSqlSegment} " +
            ") as fa ON fa.datum_defect_id = d.f01 ${sql}")
    List<DatumDefectPO> selectUnMark(@Param("frameTable") String frameTable, @Param("alarmTable") String alarmTable, @Param(Constants.WRAPPER) QueryWrapper<?> dataWrapper, @Param("sql") String sql);
}

        QueryWrapper<DatumDefectPO> wrapper = new QueryWrapper<>();
        rangeFrameWrapper(wrapper, query);
        rangeAlarmWrapper(wrapper, query);

        QueryWrapper<DatumDefectPO> dWrapper = new QueryWrapper<>();
        rangeUnMarkWrapper(dWrapper, query);
        dWrapper.isNull(FA_HEAD + "datum_defect_id");

        //warn: 此处骚操作   作用为将两个wrapper合并
        String dSql = StrUtil.replace(dWrapper.getCustomSqlSegment(), "ew.paramNameValuePairs.", "ew.paramNameValuePairs._");
        Map<String, Object> map = wrapper.getParamNameValuePairs();
        dWrapper.getParamNameValuePairs().forEach((key, value) -> map.put("_" + key, value));

        String domainStr = "w";
        List<DatumDefectPO> pos = datumDefectDao.selectUnMark("data_alarm_frame_" + domainStr, "data_alarm_" + domainStr, wrapper, dSql);
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值