<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: devjov</title>
    <description>The latest articles on DEV Community by devjov (@devjov).</description>
    <link>https://dev.to/devjov</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F894672%2F88a1a424-32b3-4a93-ba3f-faac458f0ef5.jpeg</url>
      <title>DEV Community: devjov</title>
      <link>https://dev.to/devjov</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/devjov"/>
    <language>en</language>
    <item>
      <title>Interceptores Java</title>
      <dc:creator>devjov</dc:creator>
      <pubDate>Sun, 21 Aug 2022 12:07:45 +0000</pubDate>
      <link>https://dev.to/devjov/interceptores-java-2ca8</link>
      <guid>https://dev.to/devjov/interceptores-java-2ca8</guid>
      <description>&lt;p&gt;Los interceptores son útiles cuando se requiere aplicar una funcionalidad especifica para ciertas peticiones HTTP y es transversal a nuestra aplicación.&lt;br&gt;
Es decir son fragmentos de código reutilizables que interceptan un método al controlador para agregar funcionalidad antes o después&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuvp4ioblhriydzhdd0jd.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuvp4ioblhriydzhdd0jd.png" alt=" " width="800" height="185"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Que hace un controlador?&lt;br&gt;
Siempre se va a interceptar el código antes o después.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyau3arq3meejnvfuxaro.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyau3arq3meejnvfuxaro.png" alt=" " width="800" height="410"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Como funciona un interceptor?&lt;br&gt;
Los interceptores deben implementar la interfaz HandlerInterceptor o extender de la clase abstracta HandlerInterceptorAdapter&lt;br&gt;
Son 3 metodos que podemos implementar&lt;br&gt;
.Metodo boolean preHandler(): cuando este método retorne true, continua con la ejecución del controlador y si tiene mas interceptores asociados continua con la ejecución en cadena, cuando retorna false, se asume que el interceptor se hace cargo del request(por ejemplo, redirige a una determinada vista o ruta) y no continua ejecutando el controlador ni los demás interceptores&lt;br&gt;
Metodo void postHandler(): implementar algo después de que se haya invocado el método handler del controlador&lt;br&gt;
Metodo void afterCompletion(): implementar algo cuando finaliza el proceso, es decir, después de cargar y renderizar la vista&lt;/p&gt;

</description>
      <category>java</category>
    </item>
    <item>
      <title>MySQL vs MariaDB</title>
      <dc:creator>devjov</dc:creator>
      <pubDate>Tue, 09 Aug 2022 09:02:00 +0000</pubDate>
      <link>https://dev.to/devjov/mysql-vs-mariadb-hb9</link>
      <guid>https://dev.to/devjov/mysql-vs-mariadb-hb9</guid>
      <description>&lt;p&gt;&lt;strong&gt;MySQL&lt;/strong&gt; es el legado (RDBMS) actualmente desarrollado por Oracle corporation y sigue siendo uno de los sistemas de bases de  datos mas populares hasta la fecha.&lt;br&gt;
