¿Qué hay que poner en un powerpoint?

– Nombre del proyecto y del autor/a

(Tornillería Martínez, por Ana Martínez)

-Breve descripción del proyecto

(En este proyecto vamos a crear un backend para controlar el inventario de tornillos de la tienda, bla, bla, bla, así estará todo informatizado y muy bonito)

– Tecnología utilizada

( Usaremos mysql para base de datos, java como lenguaje de programación, Spring boot como framework, postman, API REST, Swagger…)

– Descripción del modelo de datos

(Hemos creado estas tablas, que tienen esta relación y esta cardinalidad, explicado y el por qué)

– ‘Foto’ del modelo de datos

– Descripción de la API

(Tenemos una API que hace CRUD de las siguientes tablas, además tenemos búsqueda por tal y cual campo, tenemos esto para las relaciones, tralará…)

– ‘Foto’ de la API (con swagger o las urls)

– Descripción del código

(Lo más complicado ha sido hacer esto y aquello para lo que hemos utilizado el siguiente recurso)

– ‘Foto’ de parte del código

– Que hemos aprendido

(He conseguido hacer un MVC desde cero y crear BD y muchas cosas)

– Que se podría mejorar o ampliaciones al proyecto

– Saludos

Pasos para crear Hibernate

Crear un proyecto Maven

Escogemos maven-archetype-quickstart
En principio el de org.apache

Añadimos las dependencias de ‘Hibernate’ y ‘Mysql’. Os las pongo aquí.

 <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.11</version>
      <scope>test</scope>
    </dependency>
    <dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
			<version>8.0.32</version>
		</dependency>
		<dependency>
			<groupId>org.hibernate</groupId>
			<artifactId>hibernate-core</artifactId>
			<version>5.6.15.Final</version>
		</dependency>
  </dependencies>

Después dentro de src/main creamos la carpeta ‘resources’: New folder

Dentro de resources creamos el archivo hibernate.cfg.xml, y dentro colocamos lo siguiente:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
    "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
    "https://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
	<session-factory>
		<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
		<property name="connection.url">jdbc:mysql://localhost/sakila</property>
		<property name="connection.username">root</property>
		<property name="connection.password">root</property>
		<property name="dialect">org.hibernate.dialect.MySQL5Dialect</property>
		<property name="hibernate.show_sql">true</property>

		<mapping class="com.trifulcas.models.Actor" />
	
	</session-factory>
</hibernate-configuration>

Creamos un paquete com.trifulcas.models y dentro metemos nuestro POJO:

package com.trifulcas.models;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;


@Entity  
@Table(name= "actor")   
public class Actor {

	@Id
	@GeneratedValue(strategy=GenerationType.IDENTITY)
	private int actor_id;
	
	private String first_name;
	private String last_name;
	
	public Actor() {
		
	}
	/**
	 * @return the actor_id
	 */
	public int getActor_id() {
		return actor_id;
	}
	/**
	 * @param actor_id the actor_id to set
	 */
	public void setActor_id(int actor_id) {
		this.actor_id = actor_id;
	}
	/**
	 * @return the first_name
	 */
	public String getFirst_name() {
		return first_name;
	}
	/**
	 * @param first_name the first_name to set
	 */
	public void setFirst_name(String first_name) {
		this.first_name = first_name;
	}
	/**
	 * @return the last_name
	 */
	public String getLast_name() {
		return last_name;
	}
	/**
	 * @param last_name the last_name to set
	 */
	public void setLast_name(String last_name) {
		this.last_name = last_name;
	}
	@Override
	public String toString() {
	return "Actor id=" + actor_id + ",nombre=" + first_name+" "+last_name + "]";
	}
}

Y por último probaríamos que todo va bien, este código debería funcionar:

	StandardServiceRegistry ssr = new StandardServiceRegistryBuilder().configure("hibernate.cfg.xml").build();
		Metadata meta = new MetadataSources(ssr).getMetadataBuilder().build();

		SessionFactory factory = meta.getSessionFactoryBuilder().build();
		Session session = factory.openSession();
		try {
			Actor penelope = session.get(Actor.class, 1);
			
			System.out.println(penelope.getFirst_name() + " " + penelope.getLast_name());
			List<Actor> lista = session.createQuery("from Actor a where a.first_name like '%ar%' ").getResultList();
			for (Actor a : lista) {
				System.out.println(a);
			}
			
			
		} catch (Exception ex) {
			System.out.println(ex);
		}
		factory.close();
		session.close();

