DEV Community

joanvasquez21
joanvasquez21

Posted on

Java- Traer datos de una ddbb con spring

Extraer los datos de una BBDD en una pagina web.
Apuntes de repaso:
Creacion de un pequeño proyecto web en Java
BASE DE DATOS
Comenzamos creando una BBDD:

`create database proyecto;`
Enter fullscreen mode Exit fullscreen mode

Usamos la base de datos que hemos creado

`use  proyecto;`
Enter fullscreen mode Exit fullscreen mode

y insertamos la tabla en este caso se llamara clientes con los campos: id, nombre, apellido, email.

`CREATE TABLE `cliente` (
  `id` int(10) NOT NULL AUTO_INCREMENT,
  `nombre` varchar(35) DEFAULT NULL,
  `apellido` varchar(35) DEFAULT NULL,
  `email` varchar(45) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=latin1;`
Enter fullscreen mode Exit fullscreen mode

Clase conexión a la BBDD

protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        // TODO Auto-generated method stub
        // response.getWriter().append("Served at: ").append(request.getContextPath());

        String jdbcUrl = "jdbc:mysql://localhost:3306/proyecto?allowPublicKeyRetrieval=true&useSSL=false";
        String usuario = "";
        String contra = "";
        String driver = "com.mysql.jdbc.Driver";

        try {
            // Utilizamos la clase PrintWriter para que escriba en el navegador
            PrintWriter out = response.getWriter();
            // Cargamos el driver
            Class.forName(driver);
            // Tenemos que conectar
            Connection miConexion = DriverManager.getConnection(jdbcUrl, usuario, contra);
            // cerramos la conexion
            miConexion.close();

        } catch (Exception ex) {
            ex.printStackTrace();
        }

    }
Enter fullscreen mode Exit fullscreen mode

Ahora ya en Java pasaremos a crear las clases, comenzaremos creando el controlador

  • Clase: Controlador

@Controller
@RequestMapping("/cliente")
public class Controlador {

    @RequestMapping("/lista")
    public String listaClientes(Model modelo) {

        return "lista-clientes";
    }

}

Enter fullscreen mode Exit fullscreen mode

Ahora tenemos que representar la entidad (entity) Cliente

  • Clase entidad Cliente

  • @Entity - esto se trata de una entidad

  • @Table("cliente") - tabla que hara el mapeo

@Entity
@Table(name = "cliente")
public class Cliente {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name="id")
    private int id;

    @Column(name="nombre")
    private String nombre;

    @Column(name="apellido")
    private String apellido;

    @Column(name="email")
    private String email;

    public Cliente() {
        super();
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getNombre() {
        return nombre;
    }

    public void setNombre(String nombre) {
        this.nombre = nombre;
    }

    public String getApellido() {
        return apellido;
    }

    public void setApellido(String apellido) {
        this.apellido = apellido;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    @Override
    public String toString() {
        return "Cliente [id=" + id + ", nombre=" + nombre + ", apellido=" + apellido + ", email=" + email + "]";
    }




}
Enter fullscreen mode Exit fullscreen mode
             CONTROLADOR - DAO
Enter fullscreen mode Exit fullscreen mode

Image description
Creamos una clase interface ClienteDAO para acceder a la BBDD:
Al crear la interfaz nos permitirá a través de una anotación (Spring) hacer una inyección de dependencias

public interface ClienteDAO {
//Esta interfaz me devuelva una lista con todos los clientes
    public List<Cliente> getClientes();


}
Enter fullscreen mode Exit fullscreen mode

Creamos la clase que implementara la interface
Declaramos el SessionFactory ya configurado en nuestro fichero.
@Autowired nos hara una inyección de dependencias de tipo SessionFactory.
@Transactional Nos permite simplificar la transacción (begin,commit).
@Repository Para que sea registrado en Spring como un bean.

@Repository
public class ClienteDAOclase implements ClienteDAO {
    // Crear una lista que almacene objetos de tipos clientes en este caso
    // implementamos de la infertaz
    @Override
    @Transactional
    public List<Cliente> getClientes() {
        // 3 pasos:
        // Obtener la sesion
        Session miSession = sessionFactory.getCurrentSession();
        // Crear la consulta(query) para obtener informacion de la base de datos
        Query<Cliente> miQuery = miSession.createQuery("from Cliente", Cliente.class);
        // Ejecutar la query y devolver los resultados
        List<Cliente> clientes = miQuery.getResultList();

        return clientes;
    }

    @Autowired
    private SessionFactory sessionFactory;
Enter fullscreen mode Exit fullscreen mode

Volvemos a la clase Controlador a hacer la inyeccion de dependencias

@Controller
@RequestMapping("/cliente")
public class Controlador {
    // indicamos con autowired que haremos una inyeccion de dependencias
    @Autowired
    private ClienteDAO clienteDAO;

    @RequestMapping("/lista")
    public String listaClientes(Model elModelo) {

        // Obtener los clientes desde el DAO
        List<Cliente> losClientes = clienteDAO.getClientes();
        // Agregar los clientes que hemos obtenidos del clienteDAO al modelo
        elModelo.addAllAttributes(losClientes);

        return "lista-clientes";
    }

}
Enter fullscreen mode Exit fullscreen mode

Creamos el JSP para que nos devuelva los nombres, apellidos y email de la base de datos

<body>
    <table border="1">
    <tr>
    <th>nombre </th>
    <th>apellido</th>
    <th>email</th>

    </tr>  

        <c:forEach var="clienteTemp" items="${clientes}">


            <tr>
                <td>${clienteTemp.nombre}</td>
                <td>${clienteTemp.apellido}</td>
                <td>${clienteTemp.email}</td>
            </tr>

        </c:forEach>
    </table>

</body>

Enter fullscreen mode Exit fullscreen mode

Image description

Top comments (0)