组合查询

Mybaits-plus 中,两张表组合查询,xml方式


在FlowMapper接口中自定义接口

public interface FlowMapper extends BaseMapper<Flow> {
    List<Flow> pageList(FlowDTO dto);
}

手动添加FlowMapper.xml文件,添加到相应的位置,然后进行具体的逻辑编写

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ruoyi.project.dy.mapper.FlowMapper">

    <resultMap id="resultMap" type="com.ruoyi.project.dy.domain.Flow">
        <id property="flowId" column="flow_id"/>
        <result property="flowName" column="flow_name"/>
        <result property="cyclicTimes" column="cyclic_times"/>
        <result property="status" column="status"/>
        <result property="createBy" column="create_by"/>
        <result property="createTime" column="create_time"/>
        <result property="updateBy" column="update_by"/>
        <result property="updateTime" column="update_time"/>
    </resultMap>

    <select id="pageList" parameterType="FlowDTO" resultMap="resultMap">
        select f.*
        from t_flow f
        left join t_flow_bind fb on f.flow_id=fb.flow_id
        <where>
            <if test="flowName !=null and flowName != ''">
                and f.flow_name = #{flowName}
            </if>
            <if test="productTno !=null and productTno != '' ">
                and fb.product_tno = #{productTno}
            </if>
            <if test="scheduleStage !=null and scheduleStage != '' ">
                and fb.schedule_stage = #{scheduleStage}
            </if>
            <if test="flowStatus !=null">
                and f.status = #{flowStatus}
            </if>
        </where>
    </select>
</mapper>

修改namespace,并且自定义传入参数类型

package com.ruoyi.project.dy.domain.dto;

import lombok.Data;

/**
 * @author LIAO
 */
@Data
public class FlowDTO {
    /**
     * 流程名称
     */
    private String flowName;
    /**
     * 图号
     */
    private String productTno;
    /**
     * 阶段编号
     */
    private String scheduleStage;
    /**
     * 流程状态
     */
    private String flowStatus;
}

然后在service和service实现类中进行实现

/**
 * 流程列表
 *
 * @param dto 条件查询
 * @return
 */
List<Flow> pageList(FlowDTO dto);


 @Override
   public List<Flow> pageList(FlowDTO dto) {
		return baseMapper.pageList(dto);
   }

最后在cnotroller中进行调用,注意使用若依分页的时候,startPage()写在需要分页查询的前面,手动获取分页的结果,getDataTable(),并自定义返回结果

@GetMapping("/list")
public TableDataInfo list(FlowDTO dto) {

    //默认状态 0 正常 没用注销状态
    String flowStatus = "0";

    dto.setFlowStatus(flowStatus);


    //条件查询
    startPage();
    List<Flow> flowList = flowService.pageList(dto);

    // List<Flow> flowList = flowService.list(Wrappers.<Flow>query().lambda().eq(Flow::getStatus, flowStatus));

    // 用于流程管理页面展示
    TableDataInfo dataTable = getDataTable(flowList);

    List<FlowIndexVo> list = new ArrayList<>();

    // 根据流程id遍历流程和图号绑定表
    for (Flow f : (List<Flow>) dataTable.getRows()) {
        FlowIndexVo flowIndexVo = new FlowIndexVo();
        String flowId = f.getFlowId();
        flowIndexVo.setFlowId(flowId);
        flowIndexVo.setFlowName(f.getFlowName());
        flowIndexVo.setUpdateTime(f.getUpdateTime());
        List<FlowBind> flowBinds = flowBindService
                .list(Wrappers.<FlowBind>query().lambda().eq(FlowBind::getFlowId, flowId));
        flowIndexVo.setFlowBindList(flowBinds);
        list.add(flowIndexVo);
    }

    dataTable.setRows(list);
    return dataTable;
}
posted @ 2021-08-14 16:15  达达i  阅读(55)  评论(0编辑  收藏  举报