Essa pergunta nem é de Java nem é de Avançado, mas vamulah…
Existem milhões de jeitos de estruturar uma aplicação em camadas… um dos mais bonitos é o MVC (Model-View-Controller) e suas variações. É também um dos melhores, simplesmente porque funciona.
Nosso famoso fabricante de software te vendeu uma bicicleta como se fosse moto. Barioni, essas não são exatamente camadas, né?
Fora que quando vc manipula bancos de dados, o mais legal é deixar o máximo possível fora do código: nomes de tabelas e colunas, queries, strings de conexão, tudo isso deve ficar em arquivos de configuração (tanto faz se a aplicação é web ou não). Nem sempre dá pra fazer, mas quando dá…
Normalmente o armazenamento de dados fica inteiro em uma camada só (mas pode ter vários pacotes), e a interface com o usuário também deve ficar separada numa camada só.
Quando a gente faz aplicações em 3 camadas aqui, a gente divide mais ou menos assim:
br.empresa.projeto.core: dados que viajam pelo RMI.
br.empresa.projeto.client: interface com o usuário.
br.empresa.projeto.server: parte do servidor, que conversa com o banco.
A camada de acesso ao banco fica dentro do pacote server, porque a gente já tem código aproveitado de outros lugares (falar com o banco usa uma classe e um arquivo properties).
Esse esquema é legal pq vc pode replicar o core nos dois jars (client.jar e server.jar) e, uma vez que o core esteja sólido, vc pode mexer no server sem alterar os clientes e vice-versa.
A divisão em pacotes não tem tanta relação assim com a divisão em camadas, mas é legal que os pacotes de diferentes camadas sejam diferentes.
[]s!