[Separação de front-end e back-end] Consulta conjunta de várias tabelas de back-end

Efeito: consultar a tabela de usuários através das informações na caixa de entrada, projetar a consulta conjunta do departamento e da tabela de usuários

insira a descrição da imagem aqui

Logíca de negócios

De acordo com as informações inseridas em várias caixas de entrada diferentes na página, os dados correspondentes são encontrados na tabela de dados, semelhante à consulta por condições

Código do projeto

1 Código original do projeto

@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);
    }

Efeito de teste (descubra todos os dados)

insira a descrição da imagem aqui

2 Use o método de consulta condicional que vem com o Mybatisplus para consultar, aqui está um exemplo de um 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 do teste (dment limite=1 e sexo=1 ao mesmo tempo)

insira a descrição da imagem aqui
3 Substitua o método QueryWrapper

Pode-se ver pelo processo acima que ao consultar por condições, é utilizado o método de LambdaQueryWrapper . Na verdade, também é possível consultar diretamente por meio de QueryWrapper , mas QueryWrapper usa o objeto Entity para encapsular a classe de operação, enquanto LambdaQueryWrapper usa as expressões Lambda, porque os campos de atributo em várias tabelas são obrigatórios ao executar uma consulta conjunta de várias tabelas, o método de reescrever QueryWrapper é introduzido principalmente aqui .

  1. Para consultar a instrução SQL, no arquivo xml correspondente à classe de entidade, escreva a seguinte instrução
<!--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 serviço

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 a classe ViewObject correspondente à camada View. As propriedades nesta categoria correspondem às condições de consulta exigidas pela página de exibição

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

insira a descrição da imagem aqui
5 Chamada do controlador

Como a página de front-end precisa consultar muitos dados, encapsule-os no arquivo json do DVO para passar o valor do front-end para o back-end, preste atenção em usar o 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;
    }

Teste (sucesso da consulta)

insira a descrição da imagem aqui

Acho que você gosta

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