Java- Traer datos de una ddbb con spring
Tags: java, spanish
Published: 2022-07-23 22:04:00

**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;`
```
Usamos la base de datos que hemos creado

```
`use  proyecto;`
```
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;`
```

**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();
		}

	}
```
 
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";
	}

}

```

 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 + "]";
	}
	
	
	
	
}
```

                 CONTROLADOR - DAO
 ![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/vyhebboitgl6whsnamqg.png)
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();
	
	
}
```
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;
```
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";
	}

}
```
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>

```

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/7z7yio13ftvas06vvcux.png)