public Funcionario listById(int codigo) {
        Connection con = null;
        PreparedStatement pstm = null;
        ResultSet rs = null;
        Funcionario f = new Funcionario();

        try {
            con = ConnectionFactory.getConnection();
            pstm = con.prepareStatement(LISTBYID);
            pstm.setInt(1, codigo);
            rs = pstm.executeQuery();

            while (rs.next()) {

                f.setCodigo(rs.getInt("codigo"));
                f.setNome(rs.getString("nome"));
                f.setIdade(rs.getInt("idade"));
                f.setSexo(rs.getString("sexo"));
                f.setDataNascimento(rs.getDate("data_nascimento"));
                f.setRg(rs.getString("rg"));
                f.setCpf(rs.getString("cpf"));
                f.setTelefone(rs.getString("telefone"));

                Endereco e = new Endereco();
                e.setEstado(rs.getString("endereco.estado"));
                e.setCidade(rs.getString("endereco.cidade"));
                e.setBairro(rs.getString("endereco.bairro"));
                e.setRua(rs.getString("endereco.rua"));
                e.setComplemento(rs.getString("endereco.complemento"));
                e.setNumero(rs.getInt("endereco.numero"));
                e.setCodigo(rs.getInt("endereco.codigo"));
                f.setEndereco(e);

                f.setSalario(rs.getDouble("salario"));
                f.setCargo(rs.getString("cargo"));
                f.setLogin(rs.getString("login"));
                f.setSenha(rs.getString("senha"));

            }
        } catch (Exception ex) {
            JOptionPane.showMessageDialog(null, "Erro ao listar funcionário: " + ex.getMessage());
        } finally {
            try {
                ConnectionFactory.closeConnection(con, pstm, rs);
            } catch (Exception ex) {
                JOptionPane.showMessageDialog(null, "Erro ao fechar conexão: " + ex.getMessage());
            }
        }

        return f;
    }