Ejemplo relaciones en DAO java

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

}