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