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
|
||||
*.umlcd
|
||||
target/
|
||||
*.trace.db
|
||||
|
@ -9,3 +9,6 @@ Java y [bases de datos](./base_de_datos.md)
|
||||
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
|
||||
|
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
|
||||
```
|
||||
|
||||
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
|
||||
de JPA. Es recomendable mantenerse dentro del patrón de JPA.
|
||||
|
||||
@ -169,10 +169,10 @@ erDiagram
|
||||
Productos }|--|| Categorias : tiene
|
||||
Productos {
|
||||
id bigint PK
|
||||
Nombre varchar
|
||||
Descripcion varchar
|
||||
Precio decimal
|
||||
categoria_id int FK
|
||||
nombre varchar
|
||||
descripcion varchar
|
||||
precio decimal
|
||||
categoria_id bigint FK
|
||||
}
|
||||
Categorias {
|
||||
id biging PK
|
||||
|
@ -49,3 +49,4 @@ primoridiales en programación con Javascript
|
||||
- [Base de datos](./010_spring_boot/base_de_datos.md)
|
||||
- [JDBC](./010_spring_boot/jdbc.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