JPA Consultas avanzadas...: Aula 2
This commit is contained in:
parent
d41f0f89bd
commit
fdb82ae7f9
@ -10,5 +10,4 @@ Java y [JDBC](./jdbc.md)
|
||||
- [Curso](https://app.aluracursos.com/course/persistencia-jpa-hibernate)
|
||||
Persistencia con [JPA - Hibernate](./jpa_persistencia_hibernate.md)
|
||||
- [Curso](https://app.aluracursos.com/course/java-jpa-consultas-avanzadas-rendimiento-modelos-complejos)
|
||||
[JPA](./jpa_2.avanzado.md)
|
||||
consultas avanzadas, rendimiento y modelos complejos
|
||||
JPA [consultas avanzadas, rendimiento y modelos complejos](./jpa_avanzado.md)
|
||||
|
Binary file not shown.
@ -35,4 +35,5 @@ public class CategoriaDao {
|
||||
String jpql = "SELECT P FROM Categoria AS P";
|
||||
return em.createQuery(jpql, Categoria.class).getResultList();
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -6,6 +6,7 @@ import java.util.List;
|
||||
import javax.persistence.EntityManager;
|
||||
|
||||
import com.latam.alura.tienda.modelo.Pedido;
|
||||
import com.latam.alura.tienda.vo.ReporteDeVenta;
|
||||
|
||||
public class PedidoDao {
|
||||
|
||||
@ -51,4 +52,36 @@ public class PedidoDao {
|
||||
String jpql = "SELECT P.precio FROM Pedido AS P WHERE P.nombre=:nombre";
|
||||
return em.createQuery(jpql, BigDecimal.class).setParameter("nombre", nombre).getSingleResult();
|
||||
}
|
||||
|
||||
public BigDecimal valorTotalVendido() {
|
||||
String jpql = "SELECT SUM(P.valorTotal) FROM Pedido P";
|
||||
return em.createQuery(jpql, BigDecimal.class).getSingleResult();
|
||||
}
|
||||
|
||||
public Double valorPromedioVendido() {
|
||||
String jpql = "SELECT AVG(P.valorTotal) FROM Pedido P";
|
||||
return em.createQuery(jpql, Double.class).getSingleResult();
|
||||
}
|
||||
|
||||
public List<Object[]> ReporteVentas() {
|
||||
String jpql = "SELECT producto.nombre, SUM(item.cantidad), MAX(pedido.fecha)"
|
||||
+ " FROM Pedido pedido"
|
||||
+ " JOIN pedido.items item"
|
||||
+ " JOIN item.producto producto"
|
||||
+ " GROUP BY producto.nombre"
|
||||
+ " ORDER BY item.cantidad DESC";
|
||||
return em.createQuery(jpql, Object[].class).getResultList();
|
||||
}
|
||||
|
||||
public List<ReporteDeVenta> ReporteVentasVO() {
|
||||
String jpql = "SELECT new com.latam.alura.tienda.vo.ReporteDeVenta("
|
||||
+ "producto.nombre, SUM(item.cantidad), MAX(pedido.fecha))"
|
||||
+ " FROM Pedido pedido"
|
||||
+ " JOIN pedido.items item"
|
||||
+ " JOIN item.producto producto"
|
||||
+ " GROUP BY producto.nombre"
|
||||
+ " ORDER BY item.cantidad DESC";
|
||||
return em.createQuery(jpql, ReporteDeVenta.class).getResultList();
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -48,7 +48,6 @@ public class ProductoDao {
|
||||
}
|
||||
|
||||
public BigDecimal consultaPrecioPorNombreDeProducto(String nombre) {
|
||||
String jpql = "SELECT P.precio FROM Producto AS P WHERE P.nombre=:nombre";
|
||||
return em.createQuery(jpql, BigDecimal.class).setParameter("nombre", nombre).getSingleResult();
|
||||
return em.createNamedQuery("Producto.consultaDePrecio", BigDecimal.class).setParameter("nombre", nombre).getSingleResult();
|
||||
}
|
||||
}
|
||||
|
@ -10,10 +10,12 @@ import javax.persistence.GeneratedValue;
|
||||
import javax.persistence.GenerationType;
|
||||
import javax.persistence.Id;
|
||||
import javax.persistence.ManyToOne;
|
||||
import javax.persistence.NamedQuery;
|
||||
import javax.persistence.Table;
|
||||
|
||||
@Entity
|
||||
@Table(name="productos")
|
||||
@NamedQuery(name="Producto.consultaDePrecio", query="SELECT P.precio FROM Producto AS P WHERE P.nombre=:nombre")
|
||||
public class Producto {
|
||||
|
||||
@Id
|
||||
|
@ -1,6 +1,7 @@
|
||||
package com.latam.alura.tienda.prueba;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.List;
|
||||
|
||||
import javax.persistence.EntityManager;
|
||||
//import javax.persistence.EntityManagerFactory;
|
||||
@ -16,6 +17,7 @@ import com.latam.alura.tienda.modelo.ItemsPedido;
|
||||
import com.latam.alura.tienda.modelo.Pedido;
|
||||
import com.latam.alura.tienda.modelo.Producto;
|
||||
import com.latam.alura.tienda.utils.JPAUtils;
|
||||
import com.latam.alura.tienda.vo.ReporteDeVenta;
|
||||
|
||||
public class RegistroDePedido {
|
||||
|
||||
@ -39,6 +41,19 @@ public class RegistroDePedido {
|
||||
|
||||
pedidoDao.guardar(pedido);
|
||||
em.getTransaction().commit();
|
||||
BigDecimal valorTotal = pedidoDao.valorTotalVendido();
|
||||
System.out.println("Valor total del pedido: "+valorTotal);
|
||||
Double valorPromedio = pedidoDao.valorPromedioVendido();
|
||||
System.out.println("Valor promedio del pedido: "+valorPromedio);
|
||||
List<Object[]> reporte = pedidoDao.ReporteVentas();
|
||||
for (Object[] objects : reporte) {
|
||||
System.out.print(objects[0] +", ");
|
||||
System.out.print(objects[1] +", ");
|
||||
System.out.println(objects[2]);
|
||||
}
|
||||
|
||||
List<ReporteDeVenta> reporteVo = pedidoDao.ReporteVentasVO();
|
||||
reporteVo.forEach(System.out::println);
|
||||
}
|
||||
|
||||
public static void RegistrarPedido() {
|
||||
|
@ -0,0 +1,49 @@
|
||||
package com.latam.alura.tienda.vo;
|
||||
|
||||
import java.time.LocalDate;
|
||||
|
||||
public class ReporteDeVenta {
|
||||
private String nombreDelProducto;
|
||||
private Long cantidadDeProducto;
|
||||
private LocalDate fechaDeUltimaVenta;
|
||||
|
||||
public ReporteDeVenta(String nombreDelProducto, Long cantidadDeProducto, LocalDate fechaDeUltimaVenta) {
|
||||
this.nombreDelProducto = nombreDelProducto;
|
||||
this.cantidadDeProducto = cantidadDeProducto;
|
||||
this.fechaDeUltimaVenta = fechaDeUltimaVenta;
|
||||
}
|
||||
|
||||
public String getNombreDelProducto() {
|
||||
return nombreDelProducto;
|
||||
}
|
||||
|
||||
public void setNombreDelProducto(String nombreDelProducto) {
|
||||
this.nombreDelProducto = nombreDelProducto;
|
||||
}
|
||||
|
||||
public Long getCantidadDeProducto() {
|
||||
return cantidadDeProducto;
|
||||
}
|
||||
|
||||
public void setCantidadDeProducto(Long cantidadDeProducto) {
|
||||
this.cantidadDeProducto = cantidadDeProducto;
|
||||
}
|
||||
|
||||
public LocalDate getFechaDeUltimaVenta() {
|
||||
return fechaDeUltimaVenta;
|
||||
}
|
||||
|
||||
public void setFechaDeUltimaVenta(LocalDate fechaDeUltimaVenta) {
|
||||
this.fechaDeUltimaVenta = fechaDeUltimaVenta;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "ReporteDeVenta [" + (nombreDelProducto != null ? "nombreDelProducto=" + nombreDelProducto + ", " : "")
|
||||
+ (cantidadDeProducto != null ? "cantidadDeProducto=" + cantidadDeProducto + ", " : "")
|
||||
+ (fechaDeUltimaVenta != null ? "fechaDeUltimaVenta=" + fechaDeUltimaVenta : "") + "]";
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
@ -2,7 +2,8 @@
|
||||
|
||||
<style>div.mermaid{text-align: center;}</style>
|
||||
|
||||
Retomando el proyecto [anterior](./jpa/tienda/src/main/java/com/latam/alura/tienda/)
|
||||
Trabajando sobre el [proyecto](./jpa/tienda/src/main/java/com/latam/alura/tienda/)
|
||||
anterior
|
||||
|
||||
```mermaid
|
||||
erDiagram
|
||||
@ -18,7 +19,7 @@ erDiagram
|
||||
id biging PK
|
||||
nombre string
|
||||
}
|
||||
Clientes ||--o{ Pedidos : tiene
|
||||
Clientes ||--|{ Pedidos : tiene
|
||||
Clientes {
|
||||
id bigint PK
|
||||
nombre string
|
||||
@ -81,7 +82,39 @@ creada anteriormente
|
||||
|
||||
- Mapeo de nuevas entidades en la aplicación según el modelado de la base de
|
||||
datos
|
||||
- Mapeo de una relación con cardinalidad de muchos a muchos
|
||||
- Mapeo de una relación bidireccional
|
||||
- Persitencia entidades que tienen relaciones bidireccionales
|
||||
- Mapeo de relación con cardinalidad de muchos a muchos
|
||||
- Mapeo de relación bidireccional
|
||||
- Persistencia entidades que tienen relaciones bidireccionales
|
||||
|
||||
|
||||
### Funciones de agregación SQL
|
||||
|
||||
| Función | Descripción |
|
||||
| - | - |
|
||||
| **AVG** | Calcula el promedio de los valores de un campo |
|
||||
| **COUNT** | Devuelve en número de registros de la selección |
|
||||
| **SUM** | Devuelve la suma de todos los valores de un campo |
|
||||
| **MAX** | Devuelve el valor más alto de un campo |
|
||||
| **MIN** | Devuelve el valor más bajo de un campo |
|
||||
|
||||
#### Reporte de ventas
|
||||
|
||||
| PRODUCTO | CANT. VENDIDA | ULTIMA VENTA |
|
||||
| - | :-: | - |
|
||||
| Celular Motorola X9 | 240 | 01/02/23 |
|
||||
| Xbox Series S | 198 | 10/02/23 |
|
||||
| Framework Laptop | 71 | 20/02/2023 |
|
||||
|
||||
<br>
|
||||
|
||||
**NamedQuerys**: Estas se declaran en la clase de entidad.
|
||||
|
||||
#### Sumario Aula 2
|
||||
|
||||
- Realización de consultas utilizando funciones de agregación (**min, max, avg
|
||||
y sum**)
|
||||
- Consultas de reporte/informes usando JPQL
|
||||
- Uso del nuevo recurso seleccionado en consultas JPQL
|
||||
- Consultas mediante **NamedQuerys**
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user