DAO comienzo

public class ActorDAO {
	private Connection con;

	public ActorDAO() {
		try {
			// Registrar el driver mysql
			Class.forName("com.mysql.cj.jdbc.Driver");
			// Conectarme a la base de datos
			 con = DriverManager.getConnection("jdbc:mysql://localhost:3306/sakila", "root", "root");
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	public ArrayList<Actor> getActorAll() {
		try {
			String sql="select * from actor";
			PreparedStatement psmt=con.prepareStatement(sql);
			ResultSet res=psmt.executeQuery();
			ArrayList<Actor> actores= new ArrayList<Actor>();
			while (res.next()) {
				actores.add( new Actor(res.getInt("actor_id"),
						res.getString("first_name"),
						res.getString("last_name")));
			}
			return actores;
		}catch(Exception ex) {
			ex.printStackTrace();
			return null;
		}
	}

	public Actor getActor(int id) {
		try {
			String sql="select * from actor where actor_id=?";
			PreparedStatement psmt=con.prepareStatement(sql);
			psmt.setInt(1, id);
			ResultSet res=psmt.executeQuery();
			if (res.next()) {
				return new Actor(res.getInt("actor_id"),
						res.getString("first_name"),
						res.getString("last_name"));
			}
			else {
				return null;
			}
		}catch(Exception ex) {
			ex.printStackTrace();
			return null;
		}
	}
	public boolean addActor(String first_name, String last_name) {
		try {
			String sql="insert into actor (first_name,last_name) values (?,?)";
			PreparedStatement psmt=con.prepareStatement(sql);
			psmt.setString(1, first_name);
			psmt.setString(2, last_name);
			int res=psmt.executeUpdate();
			return res==1;
		}catch(Exception ex) {
			ex.printStackTrace();
			return false;
		}
	}
	public boolean addActor(Actor actor) {
		try {
			String sql="insert into actor (first_name,last_name) values (?,?)";
			PreparedStatement psmt=con.prepareStatement(sql);
			psmt.setString(1, actor.getFirst_name());
			psmt.setString(2, actor.getLast_name());
			int res=psmt.executeUpdate();
			return res==1;
		}catch(Exception ex) {
			ex.printStackTrace();
			return false;
		}
	}

}
	public static void main(String[] args) {
		try {
			// El objeto DAO que me permite trabajar con la BD
			ActorDAO dao=new ActorDAO();
			// Utilizar  una de las propiedades: add
			for(int i=0;i<10000;i++) {
				dao.addActor("John"+i, "Travolta");
			}
			//dao.addActor("John", "Travolta");
			
			Actor eva=new Actor(0,"Eva","Wuig");
		//	dao.addActor(eva);
			
			System.out.println(dao.getActor(1));
			System.out.println(dao.getActorAll());
			
			
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

Ejemplos JDBC

try {
			// Registrar el driver mysql
			Class.forName("com.mysql.cj.jdbc.Driver");
			// Conectarme a la base de datos
			Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/sakila", "root", "root");
			String nombre="Ana";
			// Creo a partir de la conexión un comando
			Statement stmt = con.createStatement();
			stmt.execute("insert into actor(first_name,last_name) values ('"+nombre+"','pi')");
			
			 // Los interrogantes son los parámetros
            PreparedStatement psmt=con.prepareStatement("insert into actor (first_name,last_name) values (?,?)");
            psmt.setString(1, "Pep");
            psmt.setString(2, "Pérez");
            psmt.executeUpdate();
            psmt.setString(1, "Pepa");
            psmt.setString(2, "Pérez");
            psmt.executeUpdate();
			// Ejecuto un select y lo guardo en un resultset
            ResultSet rs = stmt.executeQuery("select * from actor where actor_id>20");
            
            // Recorro el resultset y con get obtengo los valores
            while (rs.next()) {
                System.out.println(rs.getInt("actor_id") + "  " + rs.getString(2) + "  " + rs.getString(3));
            }
			
           
            stmt.close();
            con.close();
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}