&lt;strong&gt;MariaDB&lt;/strong&gt; es un sistema de gestión de bases de datos relacionales(RDBMS) de código abierto, proporciona varias funcionalidades adicionales en comparación con MySQL y esta ganando popularidad debido a su flexibilidad y disponibilidad.&lt;br&gt;
&lt;strong&gt;Historia - MySQL&lt;/strong&gt;&lt;br&gt;
Fue creado por una compañía sueca MySQL AB en 1995. Los desarrolladores de la plataforma fueron Michael Widenius, David Axmark y Allan Larsson. Fue desarrollado inicialmente para uso interno y el objetivo principal era ofrecer opciones eficientes y fiables de gestión de datos para los usuarios domésticos y profesionales.  Oracle compró MySQL en 2010.&lt;br&gt;
&lt;strong&gt;Historia - MariaDB&lt;/strong&gt;&lt;br&gt;
Comenzó como una bifurcación de MySQL. Micheal Widenus (uno de los creadores de MySQL), junto con muchos de los desarrolladores originales, se dedicaron al nuevo proyecto de código abierto. No estaban de acuerdo con oracle corporation con respecto al futuro del producto original, y en su lugar deseaban una arquitectura similar a Eclipse&lt;br&gt;
&lt;strong&gt;&lt;em&gt;Cuáles son las ventajas y desventajas?&lt;/em&gt;&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;Ventajas de MySQL:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Enmascaramiento de datos: cualquier campo que se considere sensible se puede enmascarar de manera eficiente, y existe un mecanismo de cifrado y descifrado apropiado. Estos se han encontrado excelentes en su rendimiento.&lt;/li&gt;
&lt;li&gt;Sistema heredado: como uno de los primeros RDBMS populares, MySQL admite implementaciones antiguas de estos datos para una funcionalidad fluida.&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Soporte de replicación: esto permite que los datos estén disponibles en cada nodo en una configuración distribuida. Los datos se copian automáticamente en el nodo de destino para mejorar la accesibilidad.&lt;br&gt;
&lt;strong&gt;Desventajas de MySQL:&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Falta de prácticas estándar: el uso de una base de Oracle en lugar de seguir el estándar SQL introdujo una funcionalidad personalizada, lo que puede provocar complicaciones en las migraciones de datos.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Cachés: se sabe que las cachés de MySQL son problemáticas y no sirven para situaciones actualizadas de alta volatilidad en tiempo real.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Apoyo limitado a las declaraciones condicionales: las declaraciones condicionales dentro de las consultas son muy limitadas, lo que a menudo requiere más esfuerzo en la estructuración de las operaciones CRUD.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Ventajas de MariaDB&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Facilidad de configuración: MariaDB es fácil de instalar y configurar ya que la sintaxis de los archivos de configuración es simple y bien estructurada.&lt;/li&gt;
&lt;li&gt;Soporte para bases de datos distribuidas; MariaDB admite configuraciones distributivas, que superan a MySQL en rendimiento.&lt;/li&gt;
&lt;li&gt;Alta compatibilidad: MariaDB sobresale en compatibilidad con versiones anteriores, así como en la integración perfecta con sistemas de terceros para mejorar la funcionalidad y la capacidad.&lt;/li&gt;
&lt;li&gt;Disponibilidad del código fuente: MariaDB es de código abierto, lo que permite a los desarrolladores bifurcarse y personalizarse según los requisitos.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Desventajas Mariadb&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;No hay soporte de enmascaramiento de datos: MariaDB no admite el enmascaramiento de datos. Sin embargo, la función se puede incluir utilizando complementos.&lt;/li&gt;
&lt;li&gt;Cifrado relativamente débil: la seguridad de los datos en MariaDB es débil y requiere que los desarrolladores tomen precauciones voluntarias.&lt;/li&gt;
&lt;li&gt;Límites de escalabilidad: dentro de una tabla hay límites en el número de filas y el tamaño de los datos, lo que hace que MariaDB no sea adecuado para el uso de grandes volúmenes.&lt;/li&gt;
&lt;li&gt;No apto para big data: debido a su falta de capacidad para manejar conjuntos de datos más grandes, MariaDB no es adecuado para admitir big data.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>mysql</category>
      <category>sql</category>
      <category>mariadb</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Spring - Inversion of Control</title>
      <dc:creator>devjov</dc:creator>
      <pubDate>Fri, 29 Jul 2022 00:31:00 +0000</pubDate>
      <link>https://dev.to/devjov/spring-inversion-of-control-1com</link>
      <guid>https://dev.to/devjov/spring-inversion-of-control-1com</guid>
      <description>&lt;p&gt;La &lt;em&gt;Inversion de Control (IoC)&lt;/em&gt; es un proceso donde los objetos definen sus dependencias, es decir, las dependencias de otros objetos con los que están trabajando. Se hace simplemente mediante un constructor de argumentos, un argumento a un método de fábrica, o estableciendo propiedades de los objetos cuando se están construyendo. Las dependencias son inyectadas por el contenedor cuando se crea el bean. La inversión de control (IoC) se puede lograr a través de diversas técnicas, como la inyección de dependencias (DI), el patrón de localización de servicios (SLP) y el patrón de diseño de estrategia (SDP).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Hay dos tipos de contenedores de IoC:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;- BeanFactory:&lt;/strong&gt; La interfaz de BeanFactory está disponible en el paquete &lt;em&gt;org.springframework.beans.&lt;/em&gt; . Es la interfaz raíz para acceder al contenedor bean. También proporciona técnicas básicas de configuración para administrar los objetos bean de cualquier tipo. Podemos decir que _BeanFactory _es un método heredado para usar.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;- ApplicationContext:&lt;/strong&gt; La interfaz &lt;em&gt;ApplicationContext&lt;/em&gt; está disponible en el paquete &lt;em&gt;org.springframework.context.&lt;/em&gt; .Es un superconjunto completo de una interfaz &lt;em&gt;BeanFactory&lt;/em&gt;. También se conoce como una interfaz central que proporciona la configuración a una aplicación.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Diferencia entre ApplicationContext y BeanFactory&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Tanto &lt;em&gt;ApplicationContext&lt;/em&gt; como &lt;em&gt;BeanFactory&lt;/em&gt; son las interfaces Java ambas son los tipos de contenedor IoC. Pero la principal diferencia entre ambas interfaces es que  &lt;em&gt;BeanFactory&lt;/em&gt;  proporciona las características básicas de IoC y DI, mientras que  &lt;em&gt;ApplicationContext&lt;/em&gt; ofrece las características avanzadas.&lt;/p&gt;

