JPA Consultas avanzadas...: Aula 1
This commit is contained in:
parent
b968bcdb07
commit
d41f0f89bd
1
.gitignore
vendored
1
.gitignore
vendored
@ -14,3 +14,4 @@ bin/
|
|||||||
*.uxf
|
*.uxf
|
||||||
*.umlcd
|
*.umlcd
|
||||||
target/
|
target/
|
||||||
|
*.trace.db
|
||||||
|
@ -9,3 +9,6 @@ Java y [bases de datos](./base_de_datos.md)
|
|||||||
Java y [JDBC](./jdbc.md)
|
Java y [JDBC](./jdbc.md)
|
||||||
- [Curso](https://app.aluracursos.com/course/persistencia-jpa-hibernate)
|
- [Curso](https://app.aluracursos.com/course/persistencia-jpa-hibernate)
|
||||||
Persistencia con [JPA - Hibernate](./jpa_persistencia_hibernate.md)
|
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
|
||||||
|
BIN
010_spring_boot/jpa/tienda2/database/tienda.mv.db
Normal file
BIN
010_spring_boot/jpa/tienda2/database/tienda.mv.db
Normal file
Binary file not shown.
45
010_spring_boot/jpa/tienda2/pom.xml
Normal file
45
010_spring_boot/jpa/tienda2/pom.xml
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
<project xmlns="http://maven.apache.org/POM/4.0.0"
|
||||||
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
|
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||||
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
<groupId>com.latam.alura.tienda</groupId>
|
||||||
|
<artifactId>tienda</artifactId>
|
||||||
|
<version>0.0.1-SNAPSHOT</version>
|
||||||
|
<build>
|
||||||
|
<plugins>
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
|
<artifactId>maven-compiler-plugin</artifactId>
|
||||||
|
<version>3.11.0</version>
|
||||||
|
<configuration>
|
||||||
|
<source>${java.version}</source>
|
||||||
|
<target>${java.version}</target>
|
||||||
|
<optimize>true</optimize>
|
||||||
|
<encoding>UTF-8</encoding>
|
||||||
|
<release>${java.version}</release>
|
||||||
|
<fork>true</fork>
|
||||||
|
<executable>/usr/bin/java</executable>
|
||||||
|
</configuration>
|
||||||
|
</plugin>
|
||||||
|
</plugins>
|
||||||
|
</build>
|
||||||
|
<dependencies>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.hibernate</groupId>
|
||||||
|
<artifactId>hibernate-entitymanager</artifactId>
|
||||||
|
<version>5.6.15.Final</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.h2database</groupId>
|
||||||
|
<artifactId>h2</artifactId>
|
||||||
|
<version>2.2.222</version>
|
||||||
|
<scope>runtime</scope>
|
||||||
|
</dependency>
|
||||||
|
</dependencies>
|
||||||
|
<properties>
|
||||||
|
<java.version>17</java.version>
|
||||||
|
<maven.compiler.source>${java.version}</maven.compiler.source>
|
||||||
|
<maven.compiler.target>${java.version}</maven.compiler.target>
|
||||||
|
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||||
|
</properties>
|
||||||
|
</project>
|
@ -0,0 +1,38 @@
|
|||||||
|
package com.latam.alura.tienda.dao;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import javax.persistence.EntityManager;
|
||||||
|
|
||||||
|
import com.latam.alura.tienda.modelo.Categoria;
|
||||||
|
|
||||||
|
public class CategoriaDao {
|
||||||
|
|
||||||
|
private EntityManager em;
|
||||||
|
|
||||||
|
public CategoriaDao(EntityManager em) {
|
||||||
|
this.em = em;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void guardar(Categoria categoria) {
|
||||||
|
this.em.persist(categoria);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void actualizar(Categoria categoria) {
|
||||||
|
this.em.merge(categoria);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void remover(Categoria categoria) {
|
||||||
|
categoria = this.em.merge(categoria);
|
||||||
|
this.em.remove(categoria);
|
||||||
|
}
|
||||||
|
|
||||||
|
public Categoria consultaPorId(Long id) {
|
||||||
|
return em.find(Categoria.class, id);
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<Categoria> consultarTodos() {
|
||||||
|
String jpql = "SELECT P FROM Categoria AS P";
|
||||||
|
return em.createQuery(jpql, Categoria.class).getResultList();
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,54 @@
|
|||||||
|
package com.latam.alura.tienda.dao;
|
||||||
|
|
||||||
|
import java.math.BigDecimal;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import javax.persistence.EntityManager;
|
||||||
|
|
||||||
|
import com.latam.alura.tienda.modelo.Cliente;
|
||||||
|
|
||||||
|
public class ClienteDao {
|
||||||
|
|
||||||
|
private EntityManager em;
|
||||||
|
|
||||||
|
public ClienteDao(EntityManager em) {
|
||||||
|
this.em = em;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void guardar(Cliente cliente) {
|
||||||
|
this.em.persist(cliente);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void actualizar(Cliente cliente) {
|
||||||
|
this.em.merge(cliente);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void remover(Cliente cliente) {
|
||||||
|
cliente = this.em.merge(cliente);
|
||||||
|
this.em.remove(cliente);
|
||||||
|
}
|
||||||
|
|
||||||
|
public Cliente consultaPorId(Long id) {
|
||||||
|
return em.find(Cliente.class, id);
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<Cliente> consultarTodos() {
|
||||||
|
String jpql = "SELECT P FROM Cliente AS P";
|
||||||
|
return em.createQuery(jpql, Cliente.class).getResultList();
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<Cliente> consultaPorNombre(String nombre) {
|
||||||
|
String jpql = "SELECT P FROM Cliente AS P WHERE P.nombre=:nombre";
|
||||||
|
return em.createQuery(jpql, Cliente.class).setParameter("nombre", nombre).getResultList();
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<Cliente> consultaPorNombreDeCategoria(String nombre) {
|
||||||
|
String jpql = "SELECT P FROM Cliente AS P WHERE P.categoria.nombre=:nombre";
|
||||||
|
return em.createQuery(jpql, Cliente.class).setParameter("nombre", nombre).getResultList();
|
||||||
|
}
|
||||||
|
|
||||||
|
public BigDecimal consultaPrecioPorNombreDeCliente(String nombre) {
|
||||||
|
String jpql = "SELECT P.precio FROM Cliente AS P WHERE P.nombre=:nombre";
|
||||||
|
return em.createQuery(jpql, BigDecimal.class).setParameter("nombre", nombre).getSingleResult();
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,54 @@
|
|||||||
|
package com.latam.alura.tienda.dao;
|
||||||
|
|
||||||
|
import java.math.BigDecimal;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import javax.persistence.EntityManager;
|
||||||
|
|
||||||
|
import com.latam.alura.tienda.modelo.Pedido;
|
||||||
|
|
||||||
|
public class PedidoDao {
|
||||||
|
|
||||||
|
private EntityManager em;
|
||||||
|
|
||||||
|
public PedidoDao(EntityManager em) {
|
||||||
|
this.em = em;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void guardar(Pedido pedido) {
|
||||||
|
this.em.persist(pedido);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void actualizar(Pedido pedido) {
|
||||||
|
this.em.merge(pedido);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void remover(Pedido pedido) {
|
||||||
|
pedido = this.em.merge(pedido);
|
||||||
|
this.em.remove(pedido);
|
||||||
|
}
|
||||||
|
|
||||||
|
public Pedido consultaPorId(Long id) {
|
||||||
|
return em.find(Pedido.class, id);
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<Pedido> consultarTodos() {
|
||||||
|
String jpql = "SELECT P FROM Pedido AS P";
|
||||||
|
return em.createQuery(jpql, Pedido.class).getResultList();
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<Pedido> consultaPorNombre(String nombre) {
|
||||||
|
String jpql = "SELECT P FROM Pedido AS P WHERE P.nombre=:nombre";
|
||||||
|
return em.createQuery(jpql, Pedido.class).setParameter("nombre", nombre).getResultList();
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<Pedido> consultaPorNombreDeCategoria(String nombre) {
|
||||||
|
String jpql = "SELECT P FROM Pedido AS P WHERE P.categoria.nombre=:nombre";
|
||||||
|
return em.createQuery(jpql, Pedido.class).setParameter("nombre", nombre).getResultList();
|
||||||
|
}
|
||||||
|
|
||||||
|
public BigDecimal consultaPrecioPorNombreDePedido(String nombre) {
|
||||||
|
String jpql = "SELECT P.precio FROM Pedido AS P WHERE P.nombre=:nombre";
|
||||||
|
return em.createQuery(jpql, BigDecimal.class).setParameter("nombre", nombre).getSingleResult();
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,54 @@
|
|||||||
|
package com.latam.alura.tienda.dao;
|
||||||
|
|
||||||
|
import java.math.BigDecimal;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import javax.persistence.EntityManager;
|
||||||
|
|
||||||
|
import com.latam.alura.tienda.modelo.Producto;
|
||||||
|
|
||||||
|
public class ProductoDao {
|
||||||
|
|
||||||
|
private EntityManager em;
|
||||||
|
|
||||||
|
public ProductoDao(EntityManager em) {
|
||||||
|
this.em = em;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void guardar(Producto producto) {
|
||||||
|
this.em.persist(producto);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void actualizar(Producto producto) {
|
||||||
|
this.em.merge(producto);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void remover(Producto producto) {
|
||||||
|
producto = this.em.merge(producto);
|
||||||
|
this.em.remove(producto);
|
||||||
|
}
|
||||||
|
|
||||||
|
public Producto consultaPorId(Long id) {
|
||||||
|
return em.find(Producto.class, id);
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<Producto> consultarTodos() {
|
||||||
|
String jpql = "SELECT P FROM Producto AS P";
|
||||||
|
return em.createQuery(jpql, Producto.class).getResultList();
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<Producto> consultaPorNombre(String nombre) {
|
||||||
|
String jpql = "SELECT P FROM Producto AS P WHERE P.nombre=:nombre";
|
||||||
|
return em.createQuery(jpql, Producto.class).setParameter("nombre", nombre).getResultList();
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<Producto> consultaPorNombreDeCategoria(String nombre) {
|
||||||
|
String jpql = "SELECT P FROM Producto AS P WHERE P.categoria.nombre=:nombre";
|
||||||
|
return em.createQuery(jpql, Producto.class).setParameter("nombre", nombre).getResultList();
|
||||||
|
}
|
||||||
|
|
||||||
|
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();
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,46 @@
|
|||||||
|
package com.latam.alura.tienda.modelo;
|
||||||
|
|
||||||
|
import javax.persistence.Entity;
|
||||||
|
import javax.persistence.GeneratedValue;
|
||||||
|
import javax.persistence.GenerationType;
|
||||||
|
import javax.persistence.Id;
|
||||||
|
import javax.persistence.Table;
|
||||||
|
|
||||||
|
//public enum Categoria {
|
||||||
|
// SOFTWARES,
|
||||||
|
// LIBROS,
|
||||||
|
// CELULARES
|
||||||
|
//}
|
||||||
|
|
||||||
|
@Entity
|
||||||
|
@Table(name="categorias")
|
||||||
|
public class Categoria {
|
||||||
|
|
||||||
|
@Id
|
||||||
|
@GeneratedValue(strategy = GenerationType.IDENTITY)
|
||||||
|
private Long id;
|
||||||
|
private String nombre;
|
||||||
|
|
||||||
|
public Categoria() {}
|
||||||
|
|
||||||
|
public Categoria(String nombre) {
|
||||||
|
this.nombre = nombre;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Long getId() {
|
||||||
|
return id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setId(Long id) {
|
||||||
|
this.id = id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getNombre() {
|
||||||
|
return nombre;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setNombre(String nombre) {
|
||||||
|
this.nombre = nombre;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,51 @@
|
|||||||
|
package com.latam.alura.tienda.modelo;
|
||||||
|
|
||||||
|
import javax.persistence.Entity;
|
||||||
|
import javax.persistence.GeneratedValue;
|
||||||
|
import javax.persistence.GenerationType;
|
||||||
|
import javax.persistence.Id;
|
||||||
|
import javax.persistence.Table;
|
||||||
|
|
||||||
|
|
||||||
|
@Entity
|
||||||
|
@Table(name="clientes")
|
||||||
|
public class Cliente {
|
||||||
|
|
||||||
|
@Id
|
||||||
|
@GeneratedValue(strategy = GenerationType.IDENTITY)
|
||||||
|
private Long id;
|
||||||
|
private String nombre;
|
||||||
|
private String dni;
|
||||||
|
|
||||||
|
public Cliente() {}
|
||||||
|
|
||||||
|
public Cliente(String nombre, String dni) {
|
||||||
|
this.nombre = nombre;
|
||||||
|
this.dni = dni;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Cliente(String nombre) {
|
||||||
|
this.nombre = nombre;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Long getId() {
|
||||||
|
return id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getNombre() {
|
||||||
|
return nombre;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setNombre(String nombre) {
|
||||||
|
this.nombre = nombre;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getDni() {
|
||||||
|
return dni;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setDni(String dni) {
|
||||||
|
this.dni = dni;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,74 @@
|
|||||||
|
package com.latam.alura.tienda.modelo;
|
||||||
|
|
||||||
|
import java.math.BigDecimal;
|
||||||
|
|
||||||
|
import javax.persistence.Entity;
|
||||||
|
import javax.persistence.GeneratedValue;
|
||||||
|
import javax.persistence.GenerationType;
|
||||||
|
import javax.persistence.Id;
|
||||||
|
import javax.persistence.ManyToOne;
|
||||||
|
import javax.persistence.Table;
|
||||||
|
|
||||||
|
@Entity
|
||||||
|
@Table(name="items_pedido")
|
||||||
|
public class ItemsPedido {
|
||||||
|
@Id
|
||||||
|
@GeneratedValue(strategy=GenerationType.IDENTITY)
|
||||||
|
private Long id;
|
||||||
|
private Integer cantidad;
|
||||||
|
private BigDecimal precio_unitario;
|
||||||
|
@ManyToOne
|
||||||
|
private Producto producto;
|
||||||
|
@ManyToOne
|
||||||
|
private Pedido pedido;
|
||||||
|
|
||||||
|
public ItemsPedido() {}
|
||||||
|
|
||||||
|
public ItemsPedido(Integer cantidad, Producto producto, Pedido pedido) {
|
||||||
|
this.producto = producto;
|
||||||
|
this.cantidad = cantidad;
|
||||||
|
this.pedido = pedido;
|
||||||
|
this.precio_unitario = producto.getPrecio();
|
||||||
|
}
|
||||||
|
|
||||||
|
public Integer getCantidad() {
|
||||||
|
return cantidad;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setCantidad(Integer cantidad) {
|
||||||
|
this.cantidad = cantidad;
|
||||||
|
}
|
||||||
|
|
||||||
|
public BigDecimal getPrecio_unitario() {
|
||||||
|
return precio_unitario;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setPrecio_unitario(BigDecimal precio_unitario) {
|
||||||
|
this.precio_unitario = precio_unitario;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Producto getProducto() {
|
||||||
|
return producto;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setProducto(Producto producto) {
|
||||||
|
this.producto = producto;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Pedido getPedido() {
|
||||||
|
return pedido;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setPedido(Pedido pedido) {
|
||||||
|
this.pedido = pedido;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Long getId() {
|
||||||
|
return id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public BigDecimal getValor() {
|
||||||
|
return this.precio_unitario.multiply(new BigDecimal(this.cantidad));
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,76 @@
|
|||||||
|
package com.latam.alura.tienda.modelo;
|
||||||
|
|
||||||
|
import java.math.BigDecimal;
|
||||||
|
import java.time.LocalDate;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import javax.persistence.CascadeType;
|
||||||
|
import javax.persistence.Entity;
|
||||||
|
import javax.persistence.GeneratedValue;
|
||||||
|
import javax.persistence.GenerationType;
|
||||||
|
import javax.persistence.Id;
|
||||||
|
//import javax.persistence.JoinTable;
|
||||||
|
//import javax.persistence.ManyToMany;
|
||||||
|
import javax.persistence.ManyToOne;
|
||||||
|
import javax.persistence.OneToMany;
|
||||||
|
import javax.persistence.Table;
|
||||||
|
|
||||||
|
|
||||||
|
@Entity
|
||||||
|
@Table(name="pedidos")
|
||||||
|
public class Pedido {
|
||||||
|
|
||||||
|
@Id
|
||||||
|
@GeneratedValue(strategy = GenerationType.IDENTITY)
|
||||||
|
private Long id;
|
||||||
|
private LocalDate fecha = LocalDate.now();
|
||||||
|
private BigDecimal valorTotal = new BigDecimal(0);
|
||||||
|
@ManyToOne
|
||||||
|
private Cliente cliente;
|
||||||
|
//@ManyToMany
|
||||||
|
//@JoinTable(name="item_pedido")
|
||||||
|
@OneToMany(mappedBy = "pedido", cascade = CascadeType.ALL)
|
||||||
|
private List<ItemsPedido> items = new ArrayList<>();
|
||||||
|
|
||||||
|
public Pedido() {}
|
||||||
|
|
||||||
|
public Pedido(Cliente cliente) {
|
||||||
|
this.cliente = cliente;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void agregarItems(ItemsPedido item) {
|
||||||
|
item.setPedido(this);
|
||||||
|
this.items.add(item);
|
||||||
|
this.valorTotal = this.valorTotal.add(item.getValor());
|
||||||
|
}
|
||||||
|
|
||||||
|
public Long getId() {
|
||||||
|
return id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public LocalDate getFecha() {
|
||||||
|
return fecha;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setFecha(LocalDate fecha) {
|
||||||
|
this.fecha = fecha;
|
||||||
|
}
|
||||||
|
|
||||||
|
public BigDecimal getValorTotal() {
|
||||||
|
return valorTotal;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setValorTotal(BigDecimal valorTotal) {
|
||||||
|
this.valorTotal = valorTotal;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Cliente getCliente() {
|
||||||
|
return cliente;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setCliente(Cliente cliente) {
|
||||||
|
this.cliente = cliente;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,75 @@
|
|||||||
|
package com.latam.alura.tienda.modelo;
|
||||||
|
|
||||||
|
import java.math.BigDecimal;
|
||||||
|
import java.time.LocalDate;
|
||||||
|
|
||||||
|
import javax.persistence.Entity;
|
||||||
|
//import javax.persistence.EnumType;
|
||||||
|
//import javax.persistence.Enumerated;
|
||||||
|
import javax.persistence.GeneratedValue;
|
||||||
|
import javax.persistence.GenerationType;
|
||||||
|
import javax.persistence.Id;
|
||||||
|
import javax.persistence.ManyToOne;
|
||||||
|
import javax.persistence.Table;
|
||||||
|
|
||||||
|
@Entity
|
||||||
|
@Table(name="productos")
|
||||||
|
public class Producto {
|
||||||
|
|
||||||
|
@Id
|
||||||
|
@GeneratedValue(strategy=GenerationType.IDENTITY)
|
||||||
|
private Long id;
|
||||||
|
// @Column(name="nombres")
|
||||||
|
private String nombre;
|
||||||
|
private String descripcion;
|
||||||
|
private BigDecimal precio;
|
||||||
|
private LocalDate fechaDeRegistro = LocalDate.now();
|
||||||
|
//@Enumerated(EnumType.STRING)
|
||||||
|
@ManyToOne
|
||||||
|
private Categoria categoria;
|
||||||
|
|
||||||
|
public Producto() {}
|
||||||
|
|
||||||
|
public Producto(String nombre, String descripcion, BigDecimal precio, Categoria categoria) {
|
||||||
|
this.nombre = nombre;
|
||||||
|
this.descripcion = descripcion;
|
||||||
|
this.precio = precio;
|
||||||
|
this.categoria = categoria;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Long getId() {
|
||||||
|
return id;
|
||||||
|
}
|
||||||
|
public void setId(Long id) {
|
||||||
|
this.id = id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getNombre() {
|
||||||
|
return nombre;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setNombre(String nombre) {
|
||||||
|
this.nombre = nombre;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getDescripcion() {
|
||||||
|
return descripcion;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setDescripcion(String descripcion) {
|
||||||
|
this.descripcion = descripcion;
|
||||||
|
}
|
||||||
|
|
||||||
|
public BigDecimal getPrecio() {
|
||||||
|
return precio;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setPrecio(BigDecimal precio) {
|
||||||
|
this.precio = precio;
|
||||||
|
}
|
||||||
|
|
||||||
|
public LocalDate getFechaDeRegistro() {
|
||||||
|
return fechaDeRegistro;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,58 @@
|
|||||||
|
package com.latam.alura.tienda.prueba;
|
||||||
|
|
||||||
|
import java.math.BigDecimal;
|
||||||
|
|
||||||
|
import javax.persistence.EntityManager;
|
||||||
|
//import javax.persistence.EntityManagerFactory;
|
||||||
|
//import javax.persistence.Persistence;
|
||||||
|
|
||||||
|
import com.latam.alura.tienda.dao.CategoriaDao;
|
||||||
|
import com.latam.alura.tienda.dao.ClienteDao;
|
||||||
|
import com.latam.alura.tienda.dao.PedidoDao;
|
||||||
|
import com.latam.alura.tienda.dao.ProductoDao;
|
||||||
|
import com.latam.alura.tienda.modelo.Categoria;
|
||||||
|
import com.latam.alura.tienda.modelo.Cliente;
|
||||||
|
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;
|
||||||
|
|
||||||
|
public class RegistroDePedido {
|
||||||
|
|
||||||
|
public static void main(String[] args) {
|
||||||
|
RegistrarPedido();
|
||||||
|
|
||||||
|
EntityManager em = JPAUtils.getEntityManager();
|
||||||
|
|
||||||
|
ProductoDao productoDao = new ProductoDao(em);
|
||||||
|
Producto producto = productoDao.consultaPorId(1L);
|
||||||
|
|
||||||
|
ClienteDao clienteDao = new ClienteDao(em);
|
||||||
|
Cliente cliente = new Cliente("Juan","mnwenic");
|
||||||
|
|
||||||
|
PedidoDao pedidoDao = new PedidoDao(em);
|
||||||
|
Pedido pedido = new Pedido(cliente);
|
||||||
|
pedido.agregarItems(new ItemsPedido(5,producto, pedido));
|
||||||
|
|
||||||
|
em.getTransaction().begin();
|
||||||
|
clienteDao.guardar(cliente);
|
||||||
|
|
||||||
|
pedidoDao.guardar(pedido);
|
||||||
|
em.getTransaction().commit();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void RegistrarPedido() {
|
||||||
|
Categoria celulares = new Categoria("Celulares");
|
||||||
|
Producto celular = new Producto("Samsung", "Teléfono usado", new BigDecimal("1000"), celulares);
|
||||||
|
EntityManager em = JPAUtils.getEntityManager();
|
||||||
|
ProductoDao productoDao = new ProductoDao(em);
|
||||||
|
CategoriaDao categoriaDao = new CategoriaDao(em);
|
||||||
|
|
||||||
|
em.getTransaction().begin();
|
||||||
|
categoriaDao.guardar(celulares);
|
||||||
|
productoDao.guardar(celular);
|
||||||
|
em.getTransaction().commit();
|
||||||
|
em.close();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,121 @@
|
|||||||
|
package com.latam.alura.tienda.prueba;
|
||||||
|
|
||||||
|
import java.math.BigDecimal;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import javax.persistence.EntityManager;
|
||||||
|
//import javax.persistence.EntityManagerFactory;
|
||||||
|
//import javax.persistence.Persistence;
|
||||||
|
|
||||||
|
import com.latam.alura.tienda.dao.CategoriaDao;
|
||||||
|
import com.latam.alura.tienda.dao.ProductoDao;
|
||||||
|
import com.latam.alura.tienda.modelo.Categoria;
|
||||||
|
import com.latam.alura.tienda.modelo.Producto;
|
||||||
|
import com.latam.alura.tienda.utils.JPAUtils;
|
||||||
|
|
||||||
|
public class RegistroDeProducto {
|
||||||
|
|
||||||
|
public static void main(String[] args) {
|
||||||
|
RegistrarProducto();
|
||||||
|
EntityManager em = JPAUtils.getEntityManager();
|
||||||
|
ProductoDao productoDao = new ProductoDao(em);
|
||||||
|
Producto producto = productoDao.consultaPorId(1L);
|
||||||
|
System.out.println(producto.getNombre());
|
||||||
|
|
||||||
|
List<Producto> productos = productoDao.consultarTodos();
|
||||||
|
productos.forEach(producto_ -> System.out.println(producto_.getDescripcion()));
|
||||||
|
|
||||||
|
CategoriaDao categoriaDao = new CategoriaDao(em);
|
||||||
|
List<Categoria> categorias = categoriaDao.consultarTodos();
|
||||||
|
categorias.forEach(categoria_ -> System.out.println(categoria_.getNombre()));
|
||||||
|
|
||||||
|
List<Producto> productos_por_nombre = productoDao.consultaPorNombre("Samsung");
|
||||||
|
productos_por_nombre.forEach(producto_ -> System.out.println(producto_.getDescripcion()));
|
||||||
|
|
||||||
|
List<Producto> productos_por_nombre_categoria = productoDao.consultaPorNombreDeCategoria("Celulares");
|
||||||
|
productos_por_nombre_categoria.forEach(producto_ -> System.out.println(producto_.getDescripcion()));
|
||||||
|
|
||||||
|
BigDecimal precio_producto = productoDao.consultaPrecioPorNombreDeProducto("Samsung");
|
||||||
|
System.out.println(precio_producto);
|
||||||
|
/*
|
||||||
|
Categoria celulares = new Categoria("Celulares");
|
||||||
|
//Producto celular = new Producto("Samsung", "Teléfono usado", new BigDecimal("1000"), Categoria.CELULARES);
|
||||||
|
Producto celular = new Producto("Samsung", "Teléfono usado", new BigDecimal("1000"), celulares);
|
||||||
|
//celular.setNombre("Samsung");
|
||||||
|
//celular.setDescripcion("Teléfono usado");
|
||||||
|
//celular.setPrecio(new BigDecimal("1000"));
|
||||||
|
|
||||||
|
//EntityManagerFactory factory = Persistence.createEntityManagerFactory("tienda");
|
||||||
|
//EntityManager em = factory.createEntityManager();
|
||||||
|
EntityManager em = JPAUtils.getEntityManager();
|
||||||
|
|
||||||
|
ProductoDao productoDao = new ProductoDao(em);
|
||||||
|
CategoriaDao categoriaDao = new CategoriaDao(em);
|
||||||
|
|
||||||
|
em.getTransaction().begin();
|
||||||
|
categoriaDao.guardar(celulares);
|
||||||
|
productoDao.guardar(celular);
|
||||||
|
//em.persist(celular);
|
||||||
|
//em.getTransaction().commit();
|
||||||
|
em.flush();
|
||||||
|
em.clear();
|
||||||
|
//em.close();
|
||||||
|
*/
|
||||||
|
|
||||||
|
// Acciones por aula
|
||||||
|
//em.getTransaction().begin();
|
||||||
|
|
||||||
|
//V1
|
||||||
|
/*
|
||||||
|
em.getTransaction().begin();
|
||||||
|
em.persist(celulares);
|
||||||
|
celulares.setNombre("LAPTOPS");
|
||||||
|
em.getTransaction().commit();
|
||||||
|
em.close();
|
||||||
|
celulares.setNombre("PANTALLAS");
|
||||||
|
*/
|
||||||
|
|
||||||
|
//V2
|
||||||
|
/*
|
||||||
|
em.persist(celulares);
|
||||||
|
celulares.setNombre("LAPTOPS");
|
||||||
|
em.flush();
|
||||||
|
em.clear();
|
||||||
|
|
||||||
|
celulares = em.merge(celulares);
|
||||||
|
celulares.setNombre("PANTALLAS");
|
||||||
|
em.flush();
|
||||||
|
em.remove(celulares);
|
||||||
|
*/
|
||||||
|
|
||||||
|
//V3
|
||||||
|
/*
|
||||||
|
em.persist(celulares);
|
||||||
|
celulares.setNombre("LAPTOPS");
|
||||||
|
em.flush();
|
||||||
|
em.clear();
|
||||||
|
|
||||||
|
celulares = em.merge(celulares);
|
||||||
|
celulares.setNombre("PANTALLAS");
|
||||||
|
em.flush();
|
||||||
|
//em.clear();
|
||||||
|
em.remove(celulares);
|
||||||
|
em.flush();
|
||||||
|
*/
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void RegistrarProducto() {
|
||||||
|
Categoria celulares = new Categoria("Celulares");
|
||||||
|
Producto celular = new Producto("Samsung", "Teléfono usado", new BigDecimal("1000"), celulares);
|
||||||
|
EntityManager em = JPAUtils.getEntityManager();
|
||||||
|
ProductoDao productoDao = new ProductoDao(em);
|
||||||
|
CategoriaDao categoriaDao = new CategoriaDao(em);
|
||||||
|
|
||||||
|
em.getTransaction().begin();
|
||||||
|
categoriaDao.guardar(celulares);
|
||||||
|
productoDao.guardar(celular);
|
||||||
|
em.getTransaction().commit();
|
||||||
|
em.close();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,14 @@
|
|||||||
|
package com.latam.alura.tienda.utils;
|
||||||
|
|
||||||
|
import javax.persistence.EntityManager;
|
||||||
|
import javax.persistence.EntityManagerFactory;
|
||||||
|
import javax.persistence.Persistence;
|
||||||
|
|
||||||
|
public class JPAUtils {
|
||||||
|
|
||||||
|
private static EntityManagerFactory FACTORY = Persistence.createEntityManagerFactory("tienda");
|
||||||
|
|
||||||
|
public static EntityManager getEntityManager() {
|
||||||
|
return FACTORY.createEntityManager();
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,33 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<persistence version="2.2"
|
||||||
|
xmlns="http://xmlns.jcp.org/xml/ns/persistence"
|
||||||
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
|
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence
|
||||||
|
http://xmlns.jcp.org/xml/ns/persistence/persistence_2_2.xsd">
|
||||||
|
<persistence-unit name="tienda" transaction-type="RESOURCE_LOCAL">
|
||||||
|
<!-- En caso de utilizar otro framework distinto de Hibernate
|
||||||
|
se deben especificar las entidades
|
||||||
|
<class>com.latam.alura.tienda.modelo.Producto</class>
|
||||||
|
-->
|
||||||
|
<properties>
|
||||||
|
<property name="javax.persistence.jdbc.driver" value="org.h2.Driver"/>
|
||||||
|
<!--
|
||||||
|
<property name="javax.persistence.jdbc.url" value="jdbc:h2:/mnt/Biblioteca/Code/guias/Java/oracle_one/cursos/010_spring_boot/jpa/tienda2/database/tienda;DB_CLOSE_DELAY=-1;DATABASE_TO_UPPER=false"/>
|
||||||
|
-->
|
||||||
|
<property name="javax.persistence.jdbc.url"
|
||||||
|
value="jdbc:h2:tcp://127.0.1.1:9092//mnt/Biblioteca/Code/guias/Java/oracle_one/cursos/010_spring_boot/jpa/tienda2/database/tienda;DATABASE_TO_UPPER=false;AUTO_SERVER=false"/>
|
||||||
|
<property name="javax.persistence.jdbc.user" value="sa"/>
|
||||||
|
<property name="javax.persistence.jdbc.password" value="sa"/>
|
||||||
|
<property name="hibernate.show_sql" value="true"/>
|
||||||
|
<property name="hibernate.format_sql" value="true"/>
|
||||||
|
<property name="hibernate.hbm2ddl.auto" value="create-drop"/>
|
||||||
|
<property name="hibernate.dialect" value="org.hibernate.dialect.H2Dialect"/>
|
||||||
|
<!-- hibernate.hdbm2ddl.auto values:
|
||||||
|
- create: Crea tabla, columnas y datos, de manera persistente
|
||||||
|
- create-drop: Igual que create, pero elimina todo al terminar la applicación.
|
||||||
|
- validate: Verifica que todo esté correcto
|
||||||
|
- update: Crea en caso de que no existan elementos, tablas o datos. Persistente
|
||||||
|
-->
|
||||||
|
</properties>
|
||||||
|
</persistence-unit>
|
||||||
|
</persistence>
|
87
010_spring_boot/jpa_avanzado.md
Normal file
87
010_spring_boot/jpa_avanzado.md
Normal file
@ -0,0 +1,87 @@
|
|||||||
|
# JPA Avanzado
|
||||||
|
|
||||||
|
<style>div.mermaid{text-align: center;}</style>
|
||||||
|
|
||||||
|
Retomando el proyecto [anterior](./jpa/tienda/src/main/java/com/latam/alura/tienda/)
|
||||||
|
|
||||||
|
```mermaid
|
||||||
|
erDiagram
|
||||||
|
Categorias ||--o{ Productos : tiene
|
||||||
|
Productos {
|
||||||
|
id bigint PK
|
||||||
|
nombre varchar
|
||||||
|
descripcion varchar
|
||||||
|
precio decimal
|
||||||
|
categoria_id bigint FK
|
||||||
|
}
|
||||||
|
Categorias {
|
||||||
|
id biging PK
|
||||||
|
nombre string
|
||||||
|
}
|
||||||
|
Clientes ||--o{ Pedidos : tiene
|
||||||
|
Clientes {
|
||||||
|
id bigint PK
|
||||||
|
nombre string
|
||||||
|
dni string
|
||||||
|
}
|
||||||
|
Pedidos {
|
||||||
|
id bigint PK
|
||||||
|
fecha date
|
||||||
|
valor_total decimal
|
||||||
|
cliente_id bigint FK
|
||||||
|
}
|
||||||
|
Items_Pedido {
|
||||||
|
id bigint PK
|
||||||
|
producto_id biging FK
|
||||||
|
pedido_id bigint FK
|
||||||
|
precio_unitario decimal
|
||||||
|
cantidad int
|
||||||
|
}
|
||||||
|
Pedidos ||--|{ Items_Pedido : tiene
|
||||||
|
Items_Pedido }|--|| Productos: tiene
|
||||||
|
```
|
||||||
|
|
||||||
|
## H2
|
||||||
|
|
||||||
|
Alias para manejar H2
|
||||||
|
|
||||||
|
```bash
|
||||||
|
alias h2server='java -cp ${HOME}/.m2/repository/com/h2database/h2/2.2.222/h2-2.2.222.jar org.h2.tools.Server -tcpAllowOthers -pgAllowOthers'
|
||||||
|
alias h2console='java -jar ${HOME}/.m2/repository/com/h2database/h2/2.2.222/h2-2.2.222.jar'
|
||||||
|
```
|
||||||
|
|
||||||
|
- Creación de base de datos `h2console`
|
||||||
|
|
||||||
|
### H2 en modo servidor
|
||||||
|
|
||||||
|
```bash
|
||||||
|
h2server
|
||||||
|
|
||||||
|
TCP server running at tcp://127.0.1.1:9092 (others can connect)
|
||||||
|
PG server running at pg://127.0.1.1:5435 (others can connect)
|
||||||
|
Web Console server running at http://127.0.1.1:8082 (only local connections)
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
En [pom.xml](./jpa/tienda2/pom.xml) cambiar la `url` para usar base de datos
|
||||||
|
creada anteriormente
|
||||||
|
|
||||||
|
```xml
|
||||||
|
...
|
||||||
|
<properties>
|
||||||
|
...
|
||||||
|
<property name="javax.persistence.jdbc.url"
|
||||||
|
value="jdbc:h2:tcp://127.0.1.1:9092//ruta/database;DATABASE_TO_UPPER=false;AUTO_SERVER=false"/>
|
||||||
|
...
|
||||||
|
</properties>
|
||||||
|
...
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Sumario Aula 1
|
||||||
|
|
||||||
|
- 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
|
||||||
|
|
@ -82,7 +82,7 @@ OJP-->JP
|
|||||||
end
|
end
|
||||||
```
|
```
|
||||||
|
|
||||||
JPA es una capa (una abstarcción) se debe usar una biblioteca que la implemente
|
JPA es una capa (una abstracción) se debe usar una biblioteca que la implemente
|
||||||
Existen detalles específicos de Hibernate que dificultan cambiar de implementacion
|
Existen detalles específicos de Hibernate que dificultan cambiar de implementacion
|
||||||
de JPA. Es recomendable mantenerse dentro del patrón de JPA.
|
de JPA. Es recomendable mantenerse dentro del patrón de JPA.
|
||||||
|
|
||||||
@ -169,10 +169,10 @@ erDiagram
|
|||||||
Productos }|--|| Categorias : tiene
|
Productos }|--|| Categorias : tiene
|
||||||
Productos {
|
Productos {
|
||||||
id bigint PK
|
id bigint PK
|
||||||
Nombre varchar
|
nombre varchar
|
||||||
Descripcion varchar
|
descripcion varchar
|
||||||
Precio decimal
|
precio decimal
|
||||||
categoria_id int FK
|
categoria_id bigint FK
|
||||||
}
|
}
|
||||||
Categorias {
|
Categorias {
|
||||||
id biging PK
|
id biging PK
|
||||||
|
@ -49,3 +49,4 @@ primoridiales en programación con Javascript
|
|||||||
- [Base de datos](./010_spring_boot/base_de_datos.md)
|
- [Base de datos](./010_spring_boot/base_de_datos.md)
|
||||||
- [JDBC](./010_spring_boot/jdbc.md)
|
- [JDBC](./010_spring_boot/jdbc.md)
|
||||||
- [Persistencia con JPA - Hibernate](./010_spring_boot/jpa_persistencia_hibernate.md)
|
- [Persistencia con JPA - Hibernate](./010_spring_boot/jpa_persistencia_hibernate.md)
|
||||||
|
- [JPA consultas avanzadas, rendimiento y modelos complejos](./010_spring_boot/jpa_avanzado.md)
|
||||||
|
Loading…
Reference in New Issue
Block a user