Primeira edição da sequência UPDATE. O DAO ganha dois métodos: daoSingle (carregar um registro pelo ID) e daoUpdate (gravar alterações). O Model ganha o wrapper update(bean). Três adições mínimas que seguem exatamente o mesmo padrão do daoInsert / insert da sequência anterior.
package br.xt.app.departamento.produto;
import br.jasap.core.AppManager;
import br.jasap.dao.Query;
import br.jasap.util.JasapList;
import br.xt.AppsRootDAO;
public class DepartamentoProdutoDAO extends AppsRootDAO {
public DepartamentoProdutoDAO() {
}
public DepartamentoProdutoDAO(AppManager manager) {
setManager(manager);
setDataBase(manager.getDataBase());
}
public void daoList(JasapList list) throws Exception {
StringBuilder sql = new StringBuilder();
sql.append("select a.* from " + DepartamentoProdutoBean.TABLE + " a <orderby>");
Query query = getDataBase().getQuery(sql.toString());
select().executeList(query, list);
while (query.next()) {
DepartamentoProdutoBean bean = new DepartamentoProdutoBean();
query.populateBean(bean);
list.getList().add(bean);
}
query.release();
}
public void daoInsert(DepartamentoProdutoBean bean) throws Exception {
insert().execute(bean, DepartamentoProdutoBean.TABLE);
}
// ADICIONAR
public void daoSingle(DepartamentoProdutoBean bean) throws Exception {
select().execute(bean, DepartamentoProdutoBean.TABLE);
}
public void daoUpdate(DepartamentoProdutoBean bean) throws Exception {
update().execute(bean, DepartamentoProdutoBean.TABLE);
}
// FIM
public void daoDelete(DepartamentoProdutoBean bean) throws Exception {
delete().execute(bean, DepartamentoProdutoBean.TABLE);
}
}
Mudanças nesta sequência: os métodos daoSingle e daoUpdate (verde). Tudo o mais já existia das sequências anteriores (READ, DELETE, CREATE).
package br.xt.app.departamento.produto;
import br.jasap.core.AppManager;
public class DepartamentoProdutoModel extends DepartamentoProdutoDAO {
public DepartamentoProdutoModel(AppManager manager) {
super(manager);
}
public void insert(DepartamentoProdutoBean bean) throws Exception {
daoInsert(bean);
}
// ADICIONAR
public void update(DepartamentoProdutoBean bean) throws Exception {
daoUpdate(bean);
}
// FIM
}
Mudança nesta sequência: somente o método update (verde). O construtor e o insert já existiam das sequências anteriores.
daoSingle faz? — select().execute
Enquanto o daoList carrega vários registros com SQL manual, o daoSingle carrega um só — via reflection:
select().execute(bean, DepartamentoProdutoBean.TABLE);
O helper select() herdado de JasapDAO inspeciona o Bean, encontra o getter marcado com @DBInfo(pk=true) (getId_produto()), e monta automaticamente:
SELECT * FROM departamento.produto WHERE id_produto = ?
O ? é preenchido com o valor que já está no Bean (bean.getId_produto()). Depois de executar, o select().execute popula todos os campos do Bean com os dados do banco — nome, valor, quantidade, observações.
Pré-requisito: o Bean precisa ter o ID preenchido ANTES de chamar daoSingle. É por isso que o ShowUpdate faz proBean().setId_produto(...) primeiro.
select / insert / update / delete
Com o daoUpdate e o daoSingle, o DAO agora tem os 4 helpers completos do JasapDAO:
| Helper | Método no DAO | O que faz via reflection |
|---|---|---|
select() | daoSingle | SELECT * WHERE pk = ? — carrega 1 registro |
insert() | daoInsert | INSERT INTO ... VALUES (...) — cria registro |
update() | daoUpdate | UPDATE ... SET ... WHERE pk = ? — altera registro |
delete() | daoDelete | DELETE FROM ... WHERE pk = ? — remove registro |
Todos funcionam do mesmo jeito: inspecionam o Bean via @DBInfo, montam o SQL automaticamente, executam. O chamador só precisa preencher o Bean — o framework cuida do resto.
A diferença do daoList é que ele usa SQL manual (StringBuilder + Query) porque precisa de JOIN, WHERE dinâmico, ordenação e paginação — coisas que o helper simples não cobre.