Dúvida no LOGIN Java

Estou com dúvida sobre o login, tenho os campos usuario e senha na view e os botoes entrar e cancelar, logo quando eu clicar no botão entrar eu quero verificar se o usuario e senha existem. Eu tenho também uma coluna na tabela Usuario de Perfil que é Administrador ou funcionário. O que eu quero fazer é quando fazer essa busca de procurar se o usuario e senha existem e se coincidem, quero também fazer para abrir um menu principal para o Adm, e outro menu para o funcionário.

Segue meu código:

Essa parte está na View

public String validaDados()
{
    String valida = "";

    if (txtUsuario.getText().equals(""))
    {
        valida = valida + "\nInforme um Usuário";
        txtUsuario.setBorder(BorderFactory.createLineBorder(Color.RED));
    } else
    {
        txtUsuario.setBorder(BorderFactory.createLineBorder(Color.GRAY));
    }

    if (txtSenha.getText().equals(""))
    {
        valida = valida + "\nInforme uma Senha";
        txtSenha.setBorder(BorderFactory.createLineBorder(Color.RED));
    } else
    {
        txtSenha.setBorder(BorderFactory.createLineBorder(Color.GRAY));
    }
    return valida;
}

private void btnEntrarActionPerformed(java.awt.event.ActionEvent evt)                                          
{                                              
    String Valida = validaDados();

    if (Valida.equals(""))
    {
        Usuario u = new Usuario();
        u.setUsuario(txtUsuario.getText());
        u.setSenha(txtSenha.getText());
        
        if (ctrusu.recuperaDadosUsuario(u))
        {
            if (u.getPerfil().equals("Administrador")) // Usuario Administrador
            {
                // depois validar senha
                if (!ctremp.buscaEmpresa())
                {
                    (new frmCadEmpresa(null, true, 0)).setVisible(true);
                } else
                {
                    JOptionPane.showMessageDialog(null, "\n Login realizado com Sucesso!!\n\nBEM - VINDO " + txtUsuario.getText().toUpperCase(),
                            "Bem vindo", JOptionPane.INFORMATION_MESSAGE, iconeSucesso);
                    new frmMenuPrincipal().setVisible(true);
                }
                dispose(); // minimiza a tela login usuario "administrador"
            } else // Usuario Funcionário
            {
                JOptionPane.showMessageDialog(null, "\n Login realizado com Sucesso!!\n\nBEM - VINDO " + txtUsuario.getText().toUpperCase(),
                        "Bem vindo", JOptionPane.INFORMATION_MESSAGE, iconeSucesso);
                new frmMenuPrincipalFuncionario().setVisible(true);
            }
            dispose(); // minimiza a tela login usuario "funcionario"

        } else
        {
            JOptionPane.showMessageDialog(null, "Erro ao entrar, usuário ou senha inválido!!",
                    "Erro ao cadastrar", JOptionPane.INFORMATION_MESSAGE, iconeErro);
        }

    } else
    {
        JOptionPane.showMessageDialog(null, "\nPor favor preencha os campos obrigatórios!!\n" + Valida,
                "Erro - campos obrigatórios", JOptionPane.INFORMATION_MESSAGE, iconeErro);
    }
}

Isso esta dentro da Controladora e a controladora chama a DAO, mas irei colocar apenas a DAO que é quem faz o processo

 public boolean recuperaDadosUsuario(Usuario usuario)
{
    Usuario u;

    String query = "select usu_cod, usu_nome, usu_login, usu_senha, usu_perfil, usu_status from usuario where usu_login='" + usuario.getUsuario() + "' AND usu_senha='" + usuario.getSenha() + "' AND usu_perfil='" + usuario.getPerfil() + "'";

    ResultSet rs = Banco.getCon().consultar(query);

    try
    {
        if (rs.next())
        {
//                u = new Usuario();
//                u.setCodigo(rs.getInt("usu_cod"));
//                u.setNome(rs.getString("usu_nome"));
//                u.setUsuario(rs.getString("usu_login"));
//                u.setSenha(rs.getString("usu_senha"));
//                u.setPerfil(rs.getString("usu_perfil"));
//                u.setStatus(rs.getString("usu_status"));
            return true;
        }
    } catch (Exception e)
    {
        return false;
    }

    return false;
}

Se alguém tiver alguma ideia por favor me ajude

Vamos lá. Está usando banco de dados? Se estiver, você precisa ter noção de três situações. O resultado da query pode vir em três casos:
Se o resultado for igual a UM, então o sistema encontrou um registro e o usuario poderá acessar a sua próxima tela. Se o resultado for igual a MAIS DE UM, então o registro (por algum motivo insano) está duplicado. Se o resultado for MENOR QUE UM, quer dizer que não há registro.

Como verifica?
Se estiver conectado ao banco, é algo do tipo

int auxiliar = 0; // cria a variavel verificadora
// faz a verificação e coloca no result o valor de cont
ResultSet result = seuStatement.executeQuery("select count(*) as cont from suaTabela where usuario='"+seuUsuario.getText()+"' and senha=md5('"+seuPasswordField.getText()+"');");

while(result.next) {
// coloca o valor do cont na variavel verificadora
     auxiliar = result.getInteger("cont");
}
// verifica as condições que eu disse inicialmente
if(auxiliar==1) {
System.out.println("Login efetuado com sucesso");
}

E daí é só fazer os outros if
Detalhe: eu coloquei a senha em md5, porque eu acredito que você esteja criptografando sua senha, certo? Então por isso tem a função do próprio MySQL para codificar a senha em MD5