Como criar uma camada de persistência?

Olá pessoal!

Sou novo na programação java e OO. Estou desenvolvendo um projeto para a faculdade e tenho que criar uma camada de dados e persistência. Mas como cria a camada de persistência? Sei que não é uma boa prática colocar as funções de salvamento e alterações dos dados no banco na classe que contém esses dados. Estou meio confuso? Alguém pode me ajudar?

Olá, bom dia…
Seja bem vindo. :grin:
Bom, as classes que contém os dados, nós chamamos de model…
por exemplo: Cliente, contém id,nome,rg, setteres e getteres…
aí vc terá ClienteDAO, onde colocará o CRUD(create,read,update,delete)…então vc transportará os dados para fazer as operações no banco através do objeto cliente…

....
public void save(Cliente cliente){
...
}
...

para cada objeto model, vc terá um objeto DAO…seria interessante que esses objetos DAO, extendessem um BASEDAO, onde vc faria a conexao com o banco, e por herança todos os DAO’s teriam um método getConnection…

Acho que é isso.

t+

[]'s

ótima leitura sobre o pattern DAO:

http://java.sun.com/blueprints/corej2eepatterns/Patterns/DataAccessObject.html

Também estou nessa fase do projeto, mas um pouco a frente.

Já defini que vou usar DAO com SQL puro.

A dúvida é como/onde meus objetos de modelos devem estar/ser completamente montados. Opcoes que levantei:

  1. Fazer select’s nos meus dados com JOIN e montar os objetos já completos. Nesse caso os DAO’s de outros objetos poderiam perder o sentido;
  2. Fazer um select sem JOIN e fazer chamadas aos outros DAO pra recuperar os objetos referenciados (e aconselhavel um DAO conhecer outro?);
  3. Os DAO’s retornariam objetos com apenas os valores das tabela para um montador que chamaria outros DAO para entao retornar meus objetos de modelo pra o cliente. Ak eu teria, hipoteticamente, classe Cliente com referencia para os outros objetos e classe ClienteThin com os identificadores dos objetos relacionados.

Queria saber se vcs usam uma dessas tres formas, ou se usam outra.

Todos os exemplos que olhei, incluindo o
http://java.sun.com/blueprints/corej2eepatterns/Patterns/DataAccessObject.html
, nao tratam disso. Consideram que Cliente tera um campo cidade com o nome da cidade e nao uma referencia para um objeto da classe Cidade, como de fato eh o q acontece.

a opção 2 é a mais simples e direta eu diria, mas no caso onde há muitas referências entre objetos/tabelas, e uma carga de dados muito grande é retornada do banco, é interessante a alternativa 3, q nada mais é do q lazi loading … de uma pesquisada sobre :slight_smile: