Tenemos la siguiente base de datos:
DROP TABLE IF EXISTS `cartera`; /*!40101 SET @saved_cs_client = @@character_set_client */; /*!40101 SET character_set_client = utf8 */; CREATE TABLE `cartera` ( `idcartera` int(11) NOT NULL AUTO_INCREMENT, `idusuario` int(11) DEFAULT NULL, `idmoneda` int(11) DEFAULT NULL, `cantidad` int(11) DEFAULT NULL, PRIMARY KEY (`idcartera`) ) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=latin1; /*!40101 SET character_set_client = @saved_cs_client */; -- -- Dumping data for table `cartera` -- LOCK TABLES `cartera` WRITE; /*!40000 ALTER TABLE `cartera` DISABLE KEYS */; INSERT INTO `cartera` VALUES (1,1,1,2),(2,1,2,3),(3,2,1,1),(4,2,2,5); /*!40000 ALTER TABLE `cartera` ENABLE KEYS */; UNLOCK TABLES; -- -- Table structure for table `monedas` -- DROP TABLE IF EXISTS `monedas`; /*!40101 SET @saved_cs_client = @@character_set_client */; /*!40101 SET character_set_client = utf8 */; CREATE TABLE `monedas` ( `idmonedas` int(11) NOT NULL AUTO_INCREMENT, `nombre` varchar(45) DEFAULT NULL, `valor` decimal(8,2) DEFAULT NULL, PRIMARY KEY (`idmonedas`) ) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=latin1; /*!40101 SET character_set_client = @saved_cs_client */; -- -- Dumping data for table `monedas` -- LOCK TABLES `monedas` WRITE; /*!40000 ALTER TABLE `monedas` DISABLE KEYS */; INSERT INTO `monedas` VALUES (1,'Bitcoin',10.00),(2,'Ethereum',20.00); /*!40000 ALTER TABLE `monedas` ENABLE KEYS */; UNLOCK TABLES; -- -- Table structure for table `usuario` -- DROP TABLE IF EXISTS `usuario`; /*!40101 SET @saved_cs_client = @@character_set_client */; /*!40101 SET character_set_client = utf8 */; CREATE TABLE `usuario` ( `idusuario` int(11) NOT NULL, `nombre` varchar(45) DEFAULT NULL, PRIMARY KEY (`idusuario`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1; /*!40101 SET character_set_client = @saved_cs_client */; -- -- Dumping data for table `usuario` -- LOCK TABLES `usuario` WRITE; /*!40000 ALTER TABLE `usuario` DISABLE KEYS */; INSERT INTO `usuario` VALUES (1,'Ana'),(2,'Eva'); /*!40000 ALTER TABLE `usuario` ENABLE KEYS */;
Y vamos a crear los POJO’s y los DAO para manejar estas relaciones.
Usuarios:
package com.trifulcas.datos; import java.util.ArrayList; import java.util.List; public class Usuario { private int idusuario; private String nombre; private List<Cartera> cartera; public Usuario(int idusuario, String nombre) { super(); this.idusuario = idusuario; this.nombre = nombre; cartera=new ArrayList<Cartera>(); } /** * @return the cartera */ public List<Cartera> getCartera() { return cartera; } /** * @param cartera the cartera to set */ public void setCartera(List<Cartera> cartera) { this.cartera = cartera; } /** * @return the idusuario */ public int getIdusuario() { return idusuario; } /** * @param idusuario the idusuario to set */ public void setIdusuario(int idusuario) { this.idusuario = idusuario; } /** * @return the nombre */ public String getNombre() { return nombre; } /** * @param nombre the nombre to set */ public void setNombre(String nombre) { this.nombre = nombre; } @Override public String toString() { return "Usuario [idusuario=" + idusuario + ", nombre=" + nombre + ", cartera=" + cartera + "]"; } }
package com.trifulcas.datos; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.util.ArrayList; import java.util.List; public class UsuarioDAO { private Connection con; private int max_records = 1000; public UsuarioDAO() { try { Class.forName("com.mysql.cj.jdbc.Driver"); con = DriverManager.getConnection("jdbc:mysql://localhost:3306/prestamos", "root", ""); } catch (Exception ex) { System.out.println(ex); } } public Usuario getUsuario(int id) { Usuario res = null; CarteraDAO cartera=new CarteraDAO(); try { String sql = "select * from usuario where idusuario=?"; PreparedStatement stmt = con.prepareStatement(sql); stmt.setInt(1, id); ResultSet rs = stmt.executeQuery(); if (rs.next()) { res = new Usuario(rs.getInt("idusuario"),rs.getString("nombre")); res.setCartera(cartera.getCarteraUsuario(rs.getInt("idusuario"))); } } catch (Exception ex) { System.out.println(ex); } return res; } }
MOneda:
package com.trifulcas.datos; public class Moneda { private int idmonedas; private String nombre; private double valor; public Moneda(int idmonedas, String nombre, double valor) { super(); this.idmonedas = idmonedas; this.nombre = nombre; this.valor = valor; } /** * @return the idmonedas */ public int getIdmonedas() { return idmonedas; } /** * @param idmonedas the idmonedas to set */ public void setIdmonedas(int idmonedas) { this.idmonedas = idmonedas; } /** * @return the nombre */ public String getNombre() { return nombre; } /** * @param nombre the nombre to set */ public void setNombre(String nombre) { this.nombre = nombre; } /** * @return the valor */ public double getValor() { return valor; } /** * @param valor the valor to set */ public void setValor(double valor) { this.valor = valor; } @Override public String toString() { return "Moneda [idmonedas=" + idmonedas + ", nombre=" + nombre + ", valor=" + valor + "]"; } }
package com.trifulcas.datos; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.util.ArrayList; import java.util.List; public class MonedaDAO { private Connection con; private int max_records = 1000; public MonedaDAO() { try { Class.forName("com.mysql.cj.jdbc.Driver"); con = DriverManager.getConnection("jdbc:mysql://localhost:3306/prestamos", "root", ""); } catch (Exception ex) { System.out.println(ex); } } public Moneda getMoneda(int id) { Moneda res = null; try { String sql = "select * from monedas where idmonedas=?"; PreparedStatement stmt = con.prepareStatement(sql); stmt.setInt(1, id); ResultSet rs = stmt.executeQuery(); if (rs.next()) { res = new Moneda(rs.getInt("idmonedas"), rs.getString("nombre"), rs.getDouble("valor")); } } catch (Exception ex) { System.out.println(ex); } return res; } }
Cartera:
package com.trifulcas.datos; public class Cartera { private int idcartera; private int idusuario; private int idmoneda; private int cantidad; private Moneda moneda; public Cartera(int idcartera, int idusuario, int idmoneda, int cantidad, Moneda moneda) { super(); this.idcartera = idcartera; this.idusuario = idusuario; this.idmoneda = idmoneda; this.cantidad=cantidad; this.moneda = moneda; } /** * @return the cantidad */ public int getCantidad() { return cantidad; } /** * @param cantidad the cantidad to set */ public void setCantidad(int cantidad) { this.cantidad = cantidad; } /** * @return the idcartera */ public int getIdcartera() { return idcartera; } /** * @param idcartera the idcartera to set */ public void setIdcartera(int idcartera) { this.idcartera = idcartera; } /** * @return the idusuario */ public int getIdusuario() { return idusuario; } /** * @param idusuario the idusuario to set */ public void setIdusuario(int idusuario) { this.idusuario = idusuario; } /** * @return the idmoneda */ public int getIdmoneda() { return idmoneda; } /** * @param idmoneda the idmoneda to set */ public void setIdmoneda(int idmoneda) { this.idmoneda = idmoneda; } /** * @return the moneda */ public Moneda getMoneda() { return moneda; } /** * @param moneda the moneda to set */ public void setMoneda(Moneda moneda) { this.moneda = moneda; } @Override public String toString() { return "Cartera [idcartera=" + idcartera + ", idusuario=" + idusuario + ", idmoneda=" + idmoneda + ", cantidad=" + cantidad + ", moneda=" + moneda + "]"; } }
package com.trifulcas.datos; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.util.ArrayList; import java.util.List; public class CarteraDAO { private Connection con; private int max_records = 1000; public CarteraDAO() { try { Class.forName("com.mysql.cj.jdbc.Driver"); con = DriverManager.getConnection("jdbc:mysql://localhost:3306/prestamos", "root", ""); } catch (Exception ex) { System.out.println(ex); } } public Cartera getCartera(int id) { Cartera res = null; MonedaDAO moneda=new MonedaDAO(); try { String sql = "select * from cartera where idcartera=?"; PreparedStatement stmt = con.prepareStatement(sql); stmt.setInt(1, id); ResultSet rs = stmt.executeQuery(); if (rs.next()) { res = new Cartera(rs.getInt("idcartera"), rs.getInt("idusuario"),rs.getInt("idmoneda"), rs.getInt("cantidad"), moneda.getMoneda(rs.getInt("idmoneda"))) ; } } catch (Exception ex) { System.out.println(ex); } return res; } public List<Cartera> getCarteraUsuario(int id){ List<Cartera> res = new ArrayList<Cartera>(); try { String sql = "select * from cartera where idusuario=?"; PreparedStatement stmt = con.prepareStatement(sql); stmt.setInt(1, id); ResultSet rs = stmt.executeQuery(); while (rs.next()) { Cartera temp = getCartera(rs.getInt("idcartera")); res.add(temp); } } catch (Exception ex) { System.out.println(ex); } return res; } }
Test:
package com.trifulcas.datos; public class TestCartera { public static void main(String[] args) { MonedaDAO moneda=new MonedaDAO(); System.out.println(moneda.getMoneda(1)); CarteraDAO cartera = new CarteraDAO(); System.out.println(cartera.getCartera(1)); System.out.println(cartera.getCartera(2)); System.out.println(cartera.getCartera(3)); System.out.println(cartera.getCarteraUsuario(1)); UsuarioDAO usuario=new UsuarioDAO(); System.out.println(usuario.getUsuario(1)); System.out.println(usuario.getUsuario(2)); } }