Versão ALPHA! Este artigo está em versão 'Alpha' e, portanto, não foi ainda revisado corretamente

Entidades em hierarquia - ConsultaDelegate

Introdução

Assim que o teste de sua consulta delegate estiver pronto é preciso implementar a mesma, este artigo abordará apenas tópicos referentes a implementação de Consultas delegate, nada mais, em caso de dificuldades em relação a implementação da Consulta seguir para o artigo referente à Consultas.

O método list

Antes de iniciar a implementação deste método declare a propriedade Provider<NativeSql> sqlProvider no topo da classe, junto do construtor

private final Provider<NativeSql> sqlProvider;

@Inject
public ConsultaDeEmpregadoDelegate(Provider<NativeSql> sqlProvider) {
  this.sqlProvider = sqlProvider;
}

Implementando o método list

Não há muito segredo aqui, para diminuir a retrabalho é possível reaproveitar parte da consulta (código sql) da classe BuscarEmpregado, antes de implementar sua consulta sql verifique o buscador da entidade em questão e se é possível reaproveitar a consulta sql que está sendo utilizada.

public List<ConsultaDeEmpregadoDTO> list(RequestWrapper wrapper, String discriminador) {
Page page = wrapper.getPage();

return sqlProvider.get()

    .add("select *")
    .add("from BASE_EMPRESA.EMPREGADO")

    .add("left join BASE_EMPRESA.AREA as AREA")
    .add("on EMPREGADO.AREA_ID = AREA.ID")

    .add("EMPREGADO.CLASSE = ?").param(discriminador)

    .add("order by")
    .add("EMPREGADO.NOME asc")

    .andLoadWith(new DTOLoader())

    .listPage(page);
}

Inner class DTO

Ao implementar classes como DTO, DTOLoader e Loader em Consultas é sempre mais fácil começar pela parte de baixo, como no caso da classe DTO

private class DTO implements ConsultaDeEmpregadoDelegateDTO {

    private final int id;
    private final String nome;
    private final String departamento;
    private final String area;

    public DTO(ConsultaDeEmpregadoDelegateDTO construtor) {
      this.id = construtor.getId();
      this.nome = construtor.getNome();
      this.departamento = construtor.getDepartamento();
      this.area = construtor.getArea();
    }

    @Override
    public int getId() {
      return id;
    }

    @Override
    public String getNome() {
      return nome;
    }

    @Override
    public String getDepartamento() {
      return departamento;
    }

    @Override
    public String getArea() {
      return area;
    }

}

Inner class DTOLoader

Novamente não há nada de novo aqui, a implementação desta classe continua análoga a de qualquer tipo de consulta

private class DTOLoader implements ResultSetLoader<ConsultaDeEmpregadoDelegateDTO> {

@Override
public ConsultaDeEmpregadoDelegateDTO load(ResultSet resultSet) throws SQLException {
  ResultSetWrapper rs = new ResultSetWrapper(resultSet);
  return new Loader(rs).novaInstancia();
}

Inner class Loader

Para finalizar a implementação da Consulta adicione dentro de DTOLoader a classe Loader responsável em popular nossa entidade DTO com dados do banco de dados.

private class Loader implements ConsultaDeEmpregadoDelegateDTO,
    Construtor<ConsultaDeEmpregadoDelegateDTO> {

  private final ResultSetWrapper rs;

  public Loader(ResultSetWrapper rs) {
    this.rs = rs;
  }

  @Override
  public ConsultaDeEmpregadoDelegateDTO novaInstancia() {
    return new DTO(this);
  }

  @Override
  public int getId() {
    return rs.getInt("EMPEGADO.ID");
  }

  @Override
  public String getNome() {
    return rs.getString("EMPEGADO.NOME");
  }

  @Override
  public String getDepartamento() {
    return rs.getString("EMPEGADO.DEPARTAMENTO");
  }

  @Override
  public String getArea() {
    return rs.getString("AREA.NOME");
  }
  
}

Assim nossa Consulta delegate está pronta, sabendo que a consulta delegate funciona é possível utilizar esta consulta dentro da Consulta de Gerente e nas consultas de qualquer entidade que seja um Emmpregado.


 
 

objectos, Fábrica de Software LTDA

  • R. Demóstenes, 627. cj 123
  • 04614-013 - Campo Belo
  • São Paulo - SP - Brasil
  • +55 11 5093-8640
  • +55 11 2359-8699
  • contato@objectos.com.br