[░░░░░░░░░░░░░░░░░░░░] 0%█

[ clic o tecla para saltar ]

santiago@madrid:~$

> hola, soy

Java · JDBC · SQL · PostgreSQL · MySQL · Maven · Git · Python · Spring Boot (aprendiendo)

disponible para prácticas o puesto junior · Madrid

descargar cvescribirme

// 01

// 01

Proyecto JDBC

Aplicación en Java que gestiona empresas, departamentos y empleados sobre PostgreSQL, con acceso a datos mediante JDBC puro (sin ORM), estructura DDD y patrón Repository.

Java · JDBC · PostgreSQL · SQL · Git y GitHub · IntelliJ IDEA

santiago@madrid:~/proyectos/jdbc-empresas

$ cat README.md

# Gestión de empresas, departamentos y empleados

Es una aplicación en Java que guarda y gestiona los datos de empresas, departamentos y empleados en una base de datos PostgreSQL.

## Por qué lo hice

Quería entender cómo se comunica una aplicación con una base de datos relacional y cómo organizar el código para que sea fácil de mantener. Empecé con JDBC a propósito: así sé qué pasa por debajo antes de usar JPA e Hibernate.

## Qué problema resuelve

Mantiene la información de una empresa (sus departamentos y empleados) en una base de datos y permite consultarla y modificarla, con el código ordenado en capas para que el acceso a los datos quede separado del resto de la aplicación.

## Qué hace

  • - Crea, consulta, actualiza y borra empresas, departamentos y empleados (CRUD).
  • - Busca datos por atributos y por las relaciones entre las tres entidades.
  • - Usa Optional para los resultados que pueden no existir.

## Cómo está organizado

$ tree

├── domain
│   ├── model            las entidades del dominio
│   └── repository       los contratos (interfaces) de los repositorios
└── infrastructure
    ├── database         el acceso a la base de datos
    └── repository       la implementación de esos contratos con JDBC

## Decisiones que tomé

  • - JDBC puro, sin ORM: escribo yo las consultas SQL y el paso de filas a objetos.
  • - Consultas con PreparedStatement y lectura de resultados con ResultSet.
  • - Patrón Repository con interfaces genéricas: cada entidad tiene su contrato y una implementación con JDBC.
  • - Capas inspiradas en DDD: el dominio define qué necesita y la infraestructura lo implementa.

## Un fragmento del código

@Override
public List<Empresa> findByNombreContaining(String nombre) {
    String sql = "SELECT * FROM empresa WHERE nombre LIKE ?";
    List<Empresa> empresas = new ArrayList<>();
    try (Connection connection = DatabaseConnection.getConnection();
         PreparedStatement statement = connection.prepareStatement(sql);) {
        statement.setString(1, "%" + nombre + "%");
        try (ResultSet resultSet = statement.executeQuery()) {
            while (resultSet.next()) {
                Empresa empresa = new Empresa(
                        resultSet.getLong("id"),
                        resultSet.getString("nombre"),
                        resultSet.getString("cif")
                );
                empresas.add(empresa);
            }
        }
    } catch (SQLException e) {
        throw new RuntimeException("Error al buscar empresas por nombre", e);
    }
    return empresas;
}
  • - try-with-resources: la conexión, el PreparedStatement y el ResultSet se cierran solos.
  • - El valor buscado entra con setString, no se concatena dentro del SQL.
  • - Cada fila del ResultSet se convierte en un objeto Empresa.
  • - Si falla el SQL, se lanza una excepción con un mensaje claro y la causa original.

## Tecnologías

Java · JDBC · PostgreSQL · SQL · Git y GitHub · IntelliJ IDEA

## Qué me llevo

Practicar programación orientada a objetos, arquitectura de software y acceso a datos. Es la base para seguir con Spring Boot y JPA.

$ █

// 02

// añade tu foto en public/foto.jpg

Estoy construyendo mi camino en el desarrollo de software, con especial interés en el backend y en cómo funcionan las cosas detrás de una aplicación. Me importa escribir código limpio y bien estructurado: separar responsabilidades, pensar la arquitectura (DDD, capas) y que todo sea fácil de mantener. Por eso empecé con JDBC: quiero entender bien cómo se accede a los datos para dar el salto a JPA e Hibernate sobre unas bases sólidas. Estudio 2.º de DAM y centro mi aprendizaje en Java, programación orientada a objetos, SQL y Python; también estoy empezando con Spring Boot. Me gusta aprender construyendo. Uso la IA como apoyo para investigar y entender código, sin dejar de revisar lo que hago. Busco unas prácticas o una oportunidad junior donde aportar, asumir retos y seguir mejorando.

// 03

Lenguajes
Java, Python, SQL; conocimientos de JavaScript, HTML y CSS
Java y backend
programación orientada a objetos (POO), colecciones, gestión de excepciones, JDBC, fundamentos de APIs REST y JSON
Bases de datos
PostgreSQL, MySQL
Herramientas
Spring Boot (en aprendizaje; después JPA/Hibernate), Git, GitHub, Maven
Fundamentos
estructuras de datos, algoritmos, separación de responsabilidades, patrones de diseño

// 04

2025 – 2027
CFGS Desarrollo de Aplicaciones Multiplataforma (DAM) · en curso
IES Virgen de la Paloma, Madrid
2024
Técnico en Programación de Software
SENA (Servicio Nacional de Aprendizaje), Colombia
idiomas
Español (nativo) · Inglés (B1, en mejora)

// 05