Primeira edição da sequência DELETE. O DAO, que até agora só tinha o daoList, ganha UM método a mais: daoDelete. Uma única linha de lógica que usa o framework pra executar um DELETE pelo ID.
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 daoDelete(DepartamentoProdutoBean bean) throws Exception {
delete().execute(bean, DepartamentoProdutoBean.TABLE);
}
}
Mudança nesta sequência: somente o método daoDelete (verde). Tudo o mais já existia da sequência CRUD READ.
Via reflection. O delete().execute(bean, TABLE) inspeciona o Bean procurando um getter com a anotação @DBInfo(pk=true). Encontra o getId_produto(). A partir daí, monta automaticamente:
DELETE FROM departamento.produto WHERE id_produto = ?
E passa o valor de bean.getId_produto() como parâmetro. O chamador (DeleteFromList no próximo arquivo) só precisa criar uma ficha em branco e colocar o ID nela — todo o resto é o framework.
throws Exception
O DAO NÃO captura exceções aqui. Dois erros comuns deixam subir:
SQLConstraintException — quando outra tabela tem uma FK apontando pra este registro. A DeleteFromList captura especificamente pra mostrar Toast amigável.ErrorFilter global que mostra tela amigável.Divisão clara: DAO só fala com o banco, tratamento fica com quem chama.