&lt;p&gt;Algunas de las otras diferencias se dan a continuación:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;La interfaz de &lt;em&gt;BeanFactory&lt;/em&gt;  no admite la internacionalización (i18n), mientras que &lt;em&gt;ApplicationContext&lt;/em&gt; proporciona soporte para ella. La internacionalización es el proceso de construir una aplicación de tal manera que cualquier idioma pueda adaptarla sin ninguna modificación.&lt;/li&gt;
&lt;li&gt;La interfaz de &lt;em&gt;BeanFactory&lt;/em&gt; utiliza la técnica de inicialización perezosa(lazy initialization), mientras que ApplicationContext utiliza una inicialización ansiosa(eager initialization), es decir, BeanFactory crea solo un bean singleton cuando se solicita, pero ApplicationContext produce todos los beans singleton en el momento de la inicialización.&lt;/li&gt;
&lt;li&gt;BeanFactory no admite la configuración basada en anotaciones, mientras que ApplicationContext admite anotaciones como @Autowired, @ComponentScan, etc.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>java</category>
      <category>spring</category>
      <category>espanish</category>
      <category>programming</category>
    </item>
    <item>
      <title>Java - Maven</title>
      <dc:creator>devjov</dc:creator>
      <pubDate>Tue, 26 Jul 2022 04:00:00 +0000</pubDate>
      <link>https://dev.to/devjov/java-maven-1no3</link>
      <guid>https://dev.to/devjov/java-maven-1no3</guid>
      <description>&lt;p&gt;&lt;strong&gt;"Project Management tool"&lt;/strong&gt; -&amp;gt; Herramienta para la gestion de proyectos&lt;br&gt;
&lt;strong&gt;Uso mas frecuente:&lt;/strong&gt; Construccion de proyectos Java y gestion de dependencias&lt;br&gt;
Gestion de dependencias -&amp;gt; Archivos JAR necesarios&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Spring&lt;/li&gt;
&lt;li&gt;Hibernate&lt;/li&gt;
&lt;li&gt;JSON&lt;/li&gt;
&lt;li&gt;&lt;p&gt;ETC&lt;br&gt;
&lt;strong&gt;Como Maven lo hace?&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Especificamos a Maven en que tipo de proyecto estamos trabajando(Spring, Hibernate, ...)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Maven descargara los archivos JAR para los proyectos&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Maven hara que esten disponibles durante la compilacion y ejecucion del proyecto&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>java</category>
      <category>spanish</category>
    </item>
    <item>
      <title>Java Spring AOP</title>
      <dc:creator>devjov</dc:creator>
      <pubDate>Tue, 26 Jul 2022 02:30:41 +0000</pubDate>
      <link>https://dev.to/devjov/java-spring-aop-289l</link>
      <guid>https://dev.to/devjov/java-spring-aop-289l</guid>
      <description>&lt;p&gt;&lt;strong&gt;La programación orientada a aspectos AOP&lt;/strong&gt;&lt;br&gt;
