[Separación de front-end y back-end] Consulta conjunta de múltiples tablas de back-end

Efecto: consulte la tabla de usuarios a través de la información en el cuadro de entrada, diseñe la consulta conjunta del departamento y la tabla de usuarios

inserte la descripción de la imagen aquí

Lógica de negocios

De acuerdo con la información ingresada en varios cuadros de entrada diferentes en la página, los datos correspondientes se encuentran en la tabla de datos, similar a la consulta por condiciones

código de proyecto

1 código original del proyecto

@GetMapping("/findDoctorList")
    public Result findDoctorList(@RequestParam(required = true,defaultValue = "1")Integer current,
                                 @RequestParam(required = true,defaultValue = "6")Integer size){
    
    
        //对 用户进行分页,泛型注入的为用户类
        Page<Doctor>page=new Page<>(current,size);
        //此种查询不限查询条件,即全部查询
        Page<Doctor> doctorPage = doctorService.page(page);
        long total = doctorPage.getTotal();
        List<Doctor> records = doctorPage.getRecords();
        return Result.ok().data("total",total).data("records",records);
    }

Efecto de la prueba (descubre todos los datos)

inserte la descripción de la imagen aquí

2 Utilice el método de consulta condicional que viene con Mybatisplus para consultar, aquí hay un ejemplo de un determinado atributo

@GetMapping("/findDList")
    public Result findDList(@RequestParam(required = true,defaultValue = "1")Integer current,
                                 @RequestParam(required = true,defaultValue = "6")Integer size){
    
    
        //对 用户进行分页,泛型注入的为用户类
        Page<D>page=new Page<>(current,size);
        LambdaQueryWrapper<D> queryWrapper=new LambdaQueryWrapper<>();
        // 只适用于单表查询 此举含义是将D中的dmentID属性赋值为1,即仅查询dmentID=1的对象
        //但此方法多表联查不好查,只能在单表内进行查询
        queryWrapper.eq(D::getDmentId,1);
        //限制性别属性为1
        queryWrapper.eq(D::getSex,1);
        // 如果以上两条同时限定,则在需要限制同时查出 dment=1和sex=1的用户
        Page<D> dPage = dService.page(page,queryWrapper);
        long total = dPage.getTotal();
        List<D> records = dPage.getRecords();
        return Result.ok().data("total",total).data("records",records);
    }

Resultados de la prueba (límite dment=1 y sex=1 al mismo tiempo)

inserte la descripción de la imagen aquí
3 Anule el método QueryWrapper

Del proceso anterior se desprende que al consultar por condiciones se utiliza el método de LambdaQueryWrapper , de hecho también es posible consultar directamente mediante QueryWrapper , pero QueryWrapper utiliza el objeto Entity para encapsular la clase de operación, mientras que LambdaQueryWrapper utiliza las expresiones Lambda, debido a que los campos de atributo en varias tablas son necesarios cuando se realiza una consulta conjunta de varias tablas, el método de reescritura de QueryWrapper se presenta principalmente aquí .

  1. Para consultar la sentencia SQL, en el archivo xml correspondiente a la clase de entidad, escriba la siguiente sentencia
<!--findDPage与mapper.java种对应的方法一样-->
  <select id="findDPage" resultType="D">
        select u.`id`, `username`, `nickname`, `email`, `avatar`, `phone_number`, `status`,
               u.`create_time`, u.`modified_time`, `sex`, `salt`, `type`, `password`, `birth`,
               `dment_id`, `deleted`,d.name as name
        from d u
        inner join dment d
        on u.dment_id = d.id
        ${ew.customSqlSegment}<!-- 为了配合QueryWrapper中的条件 -->
    </select>

2 métodos Mapper.java

public interface DMapper extends BaseMapper<D> {
    
    
    IPage<D> findDPage(Page<D>page,@Param(Constants.WRAPPER) QueryWrapper<D> wrapper);
}

3 métodos de servicio

public interface DService extends IService<D> {
    
    
    IPage<D> findDPage(Page<D> page, @Param(Constants.WRAPPER) QueryWrapper<D> wrapper);
}

4 Método ServiceImp

@Service
public class DServiceImpl extends ServiceImpl<DMapper, D> implements DService {
    
    
    @Override
    public IPage<D> findDPage(Page<D> page, QueryWrapper<D> wrapper) {
    
    
        return this.baseMapper.findDPage(page,wrapper);
    }
}

5 Defina la clase ViewObject correspondiente a la capa Ver. Las propiedades en esta categoría corresponden a las condiciones de consulta requeridas por la página de visualización

@Data
public class DVO {
    
    
    private String username;
    private String nickname;
    private String email;
    private Integer sex;
    private Long departmentId;
}

inserte la descripción de la imagen aquí
5 Llamada del controlador

Dado que la página del front-end necesita consultar una gran cantidad de datos, encapsúlelos en el archivo json de DVO para pasar el valor del front-end al back-end, preste atención al uso del método Post para solicitar,

 @PostMapping("/findDPage")
    public Result findDPage(@RequestParam(required = true,defaultValue = "1")Integer current,
                                 @RequestParam(required = true,defaultValue = "6")Integer size,
                                 @RequestBody DVO dVO){
    
    
        //对 用户进行分页,泛型注入的为用户类
        Page<D>page=new Page<>(current,size);
        //LambdaQueryWrapper<D> queryWrapper=new LambdaQueryWrapper<>();
        // 只适用于单表查询 多表联查不好查
        //queryWrapper.eq(D::getDepartmentId,1);
        QueryWrapper<Doctor>queryWrapper=getWapper(dVO);
        IPage<D> dPage = dService.findDPage(page,queryWrapper);
        long total = dPage.getTotal();
        List<D> records = dPage.getRecords();
        return Result.ok().data("total",total).data("records",records);
    }
    private QueryWrapper<D>getWapper(DVO dVO){
    
    
        QueryWrapper<D>queryWrapper=new QueryWrapper<>();
        if(dVO!=null){
    
    
            if(!StringUtils.isEmpty(dVO.getDepartmentId())){
    
    
                queryWrapper.eq("department_id",dVO.getDepartmentId());
            }
            if(!StringUtils.isEmpty(dVO.getUsername())){
    
    
                queryWrapper.eq("username",dVO.getUsername());
            }
            if(!StringUtils.isEmpty(dVO.getEmail())){
    
    
                queryWrapper.eq("email",dVO.getEmail());
            }
            if(!StringUtils.isEmpty(dVO.getSex())){
    
    
                queryWrapper.eq("sex",dVO.getSex());
            }
            if(!StringUtils.isEmpty(dVO.getNickname())){
    
    
                queryWrapper.eq("nickname",dVO.getNickname());
            }
        }
        return queryWrapper;
    }

Prueba (consulta exitosa)

inserte la descripción de la imagen aquí

Supongo que te gusta

Origin blog.csdn.net/qq_29750461/article/details/122606486
Recomendado
Clasificación