[{"data":1,"prerenderedAt":2292},["ShallowReactive",2],{"navigation_docs":3,"-datos-dao":298,"-datos-dao-surround":2287},[4,18,70,105,149,178,212,257],{"title":5,"path":6,"stem":7,"children":8,"icon":17},"Evaluación","\u002Fintroduction","1.introduction\u002F1.index",[9,12],{"title":10,"path":6,"stem":7,"icon":11},"Método de Evaluación","i-iconamoon-cheque-bold",{"title":13,"path":14,"stem":15,"icon":16},"Plataforma de Aprendizaje","\u002Fintroduction\u002Fplataforma","1.introduction\u002F2.plataforma","i-lucide-book-marked","i-lucide-house",{"title":19,"path":20,"stem":21,"children":22,"icon":25},"Interfaz Gráfica de Usuario","\u002Fgui","2.gui\u002F01.index",[23,26,30,34,38,42,46,50,54,58,62,66],{"title":24,"path":20,"stem":21,"icon":25},"¿Qué es una Interfaz Gráfica de Usuario (GUI)?","i-carbon-gui-management",{"title":27,"path":28,"stem":29,"icon":25},"Creación de Interfaces Gráficas de Usuario (GUI)","\u002Fgui\u002Fbuild-gui","2.gui\u002F02.build-gui",{"title":31,"path":32,"stem":33,"icon":25},"Componentes Básicos de Swing","\u002Fgui\u002Fcomponentes-basicos","2.gui\u002F03.componentes-basicos",{"title":35,"path":36,"stem":37},"El componente JFrame","\u002Fgui\u002Fjframe","2.gui\u002F04.jframe",{"title":39,"path":40,"stem":41},"El componente JPanel","\u002Fgui\u002Fjpanel","2.gui\u002F05.jpanel",{"title":43,"path":44,"stem":45},"El componente JButton","\u002Fgui\u002Fjbutton","2.gui\u002F06.jbutton",{"title":47,"path":48,"stem":49,"icon":25},"Elementos de texto en interfaces gráficas con Swing","\u002Fgui\u002Ftext","2.gui\u002F07.text",{"title":51,"path":52,"stem":53},"Elementos Visuales","\u002Fgui\u002Felementos-visuales","2.gui\u002F08.elementos-visuales",{"title":55,"path":56,"stem":57,"icon":25},"Eventos en Swing","\u002Fgui\u002Feventos","2.gui\u002F09.eventos",{"title":59,"path":60,"stem":61,"icon":25},"Controles en Swing","\u002Fgui\u002Fcontroles","2.gui\u002F10.controles",{"title":63,"path":64,"stem":65,"icon":25},"Atributos Comunes de los Componentes de Diseño","\u002Fgui\u002Fatributos-comunes","2.gui\u002F11.atributos-comunes",{"title":67,"path":68,"stem":69,"icon":25},"Layouts","\u002Fgui\u002Flayout","2.gui\u002F12.layout",{"title":71,"icon":25,"path":72,"stem":73,"children":74,"page":104},"Personalización","\u002Fpersonalizacion","3.personalizacion",[75,79,84,88,92,96,100],{"title":76,"path":77,"stem":78},"Jerarquía de clases en Swing","\u002Fpersonalizacion\u002Fjerarquia","3.personalizacion\u002F01.jerarquia",{"title":80,"path":81,"stem":82,"icon":83},"Personalización Inicial de Componentes Swing","\u002Fpersonalizacion\u002Fpersonalizacion-inicial","3.personalizacion\u002F02.personalizacion-inicial","i-carbon-palette",{"title":85,"path":86,"stem":87,"icon":83},"Tema y Personalización Avanzada en Swing","\u002Fpersonalizacion\u002Ftheme","3.personalizacion\u002F03.theme",{"title":89,"path":90,"stem":91,"icon":83},"Pintando en Swing","\u002Fpersonalizacion\u002Fpaint","3.personalizacion\u002F04.paint",{"title":93,"path":94,"stem":95,"icon":83},"Mi Tema 1: Comenzando con la Personalización","\u002Fpersonalizacion\u002Ftheme-start","3.personalizacion\u002F05.theme-start",{"title":97,"path":98,"stem":99,"icon":83},"UI Delegates: Personalizando la Apariencia de los Componentes","\u002Fpersonalizacion\u002Fui-delegates","3.personalizacion\u002F06.ui-delegates",{"title":101,"path":102,"stem":103,"icon":83},"Empleado delegadores de UI para personalizar la apariencia de los componentes","\u002Fpersonalizacion\u002Ftheme-02","3.personalizacion\u002F07.theme-02",false,{"title":106,"path":107,"stem":108,"children":109,"icon":148},"Programación concurrente","\u002Fconcurrencia","4.concurrencia\u002F01.index",[110,112,116,120,124,128,132,136,140,144],{"title":111,"path":107,"stem":108,"icon":83},"¿Qué es la concurrencia?",{"title":113,"path":114,"stem":115,"icon":83},"Unidades de Ejecución","\u002Fconcurrencia\u002Funidades-ejecucion","4.concurrencia\u002F02.unidades-ejecucion",{"title":117,"path":118,"stem":119,"icon":83},"Programa de flujo único y de flujo múltiple","\u002Fconcurrencia\u002Fflujos","4.concurrencia\u002F03.flujos",{"title":121,"path":122,"stem":123,"icon":83},"Hilos con Thread y Runnable","\u002Fconcurrencia\u002Fthread-runnable","4.concurrencia\u002F04.thread-runnable",{"title":125,"path":126,"stem":127},"Paralelismo V.S. Concurrencia","\u002Fconcurrencia\u002Fparalelismo","4.concurrencia\u002F05.paralelismo",{"title":129,"path":130,"stem":131,"icon":83},"Problemas clásicos de concurrencia","\u002Fconcurrencia\u002Fproblemas","4.concurrencia\u002F06.problemas",{"title":133,"path":134,"stem":135,"icon":83},"Emulando condiciones de carrera en Java","\u002Fconcurrencia\u002Fcondiciones-carrera","4.concurrencia\u002F07.condiciones-carrera",{"title":137,"path":138,"stem":139,"icon":83},"Semáforos en Java","\u002Fconcurrencia\u002Fsemaforos","4.concurrencia\u002F08.semaforos",{"title":141,"path":142,"stem":143,"icon":83},"La clase Timer en Java Swing","\u002Fconcurrencia\u002Ftimer","4.concurrencia\u002F09.timer",{"title":145,"path":146,"stem":147,"icon":83},"Algoritmos de ordenamiento de procesos","\u002Fconcurrencia\u002Falgoritmos-procesos","4.concurrencia\u002F10.algoritmos-procesos","i-carbon-parallel-groups",{"title":150,"path":151,"stem":152,"children":153,"icon":177},"Acceso a datos","\u002Fdatos","5.datos\u002F01.index",[154,157,161,165,169,173],{"title":155,"path":151,"stem":152,"icon":156},"Java y las bases de datos","i-carbon-database",{"title":158,"path":159,"stem":160},"Cliente Servidor","\u002Fdatos\u002Fcliente-servidor","5.datos\u002F02.cliente-servidor",{"title":162,"path":163,"stem":164},"CRUD","\u002Fdatos\u002Fcrud","5.datos\u002F03.crud",{"title":166,"path":167,"stem":168},"Sentencias Preparadas con JDBC","\u002Fdatos\u002Fsentencia-preparada","5.datos\u002F04.sentencia-preparada",{"title":170,"path":171,"stem":172},"DAO (Data Access Object)","\u002Fdatos\u002Fdao","5.datos\u002F05.dao",{"title":174,"path":175,"stem":176},"Usando Hibernate ORM","\u002Fdatos\u002Form","5.datos\u002F06.orm","i-gravity-ui-database-fill",{"title":179,"path":180,"stem":181,"children":182,"icon":211},"Programación móvil","\u002Fmovil","6.movil\u002F01.index",[183,186,191,195,199,203,207],{"title":184,"path":180,"stem":181,"icon":185},"¿Qué es Android y Kotlin?","i-carbon-mobile",{"title":187,"path":188,"stem":189,"icon":190},"¿Qué es Android Studio?","\u002Fmovil\u002Fandroid-studio","6.movil\u002F02.android-studio","i-carbon-application",{"title":192,"path":193,"stem":194,"icon":190},"¿Qué es Jetpack Compose?","\u002Fmovil\u002Fjetpack-compose","6.movil\u002F03.jetpack-compose",{"title":196,"path":197,"stem":198},"Filas y Columnas con Jetpack Compose","\u002Fmovil\u002Ffilas-columnas","6.movil\u002F04.filas-columnas",{"title":200,"path":201,"stem":202,"icon":190},"Componentes Básicos en Jetpack Compose","\u002Fmovil\u002Fcomponentes-basicos","6.movil\u002F05.componentes-basicos",{"title":204,"path":205,"stem":206,"icon":190},"Las Intenciones en Android con Jetpack Compose","\u002Fmovil\u002Fintentions","6.movil\u002F06.intentions",{"title":208,"path":209,"stem":210,"icon":190},"Navegación en Android con Jetpack Compose","\u002Fmovil\u002Fnavegacion","6.movil\u002F07.navegacion","phone_android",{"title":213,"icon":25,"path":214,"stem":215,"children":216,"page":104},"Ejemplos","\u002Fejemplos","7.ejemplos",[217,221,225,229,233,237,241,245,249,253],{"title":218,"path":219,"stem":220},"Ejemplo 01: Creando un validador abstracto de expresiones","\u002Fejemplos\u002Fejemplo-01","7.ejemplos\u002F01.ejemplo-01",{"title":222,"path":223,"stem":224},"Ejemplo 02: Diferencias de validar un JTextField y un JFormattedTextField","\u002Fejemplos\u002Fejemplo-02","7.ejemplos\u002F02.ejemplo-02",{"title":226,"path":227,"stem":228},"Ejemplo 03: Creando una Aplicación con GUI en Java Swing","\u002Fejemplos\u002Fejemplo-03","7.ejemplos\u002F03.ejemplo-03",{"title":230,"path":231,"stem":232},"Ejemplo 4: Estilizando componentes Swing con Delegadores","\u002Fejemplos\u002Fejemplo-04","7.ejemplos\u002F04.ejemplo-04",{"title":234,"path":235,"stem":236,"icon":83},"Ejemplo 5: Uso de Hilos con Thread y Runnable","\u002Fejemplos\u002Fejemplo-05","7.ejemplos\u002F05.ejemplo-05",{"title":238,"path":239,"stem":240,"icon":83},"Ejemplo 06: Manejando Hilos de formas Diferentes en Java","\u002Fejemplos\u002Fejemplo-06","7.ejemplos\u002F06.ejemplo-06",{"title":242,"path":243,"stem":244,"icon":83},"Ejemplo 7: Condiciones de carrera en Java","\u002Fejemplos\u002Fejemplo-07","7.ejemplos\u002F07.ejemplo-07",{"title":246,"path":247,"stem":248,"icon":83},"Ejemplo 8: Control de acceso a recursos compartidos con semáforos","\u002Fejemplos\u002Fejemplo-08","7.ejemplos\u002F08.ejemplo-08",{"title":250,"path":251,"stem":252,"icon":83},"Ejemplo 9: El restaurante y los pedidos","\u002Fejemplos\u002Fejemplo-09","7.ejemplos\u002F09.ejemplo-09",{"title":254,"path":255,"stem":256},"Ejemplo 10: Proceso FIFO (First In, First Out) con Semáforos y Swing","\u002Fejemplos\u002Fejemplo-10","7.ejemplos\u002F10.ejemplo-10",{"title":258,"icon":25,"path":259,"stem":260,"children":261,"page":104},"Actividades","\u002Factividades","8.actividades",[262,266,270,274,278,282,286,290,294],{"title":263,"path":264,"stem":265,"icon":25},"Actividad 1: Introducción al diseño de interfaces","\u002Factividades\u002Fact-01","8.actividades\u002F01.act-01",{"title":267,"path":268,"stem":269,"icon":25},"Actividad 2: Diseño de wireframes y prototipos","\u002Factividades\u002Fact-02","8.actividades\u002F02.act-02",{"title":271,"path":272,"stem":273,"icon":25},"Actividad 3: Propuesta de Proyecto y Wireframe inicial","\u002Factividades\u002Fact-03","8.actividades\u002F03.act-03",{"title":275,"path":276,"stem":277,"icon":83},"Actividad 4: Temas y Componentes Personalizados en Swing","\u002Factividades\u002Fact-04","8.actividades\u002F04.act-04",{"title":279,"path":280,"stem":281,"icon":83},"Actividad 5: Explicando la Concurrencia a un Niño de 5 Años","\u002Factividades\u002Fact-05","8.actividades\u002F05.act-05",{"title":283,"path":284,"stem":285,"icon":83},"Actividad 6: Simulación de una cocina con múltiples chefs (hilos)","\u002Factividades\u002Fact-06","8.actividades\u002F06.act-06",{"title":287,"path":288,"stem":289,"icon":83},"Actividad 7: Sistema de retiro bancario","\u002Factividades\u002Fact-07","8.actividades\u002F07.act-07",{"title":291,"path":292,"stem":293,"icon":83},"Actividad 8: Simulación de Round Robin con hilos e Interfaz Gráfica","\u002Factividades\u002Fact-08","8.actividades\u002F08.act-08",{"title":295,"path":296,"stem":297,"icon":83},"Actividad 9: CRUD con Hibernate y Swing","\u002Factividades\u002Fact-09","8.actividades\u002F09.act-09",{"id":299,"title":170,"body":300,"description":2281,"extension":2282,"links":2283,"meta":2284,"navigation":599,"path":171,"seo":2285,"stem":172,"__hash__":2286},"docs\u002F5.datos\u002F05.dao.md",{"type":301,"value":302,"toc":2270},"minimark",[303,308,312,316,351,355,2259,2263,2266],[304,305,307],"h2",{"id":306},"qué-es-el-patrón-dao","¿Qué es el patrón DAO?",[309,310,311],"p",{},"El patrón de diseño DAO (Data Access Object) es una arquitectura de software que se utiliza para separar la lógica de acceso a datos de la lógica de negocio en una aplicación. El objetivo principal del patrón DAO es proporcionar una interfaz abstracta para interactuar con la fuente de datos, lo que permite a los desarrolladores cambiar la implementación de acceso a datos sin afectar el resto de la aplicación.",[304,313,315],{"id":314},"beneficios-de-utilizar-el-patrón-dao","Beneficios de utilizar el patrón DAO",[317,318,319,327,333,339,345],"ol",{},[320,321,322,326],"li",{},[323,324,325],"strong",{},"Separación de responsabilidades",": El patrón DAO ayuda a mantener una clara separación entre la lógica de acceso a datos y la lógica de negocio, lo que mejora la organización del código y facilita su mantenimiento.",[320,328,329,332],{},[323,330,331],{},"Reutilización de código",": Al centralizar el acceso a datos en un solo lugar, el patrón DAO permite reutilizar el código de acceso a datos en diferentes partes de la aplicación, lo que reduce la duplicación de código.",[320,334,335,338],{},[323,336,337],{},"Facilidad de pruebas",": El patrón DAO facilita la realización de pruebas unitarias al permitir la creación de objetos DAO simulados (mock) que pueden ser utilizados para probar la lógica de negocio sin depender de la base de datos real.",[320,340,341,344],{},[323,342,343],{},"Flexibilidad",": El patrón DAO permite cambiar la implementación de acceso a datos (por ejemplo, cambiar de una base de datos relacional a una base de datos NoSQL) sin afectar el resto de la aplicación, lo que proporciona una mayor flexibilidad en el desarrollo.",[320,346,347,350],{},[323,348,349],{},"Mantenimiento",": Al centralizar el acceso a datos en un solo lugar, el patrón DAO facilita la gestión y el mantenimiento del código de acceso a datos, lo que puede reducir el tiempo y el esfuerzo necesarios para realizar cambios o corregir errores.",[304,352,354],{"id":353},"cómo-implementar-el-patrón-dao-en-java","Cómo implementar el patrón DAO en Java",[356,357,359,363,366,541,545,552,611,615,618,833,837,847,1860,1864,1870],"steps",{"level":358},"2",[304,360,362],{"id":361},"crear-una-interfaz-dao","Crear una interfaz DAO",[309,364,365],{},"Lo primero que deberemos hacer es definir una interfaz DAO que declare los métodos para las operaciones de acceso a datos y podremos usar elementos genéricos para hacerla más flexible.",[367,368,373],"pre",{"className":369,"code":370,"language":371,"meta":372,"style":372},"language-java shiki shiki-themes github-dark","public interface DAO\u003CT> {\n    void create(T entity);\n    T read(int id);\n    List\u003CT> readAll();\n    List\u003CT> readByPredicate(Predicate\u003CT> predicate);\n    void update(T entity);\n    void delete(int id);\n    T parseResultSet(ResultSet resultSet) throws SQLException;\n}\n","java","",[374,375,376,402,421,441,458,482,496,512,535],"code",{"__ignoreMap":372},[377,378,381,385,388,392,396,399],"span",{"class":379,"line":380},"line",1,[377,382,384],{"class":383},"snl16","public",[377,386,387],{"class":383}," interface",[377,389,391],{"class":390},"svObZ"," DAO",[377,393,395],{"class":394},"s95oV","\u003C",[377,397,398],{"class":383},"T",[377,400,401],{"class":394},"> {\n",[377,403,405,408,411,414,418],{"class":379,"line":404},2,[377,406,407],{"class":383},"    void",[377,409,410],{"class":390}," create",[377,412,413],{"class":394},"(T ",[377,415,417],{"class":416},"s9osk","entity",[377,419,420],{"class":394},");\n",[377,422,424,427,430,433,436,439],{"class":379,"line":423},3,[377,425,426],{"class":394},"    T ",[377,428,429],{"class":390},"read",[377,431,432],{"class":394},"(",[377,434,435],{"class":383},"int",[377,437,438],{"class":416}," id",[377,440,420],{"class":394},[377,442,444,447,449,452,455],{"class":379,"line":443},4,[377,445,446],{"class":394},"    List\u003C",[377,448,398],{"class":383},[377,450,451],{"class":394},"> ",[377,453,454],{"class":390},"readAll",[377,456,457],{"class":394},"();\n",[377,459,461,463,465,467,470,473,475,477,480],{"class":379,"line":460},5,[377,462,446],{"class":394},[377,464,398],{"class":383},[377,466,451],{"class":394},[377,468,469],{"class":390},"readByPredicate",[377,471,472],{"class":394},"(Predicate\u003C",[377,474,398],{"class":383},[377,476,451],{"class":394},[377,478,479],{"class":416},"predicate",[377,481,420],{"class":394},[377,483,485,487,490,492,494],{"class":379,"line":484},6,[377,486,407],{"class":383},[377,488,489],{"class":390}," update",[377,491,413],{"class":394},[377,493,417],{"class":416},[377,495,420],{"class":394},[377,497,499,501,504,506,508,510],{"class":379,"line":498},7,[377,500,407],{"class":383},[377,502,503],{"class":390}," delete",[377,505,432],{"class":394},[377,507,435],{"class":383},[377,509,438],{"class":416},[377,511,420],{"class":394},[377,513,515,517,520,523,526,529,532],{"class":379,"line":514},8,[377,516,426],{"class":394},[377,518,519],{"class":390},"parseResultSet",[377,521,522],{"class":394},"(ResultSet ",[377,524,525],{"class":416},"resultSet",[377,527,528],{"class":394},") ",[377,530,531],{"class":383},"throws",[377,533,534],{"class":394}," SQLException;\n",[377,536,538],{"class":379,"line":537},9,[377,539,540],{"class":394},"}\n",[304,542,544],{"id":543},"crear-las-entidades","Crear las entidades",[309,546,547,548,551],{},"A continuación, debemos crear las clases de entidad que representarán los datos que queremos gestionar. Por ejemplo, si estamos gestionando usuarios, podríamos crear una clase ",[374,549,550],{},"User",":",[367,553,555],{"className":369,"code":554,"language":371,"meta":372,"style":372},"public class User {\n    private int id;\n    private String name;\n    private String email;\n\n    \u002F\u002F Constructor, getters y setters\n}\n",[374,556,557,570,581,588,595,601,607],{"__ignoreMap":372},[377,558,559,561,564,567],{"class":379,"line":380},[377,560,384],{"class":383},[377,562,563],{"class":383}," class",[377,565,566],{"class":390}," User",[377,568,569],{"class":394}," {\n",[377,571,572,575,578],{"class":379,"line":404},[377,573,574],{"class":383},"    private",[377,576,577],{"class":383}," int",[377,579,580],{"class":394}," id;\n",[377,582,583,585],{"class":379,"line":423},[377,584,574],{"class":383},[377,586,587],{"class":394}," String name;\n",[377,589,590,592],{"class":379,"line":443},[377,591,574],{"class":383},[377,593,594],{"class":394}," String email;\n",[377,596,597],{"class":379,"line":460},[377,598,600],{"emptyLinePlaceholder":599},true,"\n",[377,602,603],{"class":379,"line":484},[377,604,606],{"class":605},"sAwPA","    \u002F\u002F Constructor, getters y setters\n",[377,608,609],{"class":379,"line":498},[377,610,540],{"class":394},[304,612,614],{"id":613},"crear-una-clase-de-conexión-a-la-base-de-datos","Crear una clase de conexión a la base de datos",[309,616,617],{},"Para asegurarnos que la conexión sea única y segura, aplicaremos el patrón Singleton para crear una clase que gestione la conexión a la base de datos:",[367,619,621],{"className":369,"code":620,"language":371,"meta":372,"style":372},"public class DatabaseConnection {\n    private static DatabaseConnection instance;\n    private Connection connection;\n    private String url = \"jdbc:mysql:\u002F\u002Flocalhost:3306\u002Fmydatabase\";\n\n    private DatabaseConnection() throws SQLException {\n        try {\n            Class.forName(\"com.mysql.cj.jdbc.Driver\");\n            this.connection = DriverManager.getConnection(url, \"username\", \"password\");\n        } catch (ClassNotFoundException ex) {\n            System.out.println(\"Database Connection Creation Failed : \" + ex.getMessage());\n        }\n    }\n\n    public Connection getConnection() {\n        return connection;\n    }\n}\n",[374,622,623,634,644,651,668,672,686,693,708,739,757,783,789,795,800,814,823,828],{"__ignoreMap":372},[377,624,625,627,629,632],{"class":379,"line":380},[377,626,384],{"class":383},[377,628,563],{"class":383},[377,630,631],{"class":390}," DatabaseConnection",[377,633,569],{"class":394},[377,635,636,638,641],{"class":379,"line":404},[377,637,574],{"class":383},[377,639,640],{"class":383}," static",[377,642,643],{"class":394}," DatabaseConnection instance;\n",[377,645,646,648],{"class":379,"line":423},[377,647,574],{"class":383},[377,649,650],{"class":394}," Connection connection;\n",[377,652,653,655,658,661,665],{"class":379,"line":443},[377,654,574],{"class":383},[377,656,657],{"class":394}," String url ",[377,659,660],{"class":383},"=",[377,662,664],{"class":663},"sU2Wk"," \"jdbc:mysql:\u002F\u002Flocalhost:3306\u002Fmydatabase\"",[377,666,667],{"class":394},";\n",[377,669,670],{"class":379,"line":460},[377,671,600],{"emptyLinePlaceholder":599},[377,673,674,676,678,681,683],{"class":379,"line":484},[377,675,574],{"class":383},[377,677,631],{"class":390},[377,679,680],{"class":394},"() ",[377,682,531],{"class":383},[377,684,685],{"class":394}," SQLException {\n",[377,687,688,691],{"class":379,"line":498},[377,689,690],{"class":383},"        try",[377,692,569],{"class":394},[377,694,695,698,701,703,706],{"class":379,"line":514},[377,696,697],{"class":394},"            Class.",[377,699,700],{"class":390},"forName",[377,702,432],{"class":394},[377,704,705],{"class":663},"\"com.mysql.cj.jdbc.Driver\"",[377,707,420],{"class":394},[377,709,710,714,717,719,722,725,728,731,734,737],{"class":379,"line":537},[377,711,713],{"class":712},"sDLfK","            this",[377,715,716],{"class":394},".connection ",[377,718,660],{"class":383},[377,720,721],{"class":394}," DriverManager.",[377,723,724],{"class":390},"getConnection",[377,726,727],{"class":394},"(url, ",[377,729,730],{"class":663},"\"username\"",[377,732,733],{"class":394},", ",[377,735,736],{"class":663},"\"password\"",[377,738,420],{"class":394},[377,740,742,745,748,751,754],{"class":379,"line":741},10,[377,743,744],{"class":394},"        } ",[377,746,747],{"class":383},"catch",[377,749,750],{"class":394}," (ClassNotFoundException ",[377,752,753],{"class":416},"ex",[377,755,756],{"class":394},") {\n",[377,758,760,763,766,768,771,774,777,780],{"class":379,"line":759},11,[377,761,762],{"class":394},"            System.out.",[377,764,765],{"class":390},"println",[377,767,432],{"class":394},[377,769,770],{"class":663},"\"Database Connection Creation Failed : \"",[377,772,773],{"class":383}," +",[377,775,776],{"class":394}," ex.",[377,778,779],{"class":390},"getMessage",[377,781,782],{"class":394},"());\n",[377,784,786],{"class":379,"line":785},12,[377,787,788],{"class":394},"        }\n",[377,790,792],{"class":379,"line":791},13,[377,793,794],{"class":394},"    }\n",[377,796,798],{"class":379,"line":797},14,[377,799,600],{"emptyLinePlaceholder":599},[377,801,803,806,809,811],{"class":379,"line":802},15,[377,804,805],{"class":383},"    public",[377,807,808],{"class":394}," Connection ",[377,810,724],{"class":390},[377,812,813],{"class":394},"() {\n",[377,815,817,820],{"class":379,"line":816},16,[377,818,819],{"class":383},"        return",[377,821,822],{"class":394}," connection;\n",[377,824,826],{"class":379,"line":825},17,[377,827,794],{"class":394},[377,829,831],{"class":379,"line":830},18,[377,832,540],{"class":394},[304,834,836],{"id":835},"implementar-la-interfaz-dao","Implementar la interfaz DAO",[309,838,839,840,843,844,551],{},"Luego, debemos crear una clase que implemente la interfaz DAO y proporcione la lógica de acceso a datos utilizando JDBC u otra tecnología de acceso a datos. Por ejemplo, podríamos crear una clase ",[374,841,842],{},"UserDAO"," que implemente la interfaz ",[374,845,846],{},"DAO\u003CUser>",[367,848,850],{"className":369,"code":849,"language":371,"meta":372,"style":372},"public class UserDAO implements DAO\u003CUser> {\n    private DatabaseConnection connection;  \n\n    public UserDAO(Connection connection) {\n        this.connection = DatabaseConnection.getInstance().getConnection();\n    }\n    \n    @Override\n    public User parseResultSet(ResultSet resultSet) throws SQLException {\n        User user = new User();\n        user.setId(resultSet.getInt(\"id\"));\n        user.setName(resultSet.getString(\"name\"));\n        user.setEmail(resultSet.getString(\"email\"));\n        return user;\n    }\n\n    @Override\n    public void create(User user) {\n        String sql = \"INSERT INTO users (name, email) VALUES (?, ?)\";\n        try (PreparedStatement preparedStatement = connection.prepareStatement(sql)) {\n            preparedStatement.setString(1, user.getName());\n            preparedStatement.setString(2, user.getEmail());\n            preparedStatement.executeUpdate();\n        } catch (SQLException e) {\n            e.printStackTrace();\n        }\n    }\n\n    @Override\n    public void update(User user) {\n        String sql = \"UPDATE users SET name = ?, email = ? WHERE id = ?\";\n        try (PreparedStatement preparedStatement = connection.prepareStatement(sql)) {\n            preparedStatement.setString(1, user.getName());\n            preparedStatement.setString(2, user.getEmail());\n            preparedStatement.setInt(3, user.getId());\n            preparedStatement.executeUpdate();\n        } catch (SQLException e) {\n            e.printStackTrace();\n        }\n    }\n\n    @Override\n    public User read(int id) {\n        String sql = \"SELECT * FROM users WHERE id = ?\";\n        try (PreparedStatement preparedStatement = connection.prepareStatement(sql)) {\n            preparedStatement.setInt(1, id);\n            ResultSet resultSet = preparedStatement.executeQuery();\n            if (resultSet.next()) {\n                return parseResultSet(resultSet);\n            }\n        } catch (SQLException e) {\n            e.printStackTrace();\n        }\n        return null;\n    }\n    \n    @Override\n    public List\u003CUser> readAll() {\n        List\u003CUser> users = new ArrayList\u003C>();\n        String sql = \"SELECT * FROM users\";\n        try (Statement statement = connection.createStatement();\n             ResultSet resultSet = statement.executeQuery(sql)) {\n            while (resultSet.next()) {\n                User user = parseResultSet(resultSet);\n                users.add(user);\n            }\n        } catch (SQLException e) {\n            e.printStackTrace();\n        }\n        return users;\n    }\n    \n    @Override\n    public List\u003CUser> readByPredicate(Predicate\u003CUser> predicate) {\n        List\u003CUser> users = readAll();\n        users.removeIf(predicate.negate());\n        return users;\n    }\n\n    @Override\n    public void delete(int id) {\n        String sql = \"DELETE FROM users WHERE id = ?\";\n        try (PreparedStatement preparedStatement = connection.prepareStatement(sql)) {\n            preparedStatement.setInt(1, id);\n            preparedStatement.executeUpdate();\n        } catch (SQLException e) {\n            e.printStackTrace();\n        }\n    }\n}\n",[374,851,852,872,879,883,897,919,923,928,936,955,969,991,1010,1028,1035,1039,1043,1049,1066,1079,1098,1120,1138,1148,1163,1174,1179,1184,1189,1196,1211,1223,1238,1255,1272,1292,1301,1314,1323,1328,1333,1338,1345,1362,1374,1389,1403,1419,1434,1446,1452,1465,1474,1479,1489,1494,1499,1506,1522,1540,1552,1569,1584,1596,1608,1620,1625,1638,1647,1652,1660,1665,1670,1677,1700,1716,1733,1740,1745,1750,1757,1774,1786,1801,1814,1823,1836,1845,1850,1855],{"__ignoreMap":372},[377,853,854,856,858,861,864,866,868,870],{"class":379,"line":380},[377,855,384],{"class":383},[377,857,563],{"class":383},[377,859,860],{"class":390}," UserDAO",[377,862,863],{"class":383}," implements",[377,865,391],{"class":390},[377,867,395],{"class":394},[377,869,550],{"class":383},[377,871,401],{"class":394},[377,873,874,876],{"class":379,"line":404},[377,875,574],{"class":383},[377,877,878],{"class":394}," DatabaseConnection connection;  \n",[377,880,881],{"class":379,"line":423},[377,882,600],{"emptyLinePlaceholder":599},[377,884,885,887,889,892,895],{"class":379,"line":443},[377,886,805],{"class":383},[377,888,860],{"class":390},[377,890,891],{"class":394},"(Connection ",[377,893,894],{"class":416},"connection",[377,896,756],{"class":394},[377,898,899,902,904,906,909,912,915,917],{"class":379,"line":460},[377,900,901],{"class":712},"        this",[377,903,716],{"class":394},[377,905,660],{"class":383},[377,907,908],{"class":394}," DatabaseConnection.",[377,910,911],{"class":390},"getInstance",[377,913,914],{"class":394},"().",[377,916,724],{"class":390},[377,918,457],{"class":394},[377,920,921],{"class":379,"line":484},[377,922,794],{"class":394},[377,924,925],{"class":379,"line":498},[377,926,927],{"class":394},"    \n",[377,929,930,933],{"class":379,"line":514},[377,931,932],{"class":394},"    @",[377,934,935],{"class":383},"Override\n",[377,937,938,940,943,945,947,949,951,953],{"class":379,"line":537},[377,939,805],{"class":383},[377,941,942],{"class":394}," User ",[377,944,519],{"class":390},[377,946,522],{"class":394},[377,948,525],{"class":416},[377,950,528],{"class":394},[377,952,531],{"class":383},[377,954,685],{"class":394},[377,956,957,960,962,965,967],{"class":379,"line":741},[377,958,959],{"class":394},"        User user ",[377,961,660],{"class":383},[377,963,964],{"class":383}," new",[377,966,566],{"class":390},[377,968,457],{"class":394},[377,970,971,974,977,980,983,985,988],{"class":379,"line":759},[377,972,973],{"class":394},"        user.",[377,975,976],{"class":390},"setId",[377,978,979],{"class":394},"(resultSet.",[377,981,982],{"class":390},"getInt",[377,984,432],{"class":394},[377,986,987],{"class":663},"\"id\"",[377,989,990],{"class":394},"));\n",[377,992,993,995,998,1000,1003,1005,1008],{"class":379,"line":785},[377,994,973],{"class":394},[377,996,997],{"class":390},"setName",[377,999,979],{"class":394},[377,1001,1002],{"class":390},"getString",[377,1004,432],{"class":394},[377,1006,1007],{"class":663},"\"name\"",[377,1009,990],{"class":394},[377,1011,1012,1014,1017,1019,1021,1023,1026],{"class":379,"line":791},[377,1013,973],{"class":394},[377,1015,1016],{"class":390},"setEmail",[377,1018,979],{"class":394},[377,1020,1002],{"class":390},[377,1022,432],{"class":394},[377,1024,1025],{"class":663},"\"email\"",[377,1027,990],{"class":394},[377,1029,1030,1032],{"class":379,"line":797},[377,1031,819],{"class":383},[377,1033,1034],{"class":394}," user;\n",[377,1036,1037],{"class":379,"line":802},[377,1038,794],{"class":394},[377,1040,1041],{"class":379,"line":816},[377,1042,600],{"emptyLinePlaceholder":599},[377,1044,1045,1047],{"class":379,"line":825},[377,1046,932],{"class":394},[377,1048,935],{"class":383},[377,1050,1051,1053,1056,1058,1061,1064],{"class":379,"line":830},[377,1052,805],{"class":383},[377,1054,1055],{"class":383}," void",[377,1057,410],{"class":390},[377,1059,1060],{"class":394},"(User ",[377,1062,1063],{"class":416},"user",[377,1065,756],{"class":394},[377,1067,1069,1072,1074,1077],{"class":379,"line":1068},19,[377,1070,1071],{"class":394},"        String sql ",[377,1073,660],{"class":383},[377,1075,1076],{"class":663}," \"INSERT INTO users (name, email) VALUES (?, ?)\"",[377,1078,667],{"class":394},[377,1080,1082,1084,1087,1089,1092,1095],{"class":379,"line":1081},20,[377,1083,690],{"class":383},[377,1085,1086],{"class":394}," (PreparedStatement preparedStatement ",[377,1088,660],{"class":383},[377,1090,1091],{"class":394}," connection.",[377,1093,1094],{"class":390},"prepareStatement",[377,1096,1097],{"class":394},"(sql)) {\n",[377,1099,1101,1104,1107,1109,1112,1115,1118],{"class":379,"line":1100},21,[377,1102,1103],{"class":394},"            preparedStatement.",[377,1105,1106],{"class":390},"setString",[377,1108,432],{"class":394},[377,1110,1111],{"class":712},"1",[377,1113,1114],{"class":394},", user.",[377,1116,1117],{"class":390},"getName",[377,1119,782],{"class":394},[377,1121,1123,1125,1127,1129,1131,1133,1136],{"class":379,"line":1122},22,[377,1124,1103],{"class":394},[377,1126,1106],{"class":390},[377,1128,432],{"class":394},[377,1130,358],{"class":712},[377,1132,1114],{"class":394},[377,1134,1135],{"class":390},"getEmail",[377,1137,782],{"class":394},[377,1139,1141,1143,1146],{"class":379,"line":1140},23,[377,1142,1103],{"class":394},[377,1144,1145],{"class":390},"executeUpdate",[377,1147,457],{"class":394},[377,1149,1151,1153,1155,1158,1161],{"class":379,"line":1150},24,[377,1152,744],{"class":394},[377,1154,747],{"class":383},[377,1156,1157],{"class":394}," (SQLException ",[377,1159,1160],{"class":416},"e",[377,1162,756],{"class":394},[377,1164,1166,1169,1172],{"class":379,"line":1165},25,[377,1167,1168],{"class":394},"            e.",[377,1170,1171],{"class":390},"printStackTrace",[377,1173,457],{"class":394},[377,1175,1177],{"class":379,"line":1176},26,[377,1178,788],{"class":394},[377,1180,1182],{"class":379,"line":1181},27,[377,1183,794],{"class":394},[377,1185,1187],{"class":379,"line":1186},28,[377,1188,600],{"emptyLinePlaceholder":599},[377,1190,1192,1194],{"class":379,"line":1191},29,[377,1193,932],{"class":394},[377,1195,935],{"class":383},[377,1197,1199,1201,1203,1205,1207,1209],{"class":379,"line":1198},30,[377,1200,805],{"class":383},[377,1202,1055],{"class":383},[377,1204,489],{"class":390},[377,1206,1060],{"class":394},[377,1208,1063],{"class":416},[377,1210,756],{"class":394},[377,1212,1214,1216,1218,1221],{"class":379,"line":1213},31,[377,1215,1071],{"class":394},[377,1217,660],{"class":383},[377,1219,1220],{"class":663}," \"UPDATE users SET name = ?, email = ? WHERE id = ?\"",[377,1222,667],{"class":394},[377,1224,1226,1228,1230,1232,1234,1236],{"class":379,"line":1225},32,[377,1227,690],{"class":383},[377,1229,1086],{"class":394},[377,1231,660],{"class":383},[377,1233,1091],{"class":394},[377,1235,1094],{"class":390},[377,1237,1097],{"class":394},[377,1239,1241,1243,1245,1247,1249,1251,1253],{"class":379,"line":1240},33,[377,1242,1103],{"class":394},[377,1244,1106],{"class":390},[377,1246,432],{"class":394},[377,1248,1111],{"class":712},[377,1250,1114],{"class":394},[377,1252,1117],{"class":390},[377,1254,782],{"class":394},[377,1256,1258,1260,1262,1264,1266,1268,1270],{"class":379,"line":1257},34,[377,1259,1103],{"class":394},[377,1261,1106],{"class":390},[377,1263,432],{"class":394},[377,1265,358],{"class":712},[377,1267,1114],{"class":394},[377,1269,1135],{"class":390},[377,1271,782],{"class":394},[377,1273,1275,1277,1280,1282,1285,1287,1290],{"class":379,"line":1274},35,[377,1276,1103],{"class":394},[377,1278,1279],{"class":390},"setInt",[377,1281,432],{"class":394},[377,1283,1284],{"class":712},"3",[377,1286,1114],{"class":394},[377,1288,1289],{"class":390},"getId",[377,1291,782],{"class":394},[377,1293,1295,1297,1299],{"class":379,"line":1294},36,[377,1296,1103],{"class":394},[377,1298,1145],{"class":390},[377,1300,457],{"class":394},[377,1302,1304,1306,1308,1310,1312],{"class":379,"line":1303},37,[377,1305,744],{"class":394},[377,1307,747],{"class":383},[377,1309,1157],{"class":394},[377,1311,1160],{"class":416},[377,1313,756],{"class":394},[377,1315,1317,1319,1321],{"class":379,"line":1316},38,[377,1318,1168],{"class":394},[377,1320,1171],{"class":390},[377,1322,457],{"class":394},[377,1324,1326],{"class":379,"line":1325},39,[377,1327,788],{"class":394},[377,1329,1331],{"class":379,"line":1330},40,[377,1332,794],{"class":394},[377,1334,1336],{"class":379,"line":1335},41,[377,1337,600],{"emptyLinePlaceholder":599},[377,1339,1341,1343],{"class":379,"line":1340},42,[377,1342,932],{"class":394},[377,1344,935],{"class":383},[377,1346,1348,1350,1352,1354,1356,1358,1360],{"class":379,"line":1347},43,[377,1349,805],{"class":383},[377,1351,942],{"class":394},[377,1353,429],{"class":390},[377,1355,432],{"class":394},[377,1357,435],{"class":383},[377,1359,438],{"class":416},[377,1361,756],{"class":394},[377,1363,1365,1367,1369,1372],{"class":379,"line":1364},44,[377,1366,1071],{"class":394},[377,1368,660],{"class":383},[377,1370,1371],{"class":663}," \"SELECT * FROM users WHERE id = ?\"",[377,1373,667],{"class":394},[377,1375,1377,1379,1381,1383,1385,1387],{"class":379,"line":1376},45,[377,1378,690],{"class":383},[377,1380,1086],{"class":394},[377,1382,660],{"class":383},[377,1384,1091],{"class":394},[377,1386,1094],{"class":390},[377,1388,1097],{"class":394},[377,1390,1392,1394,1396,1398,1400],{"class":379,"line":1391},46,[377,1393,1103],{"class":394},[377,1395,1279],{"class":390},[377,1397,432],{"class":394},[377,1399,1111],{"class":712},[377,1401,1402],{"class":394},", id);\n",[377,1404,1406,1409,1411,1414,1417],{"class":379,"line":1405},47,[377,1407,1408],{"class":394},"            ResultSet resultSet ",[377,1410,660],{"class":383},[377,1412,1413],{"class":394}," preparedStatement.",[377,1415,1416],{"class":390},"executeQuery",[377,1418,457],{"class":394},[377,1420,1422,1425,1428,1431],{"class":379,"line":1421},48,[377,1423,1424],{"class":383},"            if",[377,1426,1427],{"class":394}," (resultSet.",[377,1429,1430],{"class":390},"next",[377,1432,1433],{"class":394},"()) {\n",[377,1435,1437,1440,1443],{"class":379,"line":1436},49,[377,1438,1439],{"class":383},"                return",[377,1441,1442],{"class":390}," parseResultSet",[377,1444,1445],{"class":394},"(resultSet);\n",[377,1447,1449],{"class":379,"line":1448},50,[377,1450,1451],{"class":394},"            }\n",[377,1453,1455,1457,1459,1461,1463],{"class":379,"line":1454},51,[377,1456,744],{"class":394},[377,1458,747],{"class":383},[377,1460,1157],{"class":394},[377,1462,1160],{"class":416},[377,1464,756],{"class":394},[377,1466,1468,1470,1472],{"class":379,"line":1467},52,[377,1469,1168],{"class":394},[377,1471,1171],{"class":390},[377,1473,457],{"class":394},[377,1475,1477],{"class":379,"line":1476},53,[377,1478,788],{"class":394},[377,1480,1482,1484,1487],{"class":379,"line":1481},54,[377,1483,819],{"class":383},[377,1485,1486],{"class":712}," null",[377,1488,667],{"class":394},[377,1490,1492],{"class":379,"line":1491},55,[377,1493,794],{"class":394},[377,1495,1497],{"class":379,"line":1496},56,[377,1498,927],{"class":394},[377,1500,1502,1504],{"class":379,"line":1501},57,[377,1503,932],{"class":394},[377,1505,935],{"class":383},[377,1507,1509,1511,1514,1516,1518,1520],{"class":379,"line":1508},58,[377,1510,805],{"class":383},[377,1512,1513],{"class":394}," List\u003C",[377,1515,550],{"class":383},[377,1517,451],{"class":394},[377,1519,454],{"class":390},[377,1521,813],{"class":394},[377,1523,1525,1528,1530,1533,1535,1537],{"class":379,"line":1524},59,[377,1526,1527],{"class":394},"        List\u003C",[377,1529,550],{"class":383},[377,1531,1532],{"class":394},"> users ",[377,1534,660],{"class":383},[377,1536,964],{"class":383},[377,1538,1539],{"class":394}," ArrayList\u003C>();\n",[377,1541,1543,1545,1547,1550],{"class":379,"line":1542},60,[377,1544,1071],{"class":394},[377,1546,660],{"class":383},[377,1548,1549],{"class":663}," \"SELECT * FROM users\"",[377,1551,667],{"class":394},[377,1553,1555,1557,1560,1562,1564,1567],{"class":379,"line":1554},61,[377,1556,690],{"class":383},[377,1558,1559],{"class":394}," (Statement statement ",[377,1561,660],{"class":383},[377,1563,1091],{"class":394},[377,1565,1566],{"class":390},"createStatement",[377,1568,457],{"class":394},[377,1570,1572,1575,1577,1580,1582],{"class":379,"line":1571},62,[377,1573,1574],{"class":394},"             ResultSet resultSet ",[377,1576,660],{"class":383},[377,1578,1579],{"class":394}," statement.",[377,1581,1416],{"class":390},[377,1583,1097],{"class":394},[377,1585,1587,1590,1592,1594],{"class":379,"line":1586},63,[377,1588,1589],{"class":383},"            while",[377,1591,1427],{"class":394},[377,1593,1430],{"class":390},[377,1595,1433],{"class":394},[377,1597,1599,1602,1604,1606],{"class":379,"line":1598},64,[377,1600,1601],{"class":394},"                User user ",[377,1603,660],{"class":383},[377,1605,1442],{"class":390},[377,1607,1445],{"class":394},[377,1609,1611,1614,1617],{"class":379,"line":1610},65,[377,1612,1613],{"class":394},"                users.",[377,1615,1616],{"class":390},"add",[377,1618,1619],{"class":394},"(user);\n",[377,1621,1623],{"class":379,"line":1622},66,[377,1624,1451],{"class":394},[377,1626,1628,1630,1632,1634,1636],{"class":379,"line":1627},67,[377,1629,744],{"class":394},[377,1631,747],{"class":383},[377,1633,1157],{"class":394},[377,1635,1160],{"class":416},[377,1637,756],{"class":394},[377,1639,1641,1643,1645],{"class":379,"line":1640},68,[377,1642,1168],{"class":394},[377,1644,1171],{"class":390},[377,1646,457],{"class":394},[377,1648,1650],{"class":379,"line":1649},69,[377,1651,788],{"class":394},[377,1653,1655,1657],{"class":379,"line":1654},70,[377,1656,819],{"class":383},[377,1658,1659],{"class":394}," users;\n",[377,1661,1663],{"class":379,"line":1662},71,[377,1664,794],{"class":394},[377,1666,1668],{"class":379,"line":1667},72,[377,1669,927],{"class":394},[377,1671,1673,1675],{"class":379,"line":1672},73,[377,1674,932],{"class":394},[377,1676,935],{"class":383},[377,1678,1680,1682,1684,1686,1688,1690,1692,1694,1696,1698],{"class":379,"line":1679},74,[377,1681,805],{"class":383},[377,1683,1513],{"class":394},[377,1685,550],{"class":383},[377,1687,451],{"class":394},[377,1689,469],{"class":390},[377,1691,472],{"class":394},[377,1693,550],{"class":383},[377,1695,451],{"class":394},[377,1697,479],{"class":416},[377,1699,756],{"class":394},[377,1701,1703,1705,1707,1709,1711,1714],{"class":379,"line":1702},75,[377,1704,1527],{"class":394},[377,1706,550],{"class":383},[377,1708,1532],{"class":394},[377,1710,660],{"class":383},[377,1712,1713],{"class":390}," readAll",[377,1715,457],{"class":394},[377,1717,1719,1722,1725,1728,1731],{"class":379,"line":1718},76,[377,1720,1721],{"class":394},"        users.",[377,1723,1724],{"class":390},"removeIf",[377,1726,1727],{"class":394},"(predicate.",[377,1729,1730],{"class":390},"negate",[377,1732,782],{"class":394},[377,1734,1736,1738],{"class":379,"line":1735},77,[377,1737,819],{"class":383},[377,1739,1659],{"class":394},[377,1741,1743],{"class":379,"line":1742},78,[377,1744,794],{"class":394},[377,1746,1748],{"class":379,"line":1747},79,[377,1749,600],{"emptyLinePlaceholder":599},[377,1751,1753,1755],{"class":379,"line":1752},80,[377,1754,932],{"class":394},[377,1756,935],{"class":383},[377,1758,1760,1762,1764,1766,1768,1770,1772],{"class":379,"line":1759},81,[377,1761,805],{"class":383},[377,1763,1055],{"class":383},[377,1765,503],{"class":390},[377,1767,432],{"class":394},[377,1769,435],{"class":383},[377,1771,438],{"class":416},[377,1773,756],{"class":394},[377,1775,1777,1779,1781,1784],{"class":379,"line":1776},82,[377,1778,1071],{"class":394},[377,1780,660],{"class":383},[377,1782,1783],{"class":663}," \"DELETE FROM users WHERE id = ?\"",[377,1785,667],{"class":394},[377,1787,1789,1791,1793,1795,1797,1799],{"class":379,"line":1788},83,[377,1790,690],{"class":383},[377,1792,1086],{"class":394},[377,1794,660],{"class":383},[377,1796,1091],{"class":394},[377,1798,1094],{"class":390},[377,1800,1097],{"class":394},[377,1802,1804,1806,1808,1810,1812],{"class":379,"line":1803},84,[377,1805,1103],{"class":394},[377,1807,1279],{"class":390},[377,1809,432],{"class":394},[377,1811,1111],{"class":712},[377,1813,1402],{"class":394},[377,1815,1817,1819,1821],{"class":379,"line":1816},85,[377,1818,1103],{"class":394},[377,1820,1145],{"class":390},[377,1822,457],{"class":394},[377,1824,1826,1828,1830,1832,1834],{"class":379,"line":1825},86,[377,1827,744],{"class":394},[377,1829,747],{"class":383},[377,1831,1157],{"class":394},[377,1833,1160],{"class":416},[377,1835,756],{"class":394},[377,1837,1839,1841,1843],{"class":379,"line":1838},87,[377,1840,1168],{"class":394},[377,1842,1171],{"class":390},[377,1844,457],{"class":394},[377,1846,1848],{"class":379,"line":1847},88,[377,1849,788],{"class":394},[377,1851,1853],{"class":379,"line":1852},89,[377,1854,794],{"class":394},[377,1856,1858],{"class":379,"line":1857},90,[377,1859,540],{"class":394},[304,1861,1863],{"id":1862},"usar-el-dao-en-la-lógica-de-negocio","Usar el DAO en la lógica de negocio",[309,1865,1866,1867,1869],{},"Finalmente, podemos utilizar la clase ",[374,1868,842],{}," en la lógica de negocio de nuestra aplicación para gestionar los usuarios de manera eficiente y organizada. Por ejemplo:",[367,1871,1873],{"className":369,"code":1872,"language":371,"meta":372,"style":372},"public class UserService {\n    private UserDAO userDAO;\n\n    public UserService(UserDAO userDAO) {\n        this.userDAO = userDAO;\n    }\n\n    public void createUser(String name, String email) {\n        User user = new User();\n        user.setName(name);\n        user.setEmail(email);\n        userDAO.create(user);\n    }\n\n    public User getUserById(int id) {\n        return userDAO.read(id);\n    }\n\n    public List\u003CUser> getAllUsers() {\n        return userDAO.readAll();\n    }\n\n    public List\u003CUser> getUsersByEmailDomain(String domain) {\n        return userDAO.readByPredicate(user -> user.getEmail().endsWith(\"@\" + domain));\n    }\n\n    public void updateUser(int id, String name, String email) {\n        User user = userDAO.read(id);\n        if (user != null) {\n            user.setName(name);\n            user.setEmail(email);\n            userDAO.update(user);\n        }\n    }\n\n    public void deleteUser(int id) {\n        userDAO.delete(id);\n    }\n}\n",[374,1874,1875,1886,1893,1897,1911,1923,1927,1931,1954,1966,1975,1984,1994,1998,2002,2019,2031,2035,2039,2054,2064,2068,2072,2092,2126,2130,2134,2159,2171,2186,2195,2203,2213,2217,2221,2225,2242,2251,2255],{"__ignoreMap":372},[377,1876,1877,1879,1881,1884],{"class":379,"line":380},[377,1878,384],{"class":383},[377,1880,563],{"class":383},[377,1882,1883],{"class":390}," UserService",[377,1885,569],{"class":394},[377,1887,1888,1890],{"class":379,"line":404},[377,1889,574],{"class":383},[377,1891,1892],{"class":394}," UserDAO userDAO;\n",[377,1894,1895],{"class":379,"line":423},[377,1896,600],{"emptyLinePlaceholder":599},[377,1898,1899,1901,1903,1906,1909],{"class":379,"line":443},[377,1900,805],{"class":383},[377,1902,1883],{"class":390},[377,1904,1905],{"class":394},"(UserDAO ",[377,1907,1908],{"class":416},"userDAO",[377,1910,756],{"class":394},[377,1912,1913,1915,1918,1920],{"class":379,"line":460},[377,1914,901],{"class":712},[377,1916,1917],{"class":394},".userDAO ",[377,1919,660],{"class":383},[377,1921,1922],{"class":394}," userDAO;\n",[377,1924,1925],{"class":379,"line":484},[377,1926,794],{"class":394},[377,1928,1929],{"class":379,"line":498},[377,1930,600],{"emptyLinePlaceholder":599},[377,1932,1933,1935,1937,1940,1943,1946,1949,1952],{"class":379,"line":514},[377,1934,805],{"class":383},[377,1936,1055],{"class":383},[377,1938,1939],{"class":390}," createUser",[377,1941,1942],{"class":394},"(String ",[377,1944,1945],{"class":416},"name",[377,1947,1948],{"class":394},", String ",[377,1950,1951],{"class":416},"email",[377,1953,756],{"class":394},[377,1955,1956,1958,1960,1962,1964],{"class":379,"line":537},[377,1957,959],{"class":394},[377,1959,660],{"class":383},[377,1961,964],{"class":383},[377,1963,566],{"class":390},[377,1965,457],{"class":394},[377,1967,1968,1970,1972],{"class":379,"line":741},[377,1969,973],{"class":394},[377,1971,997],{"class":390},[377,1973,1974],{"class":394},"(name);\n",[377,1976,1977,1979,1981],{"class":379,"line":759},[377,1978,973],{"class":394},[377,1980,1016],{"class":390},[377,1982,1983],{"class":394},"(email);\n",[377,1985,1986,1989,1992],{"class":379,"line":785},[377,1987,1988],{"class":394},"        userDAO.",[377,1990,1991],{"class":390},"create",[377,1993,1619],{"class":394},[377,1995,1996],{"class":379,"line":791},[377,1997,794],{"class":394},[377,1999,2000],{"class":379,"line":797},[377,2001,600],{"emptyLinePlaceholder":599},[377,2003,2004,2006,2008,2011,2013,2015,2017],{"class":379,"line":802},[377,2005,805],{"class":383},[377,2007,942],{"class":394},[377,2009,2010],{"class":390},"getUserById",[377,2012,432],{"class":394},[377,2014,435],{"class":383},[377,2016,438],{"class":416},[377,2018,756],{"class":394},[377,2020,2021,2023,2026,2028],{"class":379,"line":816},[377,2022,819],{"class":383},[377,2024,2025],{"class":394}," userDAO.",[377,2027,429],{"class":390},[377,2029,2030],{"class":394},"(id);\n",[377,2032,2033],{"class":379,"line":825},[377,2034,794],{"class":394},[377,2036,2037],{"class":379,"line":830},[377,2038,600],{"emptyLinePlaceholder":599},[377,2040,2041,2043,2045,2047,2049,2052],{"class":379,"line":1068},[377,2042,805],{"class":383},[377,2044,1513],{"class":394},[377,2046,550],{"class":383},[377,2048,451],{"class":394},[377,2050,2051],{"class":390},"getAllUsers",[377,2053,813],{"class":394},[377,2055,2056,2058,2060,2062],{"class":379,"line":1081},[377,2057,819],{"class":383},[377,2059,2025],{"class":394},[377,2061,454],{"class":390},[377,2063,457],{"class":394},[377,2065,2066],{"class":379,"line":1100},[377,2067,794],{"class":394},[377,2069,2070],{"class":379,"line":1122},[377,2071,600],{"emptyLinePlaceholder":599},[377,2073,2074,2076,2078,2080,2082,2085,2087,2090],{"class":379,"line":1140},[377,2075,805],{"class":383},[377,2077,1513],{"class":394},[377,2079,550],{"class":383},[377,2081,451],{"class":394},[377,2083,2084],{"class":390},"getUsersByEmailDomain",[377,2086,1942],{"class":394},[377,2088,2089],{"class":416},"domain",[377,2091,756],{"class":394},[377,2093,2094,2096,2098,2100,2103,2106,2109,2111,2113,2116,2118,2121,2123],{"class":379,"line":1150},[377,2095,819],{"class":383},[377,2097,2025],{"class":394},[377,2099,469],{"class":390},[377,2101,2102],{"class":394},"(user ",[377,2104,2105],{"class":383},"->",[377,2107,2108],{"class":394}," user.",[377,2110,1135],{"class":390},[377,2112,914],{"class":394},[377,2114,2115],{"class":390},"endsWith",[377,2117,432],{"class":394},[377,2119,2120],{"class":663},"\"@\"",[377,2122,773],{"class":383},[377,2124,2125],{"class":394}," domain));\n",[377,2127,2128],{"class":379,"line":1165},[377,2129,794],{"class":394},[377,2131,2132],{"class":379,"line":1176},[377,2133,600],{"emptyLinePlaceholder":599},[377,2135,2136,2138,2140,2143,2145,2147,2149,2151,2153,2155,2157],{"class":379,"line":1181},[377,2137,805],{"class":383},[377,2139,1055],{"class":383},[377,2141,2142],{"class":390}," updateUser",[377,2144,432],{"class":394},[377,2146,435],{"class":383},[377,2148,438],{"class":416},[377,2150,1948],{"class":394},[377,2152,1945],{"class":416},[377,2154,1948],{"class":394},[377,2156,1951],{"class":416},[377,2158,756],{"class":394},[377,2160,2161,2163,2165,2167,2169],{"class":379,"line":1186},[377,2162,959],{"class":394},[377,2164,660],{"class":383},[377,2166,2025],{"class":394},[377,2168,429],{"class":390},[377,2170,2030],{"class":394},[377,2172,2173,2176,2179,2182,2184],{"class":379,"line":1191},[377,2174,2175],{"class":383},"        if",[377,2177,2178],{"class":394}," (user ",[377,2180,2181],{"class":383},"!=",[377,2183,1486],{"class":712},[377,2185,756],{"class":394},[377,2187,2188,2191,2193],{"class":379,"line":1198},[377,2189,2190],{"class":394},"            user.",[377,2192,997],{"class":390},[377,2194,1974],{"class":394},[377,2196,2197,2199,2201],{"class":379,"line":1213},[377,2198,2190],{"class":394},[377,2200,1016],{"class":390},[377,2202,1983],{"class":394},[377,2204,2205,2208,2211],{"class":379,"line":1225},[377,2206,2207],{"class":394},"            userDAO.",[377,2209,2210],{"class":390},"update",[377,2212,1619],{"class":394},[377,2214,2215],{"class":379,"line":1240},[377,2216,788],{"class":394},[377,2218,2219],{"class":379,"line":1257},[377,2220,794],{"class":394},[377,2222,2223],{"class":379,"line":1274},[377,2224,600],{"emptyLinePlaceholder":599},[377,2226,2227,2229,2231,2234,2236,2238,2240],{"class":379,"line":1294},[377,2228,805],{"class":383},[377,2230,1055],{"class":383},[377,2232,2233],{"class":390}," deleteUser",[377,2235,432],{"class":394},[377,2237,435],{"class":383},[377,2239,438],{"class":416},[377,2241,756],{"class":394},[377,2243,2244,2246,2249],{"class":379,"line":1303},[377,2245,1988],{"class":394},[377,2247,2248],{"class":390},"delete",[377,2250,2030],{"class":394},[377,2252,2253],{"class":379,"line":1316},[377,2254,794],{"class":394},[377,2256,2257],{"class":379,"line":1325},[377,2258,540],{"class":394},[304,2260,2262],{"id":2261},"conclusión","Conclusión",[309,2264,2265],{},"El patrón DAO es una arquitectura de software que ayuda a separar la lógica de acceso a datos de la lógica de negocio en una aplicación, lo que mejora la organización del código, facilita su mantenimiento y proporciona una mayor flexibilidad en el desarrollo. Al implementar el patrón DAO en Java, puedes crear una interfaz DAO, definir tus entidades, gestionar la conexión a la base de datos y proporcionar una implementación concreta para interactuar con los datos de manera eficiente y segura. Asegúrate de seguir las mejores prácticas al implementar el patrón DAO para aprovechar al máximo sus beneficios y mejorar la calidad de tu código.",[2267,2268,2269],"style",{},"html pre.shiki code .snl16, html code.shiki .snl16{--shiki-default:#F97583}html pre.shiki code .svObZ, html code.shiki .svObZ{--shiki-default:#B392F0}html pre.shiki code .s95oV, html code.shiki .s95oV{--shiki-default:#E1E4E8}html pre.shiki code .s9osk, html code.shiki .s9osk{--shiki-default:#FFAB70}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html pre.shiki code .sAwPA, html code.shiki .sAwPA{--shiki-default:#6A737D}html pre.shiki code .sU2Wk, html code.shiki .sU2Wk{--shiki-default:#9ECBFF}html pre.shiki code .sDLfK, html code.shiki .sDLfK{--shiki-default:#79B8FF}",{"title":372,"searchDepth":404,"depth":404,"links":2271},[2272,2273,2274,2275,2276,2277,2278,2279,2280],{"id":306,"depth":404,"text":307},{"id":314,"depth":404,"text":315},{"id":353,"depth":404,"text":354},{"id":361,"depth":404,"text":362},{"id":543,"depth":404,"text":544},{"id":613,"depth":404,"text":614},{"id":835,"depth":404,"text":836},{"id":1862,"depth":404,"text":1863},{"id":2261,"depth":404,"text":2262},"En este artículo se explicará el patrón de diseño DAO (Data Access Object) y cómo implementarlo en Java para gestionar el acceso a datos de manera eficiente y organizada. Se discutirán los beneficios de utilizar el patrón DAO, cómo estructurar tu código para seguir este patrón y se proporcionarán ejemplos prácticos de implementación.","md",null,{"editButton":104},{"title":170,"description":2281},"vfg2NpXngmRhcj_STYMPialY932h9uQNG5Oe8zlRCt4",[2288,2290],{"title":166,"path":167,"stem":168,"description":2289,"children":-1},"En este artículo se explicará cómo utilizar sentencias preparadas (Prepared Statements) en Java con JDBC para ejecutar consultas SQL de manera más eficiente y segura. Se discutirán las ventajas de las sentencias preparadas, cómo implementarlas en tu código Java y se proporcionarán ejemplos prácticos.",{"title":174,"path":175,"stem":176,"description":2291,"children":-1},"En este artículo se explicará cómo utilizar Hibernate ORM (Object-Relational Mapping) en Java para gestionar la persistencia de datos de manera eficiente y sencilla. Se discutirán los conceptos básicos de Hibernate, cómo configurar tu proyecto para usarlo, y se proporcionarán ejemplos prácticos de cómo mapear tus clases Java a tablas de base de datos y realizar operaciones CRUD utilizando Hibernate.",1775101373971]