entre Desarrolladores

Recibe ayuda de expertos

Registrate y pregunta

Es gratis y fácil

Recibe respuestas

Respuestas, votos y comentarios

Vota y selecciona respuestas

Recibe puntos, vota y da la solución

Pregunta

1voto

Menu en java desde base de datos

alguien tiene una idea de como desplegar un menú desde una base de datos en java, estoy usando oracle tengo mi tabla con las opciones del menu y algunos con sus hijos, en mi web un diseño tipo acordeón para el menu y submenu ingresados en duro.

1 Respuesta

3votos

MitsuGami Puntos8010

JDBC

public class Menu {

    private String name;
    private MenuOption[] options;
}

public interface MenuOptionActionable {

    void accion();
}

public class MenuOption {
    private String name;

    public void accion(MenuOptionActionable actionable) {
        actionable.accion();
    }
}

public Menu getMenuByName(String name) {

    Menu menu;

    String sql = "SELECT id_menu, nombre FROM menu WHERE nombre = ?";

    try (Connection connection = ConnectionUtil.get();
         PreparedStatement pst = connection.prepareStatement(sql)) {

        pst.setString(name);
        ResultSet rs = pst.executeQuery();

        if(rs.next()) {
            menu = new Menu(rs.getString("nombre"));
            String sql2 = "SELECT nombre FROM menu_option WHERE id_menu = ?";

            List<MenuOption> options = new ArrayList<>();
            try(PreparedStatement pst2 = connection.prepareStatement(sql)) {

                // id del menú para obtener los submenús
                pst2.setInt(rs.getInt('id_menu'));
                ResultSet rs2 = pst.executeQuery();

                while(rs.next()) {
                    options.add(new MenuOption(rs2.getString("nombre")));
                }

            }
            menu.setOptions(options);
        }
    } catch(SQLException e) {
        logger.severe(e.getMessage());
    }

    return menu;
}

Por ejemplo, quieres obtiener el submenú 3 del menú "Usuario", que viene a ser "Registrar" y asignarle una acción:

List<Menu> menus = getMenuByName("Usuario");
MenuOption registerOption = menus.getOptions().get(3);

// le asignas una acción
registerOption.action(() -> {
    System.out.println("Registrar algo");
});

JPA

Con JPA es mucho más sencillo, solo basta anotar las clases y crear una unidad de persistencia (persistence.xml):

@Entity
@NamedQuery(name="FindById", query="SELECT c.id, c.name FROM Menu c WHERE c.name = :name");
public class Menu {

    @Id @GeneratedValue
    private ing id;
    private String name;
    @OneToMany
    private MenuOption[] options;
}

public interface MenuOptionActionable {

    void accion();
}

public class MenuOption {
    @Id @GeneratedValue
    private int id;
    private String name;

    public void accion(MenuOptionActionable actionable) {
        actionable.accion();
    }
}

EntityManagerFactory emf = Persistence.createEntityManagerFactory('TU_UNIDAD_PERSISTENCIA');
EntityManager em = emf.createEntityManager();

TypedQuery<Menu> menuUsuario = em.createNamedQuery("FindMenyById");
menuUsuario.setParameter("name", "Usuario");
Menu menu = menuUsuario.getSingleResult();

List<MenuOption> options = menu.getOptions();
MenuOption optionRegistrar = options.get(3);

optionRegistrat.action(() -> {
    System.out.println("Registrar algo");
});

Raverito comentado Oct 18, 2015

gracias, veo en JPA parece mas sencillo, me falta configurar ya que mi proyecto es una "web aplication" simple, tendria que ver mas sobre la arquitectura JPA.

MitsuGami comentado Oct 18, 2015

JPA es mucho más sencillo, en parte, al menos lo básico. Trabajas con clases siempre, lo cual supone una gran ventaja.

Por favor, accede o regístrate para responder a esta pregunta.

¿Conoces alguien que puede responder?
¡Comparte esta pregunta!


Otras Preguntas y Respuestas


Actividad Reciente

...

Bienvenido a entre Desarrolladores, donde puedes realizar preguntas y recibir respuestas de otros miembros de la comunidad.

Conecta