Opções de mapeamento mais simples para muitos campos?

Tenho uma aplicação com dados em um arquivo TXT e uso para alimentar um banco. Aí já vai dois mapeamentos: do Arquivo TXT e do Banco com os nomes das colunas e suas posições (além de poder conter também dados como descrição, tipo, etc).
Daí quando carrego uma JTable, outro mapeamento…o da JTable…
No banco, arquivo txt e JTable, os dados podem conter ainda colunas (ou campos, como preferir) que não estão nos outros locais. Além disso pode exibir essas colunas em ordens diferentes ou omitir alguns dados.

Como consigo agregar de forma simples esses dados de mapeamento em um lugar só e direcionar o mapeamento do banco, arquivo txt e JTable de um só lugar (centralizando todas as informações de mapeamento)?

Eu costumo usar varíaveis do tipo public static int CAMPO1_POSICAO = 1 nos cabeçalhos das classes, mas isso está se tornando ineficiente com muitos campos e muitos mapeamentos para cada lugar…

Os dados não são de uma classe só. A JTable, por exemplo, pode exibir dados de uma classe, onde determinadas colunas exibem dados de objetos de outras classes - relacionadas com a entidade que estou representando.

Isso antes não costumava ser um problema…mas lidando com 20 ou mais colunas, estou sentindo a necessidade de organizar isso tudo…

Meu aplicativo é Desktop (Swing).

OBS: Não estou usando Hibernate ou outros frameworks de manipulação de dados. Neste caso, não pretendo usá-lo, pois o projeto já está quase finalizado.

Faz um view no banco de dados que traga os dados ja formatado e a partir dai faz um PrepareStatment e joga o resultado da consulta direto pra JTable…

Amigo, isso não resolve…

Quero mapear os dados em três lugares diferentes e não só BANCO DE DADOS <-> JTABLE.

Minha pergunta é de que forma posso mapear esses dados… Se crio uma classe que faz a interligação, se já há classes para isso, a idéia é parar de usar mapeamentos em cada lugar…eu buscar esses dados de um lugar só para toda a aplicação.

Eu queria saber que metodologia é mais usada para esses casos…

Carregar os dados da forma que você falou e jogar na JTable é relativamente simples…mas depois fico com problemas porquê vou manipular como objetos esses dados, alimentando relatórios, cálculos…etc

E também têm outro mapeamento… dentro do arquivo PDF que vou gerar com listagens dos dados dos objetos…

São mapeamentos que não acabam mais… :smiley:

Boa tarde.

Se queres mapear, porque não HashMap? Ou até mesmo uma Lista de Hashmap caso se faça necessario.
Você pode utilizar como key as descrições dos campos e como values valores de String, depois os resultados retornados do banco faça o parser para string, adiciona novamente nas mesmas keys mas desta vez com os valores vindos do banco e em seguida, utilizando as keys, você pega os valores contidos no Hashmap e adiciona ao seu JTable.

Resolveria?
Abraços.

Boa tarde,

Pode ser um HashMap sim.

Mas para agregar esse volume de informações, precisaria criar uma classe que representa o mapeamento em todos os locais:

public class MapeamentoGeral {

   public enum TIPO_MAPEAMENTO {
          ARQUIVO_TXT, BANCO_DADOS, JTABLE, ARQUIVO_PDF
   }

   private TIPO_MAPEAMENTO tipoMapeamento;
   private String nomeCampo;
   private int posicao;
   private String descricao;
   //representação do período que aquele mapeamento foi válido
   private Date dataInicial;    
   private Date dataFinal;


   // Construtor e métodos set e get
   // ...

}

Acho que o jeito seria criar um mapa dentro de outro mapa.
Daí poderia criar o HashMap que vai guardar tudo e passar os dados que eu quero.
Vocês acham que o código abaixo ficaria bom…ou poderia ser mais simples para esse propósito?


//...

HashMap <MapeamentoGeral.TIPO_MAPEAMENTO, HashMap <String, MapeamentoGeral>> mapeamentoRaiz = 
                         new <MapeamentoGeral.TIPO_MAPEAMENTO , HashMap <String, MapeamentoGeral>> HashMap();

/*
     ... 
     Após os métodos put
     ...
     ...
*/
HashMap <String, MapeamentoGeral> mapeamentoCampos = mapeamentoRaiz.get(TIPO_MAPEAMENTO.ARQUIVO_PDF);

//retornando o índice da coluna no arquivo PDF
int colunaValorTotal = mapeamentoCampos.get("VALOR_TOTAL").getPosicao();


//...

Pelo menos, nas classes em que eu manipular PDF, já pego o mapeamento para o arquivo, nas classes do banco, já obtenho o mapeamento dos campos…