GUIA PRACTICA DESDE 0 PARA PROYECTOS EN HIBERNATE USANDO JAVA
CRUD BASICO
- HibernateUtil.java
package org.example;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
public class HibernateUtil {
private static final SessionFactory sessionFactory = buildSessionFactory();
private static SessionFactory buildSessionFactory() {
try {
return new Configuration().configure().buildSessionFactory();
} catch (Throwable ex) {
System.err.println("Error en la creacion de SessionFactory: " + ex);
throw new ExceptionInInitializerError(ex);
}
}
public static SessionFactory getSessionFactory() {
return sessionFactory;
}
public static void shutdown() {
getSessionFactory().close();
}
}
Registro.java
package org.example;
import jakarta.persistence.*;
@Entity
@Table(name = "registros")
public class Registro {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(nullable = false, length = 100)
private String nombre;
@Column
private String email;
@Column
private int edad;
// Constructor vacío obligatorio
public Registro() {}
// Constructor con parámetros
public Registro(String nombre, String email, int edad) {
this.nombre = nombre;
this.email = email;
this.edad = edad;
}
// Getters y Setters
public Long getId() {
return id;
}
public String getNombre() {
return nombre;
}
public void setNombre(String nombre) {
this.nombre = nombre;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public int getEdad() {
return edad;
}
public void setEdad(int edad) {
this.edad = edad;
}
@Override
public String toString() {
return "Registro{" +
"id=" + id +
", nombre='" + nombre + '\'' +
", email='" + email + '\'' +
", edad=" + edad +
'}';
}
}
Main.java
package org.example;
import org.hibernate.Session;
import org.hibernate.Transaction;
import java.util.List;
public class Main {
public static void main(String[] args) {
listarRegistros();
// Cerrar SessionFactory
HibernateUtil.shutdown();
}
public static void crearRegistro(String nombre, String email, int edad) {
Transaction transaction = null;
try (Session session = HibernateUtil.getSessionFactory().openSession()) {
transaction = session.beginTransaction();
Registro registro = new Registro(nombre, email, edad);
session.persist(registro);
transaction.commit();
System.out.println("Registro creado: " + registro);
} catch (Exception e) {
if (transaction != null) transaction.rollback();
e.printStackTrace();
}
}
public static void listarRegistros() {
try (Session session = HibernateUtil.getSessionFactory().openSession()) {
List<Registro> registros = session
.createQuery("FROM Registro", Registro.class)
.list();
System.out.println("\n=== Lista de Registros ===");
registros.forEach(System.out::println);
}
}
public static void actualizarRegistro(Long id, String nuevoNombre) {
Transaction transaction = null;
try (Session session = HibernateUtil.getSessionFactory().openSession()) {
transaction = session.beginTransaction();
Registro registro = session.get(Registro.class, id);
if (registro != null) {
registro.setNombre(nuevoNombre);
session.merge(registro);
System.out.println("Registro actualizado: " + registro);
}
transaction.commit();
} catch (Exception e) {
if (transaction != null) transaction.rollback();
e.printStackTrace();
}
}
public static void eliminarRegistro(Long id) {
Transaction transaction = null;
try (Session session = HibernateUtil.getSessionFactory().openSession()) {
transaction = session.beginTransaction();
Registro registro = session.get(Registro.class, id);
if (registro != null) {
session.remove(registro);
System.out.println("Registro eliminado con ID: " + id);
}
transaction.commit();
} catch (Exception e) {
if (transaction != null) transaction.rollback();
e.printStackTrace();
}
}
}
hibernate.cfg.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<property name="hibernate.connection.driver_class">com.mysql.cj.jdbc.Driver
</property>
<property name="hibernate.connection.url">jdbc:mysql://localhost:3727/registro
</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password">RootRott</property>
<property
name="hibernate.dialect">org.hibernate.dialect.MySQLDialect
</property>
<property name="hibernate.show_sql">true</property>
<property name="hibernate.format_sql">true</property>
<property name="hibernate.hbm2ddl.auto">update</property>
<mapping class="org.example.Usuario"/>
</session-factory>
</hibernate-configuration>
pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.example</groupId>
<artifactId>untitled1</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<maven.compiler.source>24</maven.compiler.source>
<maven.compiler.target>24</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<!-- Hibernate Core -->
<dependency>
<groupId>org.hibernate.orm</groupId>
<artifactId>hibernate-core</artifactId>
<version>6.2.2.Final</version>
</dependency>
<!-- MySQL Connector -->
<dependency>
<groupId>com.mysql</groupId>
<artifactId>mysql-connector-j</artifactId>
<version>9.1.0</version>
</dependency>
</dependencies>
</project>
Top comments (0)