&lt;em&gt;La AOP&lt;/em&gt; esta diseñada para realizar tareas transversales, que pueden ser códigos que se repitan muchas veces por diferentes métodos, que no pueden ser estructurados completamente en un modulo separado.&lt;br&gt;
Objetivo de la AOP -&amp;gt; &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fflrd4071q9369jrxeexj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fflrd4071q9369jrxeexj.png" alt=" " width="502" height="249"&gt;&lt;/a&gt;&lt;br&gt;
En la programación orientada a objetos, la modularidad de la aplicación se logra mediante clases, mientras que en la programación orientada a aspectos la modularidad de la aplicación se logra mediante aspectos y se configuran para abarcar diferentes clases.&lt;br&gt;
&lt;strong&gt;Algunos conceptos básicos de la programación orientada a aspectos:&lt;/strong&gt;&lt;br&gt;
&lt;em&gt;Aspect:&lt;/em&gt; es una clase que implementa problemas de aplicaciones empresariales que abarcan varias clases, como la administración de transacciones. Aspects puede ser una clase normal configurada a través de la configuración XML de Spring o podemos usar la integración de Spring AspectJ para definir una clase como Aspect usando anotación.&lt;a class="mentioned-user" href="https://dev.to/aspect"&gt;@aspect&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Join Points:&lt;/em&gt;  es un punto específico durante a ejecucion de un programa, como la ejecución de métodos, el manejo de excepciones, el cambio de valores de variables de objeto, etc. &lt;/p&gt;

</description>
      <category>java</category>
      <category>tutorial</category>
      <category>es</category>
    </item>
    <item>
      <title>Java- Traer datos de una ddbb con spring</title>
      <dc:creator>devjov</dc:creator>
      <pubDate>Sat, 23 Jul 2022 22:04:00 +0000</pubDate>
      <link>https://dev.to/devjov/java-pequeno-proyectonotas-1m5j</link>
      <guid>https://dev.to/devjov/java-pequeno-proyectonotas-1m5j</guid>
      <description>&lt;p&gt;&lt;strong&gt;Extraer los datos de una BBDD en una pagina web.&lt;/strong&gt;&lt;br&gt;
Apuntes de repaso: &lt;br&gt;
Creacion de un pequeño proyecto web en Java&lt;br&gt;
&lt;strong&gt;BASE DE DATOS&lt;/strong&gt;&lt;br&gt;
Comenzamos creando una BBDD:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;`create database proyecto;`
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Usamos la base de datos que hemos creado&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;`use  proyecto;`
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;y insertamos la tabla en este caso se llamara &lt;em&gt;clientes&lt;/em&gt; con los campos: id, nombre, apellido, email.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;`CREATE TABLE `cliente` (
  `id` int(10) NOT NULL AUTO_INCREMENT,
  `nombre` varchar(35) DEFAULT NULL,
  `apellido` varchar(35) DEFAULT NULL,
  `email` varchar(45) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=latin1;`
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Clase conexión a la BBDD&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        // TODO Auto-generated method stub
        // response.getWriter().append("Served at: ").append(request.getContextPath());

        String jdbcUrl = "jdbc:mysql://localhost:3306/proyecto?allowPublicKeyRetrieval=true&amp;amp;useSSL=false";
        String usuario = "";
        String contra = "";
        String driver = "com.mysql.jdbc.Driver";

        try {
            // Utilizamos la clase PrintWriter para que escriba en el navegador
            PrintWriter out = response.getWriter();
            // Cargamos el driver
            Class.forName(driver);
            // Tenemos que conectar
            Connection miConexion = DriverManager.getConnection(jdbcUrl, usuario, contra);
            // cerramos la conexion
            miConexion.close();

        } catch (Exception ex) {
            ex.printStackTrace();
        }

    }
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Ahora ya en Java pasaremos a crear las clases, comenzaremos creando el controlador&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Clase: Controlador&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
@Controller
@RequestMapping("/cliente")
public class Controlador {

    @RequestMapping("/lista")
    public String listaClientes(Model modelo) {

        return "lista-clientes";
    }

}

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Ahora tenemos que representar la entidad (entity) Cliente&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Clase entidad Cliente&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;@Entity - esto se trata de una entidad&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;@Table("cliente") - tabla que hara el mapeo&lt;br&gt;
&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;@Entity
@Table(name = "cliente")
public class Cliente {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name="id")
    private int id;

    @Column(name="nombre")
    private String nombre;

    @Column(name="apellido")
    private String apellido;

    @Column(name="email")
    private String email;

    public Cliente() {
        super();
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getNombre() {
        return nombre;
    }

    public void setNombre(String nombre) {
        this.nombre = nombre;
    }

    public String getApellido() {
        return apellido;
    }

    public void setApellido(String apellido) {
        this.apellido = apellido;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    @Override
    public String toString() {
        return "Cliente [id=" + id + ", nombre=" + nombre + ", apellido=" + apellido + ", email=" + email + "]";
    }




}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;             CONTROLADOR - DAO
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvyhebboitgl6whsnamqg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvyhebboitgl6whsnamqg.png" alt=" " width="570" height="285"&gt;&lt;/a&gt;&lt;br&gt;
Creamos una clase interface ClienteDAO para acceder a la BBDD:&lt;br&gt;
Al crear la interfaz nos permitirá a través de una anotación (Spring) hacer una inyección de dependencias&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;public interface ClienteDAO {
//Esta interfaz me devuelva una lista con todos los clientes
    public List&amp;lt;Cliente&amp;gt; getClientes();


}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Creamos la clase que implementara la interface&lt;br&gt;
Declaramos el SessionFactory ya configurado en nuestro fichero.&lt;br&gt;
&lt;strong&gt;@Autowired&lt;/strong&gt; nos hara una inyección de dependencias de tipo SessionFactory.&lt;br&gt;
&lt;strong&gt;@Transactional&lt;/strong&gt; Nos permite simplificar la transacción (begin,commit).&lt;br&gt;
&lt;strong&gt;@Repository&lt;/strong&gt; Para que sea registrado en Spring como un bean.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;@Repository
public class ClienteDAOclase implements ClienteDAO {
    // Crear una lista que almacene objetos de tipos clientes en este caso
    // implementamos de la infertaz
    @Override
    @Transactional
    public List&amp;lt;Cliente&amp;gt; getClientes() {
        // 3 pasos:
        // Obtener la sesion
        Session miSession = sessionFactory.getCurrentSession();
        // Crear la consulta(query) para obtener informacion de la base de datos
        Query&amp;lt;Cliente&amp;gt; miQuery = miSession.createQuery("from Cliente", Cliente.class);
        // Ejecutar la query y devolver los resultados
        List&amp;lt;Cliente&amp;gt; clientes = miQuery.getResultList();

        return clientes;
    }

    @Autowired
    private SessionFactory sessionFactory;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Volvemos a la clase Controlador a hacer la inyeccion de dependencias&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;@Controller
@RequestMapping("/cliente")
public class Controlador {
    // indicamos con autowired que haremos una inyeccion de dependencias
    @Autowired
    private ClienteDAO clienteDAO;

    @RequestMapping("/lista")
    public String listaClientes(Model elModelo) {

        // Obtener los clientes desde el DAO
        List&amp;lt;Cliente&amp;gt; losClientes = clienteDAO.getClientes();
        // Agregar los clientes que hemos obtenidos del clienteDAO al modelo
        elModelo.addAllAttributes(losClientes);

        return "lista-clientes";
    }

}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Creamos el JSP para que nos devuelva los nombres, apellidos y email de la base de datos&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;body&amp;gt;
    &amp;lt;table border="1"&amp;gt;
    &amp;lt;tr&amp;gt;
    &amp;lt;th&amp;gt;nombre &amp;lt;/th&amp;gt;
    &amp;lt;th&amp;gt;apellido&amp;lt;/th&amp;gt;
    &amp;lt;th&amp;gt;email&amp;lt;/th&amp;gt;

    &amp;lt;/tr&amp;gt;  

        &amp;lt;c:forEach var="clienteTemp" items="${clientes}"&amp;gt;


            &amp;lt;tr&amp;gt;
                &amp;lt;td&amp;gt;${clienteTemp.nombre}&amp;lt;/td&amp;gt;
                &amp;lt;td&amp;gt;${clienteTemp.apellido}&amp;lt;/td&amp;gt;
                &amp;lt;td&amp;gt;${clienteTemp.email}&amp;lt;/td&amp;gt;
            &amp;lt;/tr&amp;gt;

        &amp;lt;/c:forEach&amp;gt;
    &amp;lt;/table&amp;gt;

&amp;lt;/body&amp;gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7z7yio13ftvas06vvcux.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7z7yio13ftvas06vvcux.png" alt=" " width="800" height="187"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>java</category>
      <category>spanish</category>
    </item>
    <item>
      <title>Servlets en Java</title>
      <dc:creator>devjov</dc:creator>
      <pubDate>Fri, 22 Jul 2022 23:11:00 +0000</pubDate>
      <link>https://dev.to/devjov/servlets-en-java-3a4j</link>
      <guid>https://dev.to/devjov/servlets-en-java-3a4j</guid>
      <description>&lt;p&gt;Los &lt;strong&gt;servlets&lt;/strong&gt; son módulos escritos en java que se utilizan en un servidor que puede ser o no ser servidor web, para extender sus capacidades de respuesta a los clientes al utilizar las potencialidades de Java.&lt;br&gt;
&lt;strong&gt;Propiedades:&lt;/strong&gt;&lt;br&gt;
&lt;em&gt;&lt;strong&gt;Manejo de Sesiones:&lt;/strong&gt;&lt;/em&gt; Se puede hacer seguimiento de usuarios a través de distintos servlets a través de la creación de sesiones.&lt;br&gt;
&lt;em&gt;&lt;strong&gt;Utilizacion de Cookies:&lt;/strong&gt;&lt;/em&gt; Las cookies son pequeños datos en texto plano que pueden ser guardados en el cliente. La API de servlets permite un manejo fácil y limpio de ellas.&lt;br&gt;
&lt;em&gt;&lt;strong&gt;Multi-thread:&lt;/strong&gt;&lt;/em&gt; Los servets soportan el acceso concurrente de los clientes, aunque hay que tener especial cuidado con las variables compartidas a menos que se utilize la interfaz &lt;em&gt;SingleThreadModel&lt;/em&gt;.&lt;br&gt;
&lt;em&gt;&lt;strong&gt;Programación en Java:&lt;/strong&gt;&lt;/em&gt; Se obtienen las características de multiplataforma o acceso a APIs como JDBC, RMI, etc.&lt;br&gt;
&lt;strong&gt;El ciclo de vida de un Servlet&lt;/strong&gt;&lt;br&gt;
Cada servlet tiene el mismo ciclo de vida:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt; Un servidor carga e inicializa el servlet&lt;/li&gt;
&lt;li&gt; El servlet maneja cero o mas peticiones de cliente.&lt;/li&gt;
&lt;li&gt; El servidor elimina el servlet.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>tutorial</category>
      <category>webdev</category>
      <category>java</category>
    </item>
    <item>
      <title>La API Java</title>
      <dc:creator>devjov</dc:creator>
      <pubDate>Wed, 20 Jul 2022 17:44:50 +0000</pubDate>
      <link>https://dev.to/devjov/la-api-java-2415</link>
      <guid>https://dev.to/devjov/la-api-java-2415</guid>
      <description>&lt;p&gt;La API de Java contiene una colección de componentes de software prefabricados que proporcionan numerosas funcionalidades&lt;br&gt;
&lt;strong&gt;Las API Java se dividen en tres categorías:&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;&lt;em&gt;Las API básicas&lt;/em&gt;&lt;/strong&gt;&lt;br&gt;
Las API básicas permiten gestionar:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;elementos esenciales como los objetos, las cadenas de caracteres, los números, entradas/salidas y mucho mas...&lt;/li&gt;
&lt;li&gt;los applets Java en el entorno del navegador web.&lt;/li&gt;
&lt;li&gt;la red, con protocoles estándar tales como FTP, HTTP, UDP, TCP/IP mas la URL y la manipulación de sockets.&lt;/li&gt;
&lt;li&gt;interfaz con código nativo.&lt;/li&gt;
&lt;li&gt;la seguridad.&lt;/li&gt;
&lt;li&gt;la creación de componentes de software llamados JavaBeans reutilizables y capaces de comunicarse con otras arquitecturas de componentes.&lt;/li&gt;
&lt;li&gt;la manipulación de datos XML entre mas.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;&lt;strong&gt;Las API de acceso a los datos y de integración con lo existente.&lt;/strong&gt;&lt;/em&gt;&lt;br&gt;
Las API de integración permiten gestionar.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;aplicaciones cliente/servidor.&lt;/li&gt;
&lt;li&gt;acceso a casi a 100% de las bases de datos, mediante la API JDBC.&lt;/li&gt;
&lt;li&gt;el acceso a los datos almacenados en servicios de directorio del protocolo LDAP.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Las API de gestión de la interfaz de las aplicaciones con el usuario.&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Las API de gestión de la interfaz usuario permiten gestionar:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;el diseño de interfaces graficas.&lt;/li&gt;
&lt;li&gt;el sonido, con la manipulación, la lectura y la creación de archivos de sonido.&lt;/li&gt;
&lt;li&gt;las operaciones graficas de dibujo con la API Java 2D.&lt;/li&gt;
&lt;li&gt;la Accessibility que permite interactuar.&lt;/li&gt;
&lt;li&gt;trabajos de impresión de datos.&lt;/li&gt;
&lt;li&gt;el desplazamiento o traslado d e datos durante una operación.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>java</category>
      <category>api</category>
      <category>read</category>
    </item>
    <item>
      <title>Java 🙌</title>
      <dc:creator>devjov</dc:creator>
      <pubDate>Wed, 20 Jul 2022 01:18:23 +0000</pubDate>
      <link>https://dev.to/devjov/java-48e5</link>
      <guid>https://dev.to/devjov/java-48e5</guid>
      <description>&lt;p&gt;Un lenguaje sencillo, orientado a objetos, interpretado, robusto, securizado, independiente de las arquitecturas, portable, eficaz, dinámico.&lt;br&gt;
&lt;strong&gt;-Fundamentos del lenguaje&lt;/strong&gt; 📖&lt;br&gt;
&lt;em&gt;Las variables&lt;/em&gt;&lt;br&gt;
Las variables nos permiten almacenar en memoria diferentes valores útiles para el funcionamiento de nuestra aplicación durante su ejecución.&lt;br&gt;
Java dispone de 2 categorías de tipos de variables:&lt;br&gt;
🚩Los tipos por valor: la variable contiene realmente la información&lt;br&gt;
🚩Los tipos por referencia: la variable contiene la dirección de memoria donde contiene la información&lt;/p&gt;

</description>
      <category>java</category>
      <category>programming</category>
    </item>
    <item>
      <title>Spring</title>
      <dc:creator>devjov</dc:creator>
      <pubDate>Tue, 19 Jul 2022 18:36:56 +0000</pubDate>
      <link>https://dev.to/devjov/spring-2ada</link>
      <guid>https://dev.to/devjov/spring-2ada</guid>
      <description>&lt;p&gt;&lt;strong&gt;Spring&lt;/strong&gt; es el framework mas popular para crear aplicaciones Java.&lt;br&gt;
A que llamamos framework?&lt;br&gt;
A un entorno de trabajo que esta compuesto por reglas y herramientas que facilitan enormemente el desarrollo de aplicaciones.&lt;br&gt;
Spring es la alternativa al desarrollo de aplicaciones JEE&lt;br&gt;
Una característica principal de Spring:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Mas simple y ligero
Porque Spring?
Spring se creo para desarrollar las dificultades que daba javaEE
Las características de EJB Y Spring son similares.
&lt;strong&gt;Recomendaciones para una ruta Spring&lt;/strong&gt;
Aprender -&amp;gt; JEE -&amp;gt; EJB Y Spring &amp;lt;3 &lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>java</category>
    </item>
  </channel>
</rss>
