2. Alternativas
3. Java Server Faces CRUD 4. Spring MVC 2.5 5. Java Persistence
6. El lenguaje de consultas de Persistence 7. Los metadatos para los objetos y sus relaciones 8. Java Persistence: Definiciones
9. Las instancias de una entidad corresponden a filas dentro de la tabla 10. Generalmente las entidades se relacionan con otras entidades, estas relaciones se expresan mediante los metadatos 11. Los metadatos de las relaciones que se dan entre los objetos se pueden definir en un archivo XML o empleando anotaciones en el archivo de cada clase 12. Java Persistence: Definiciones
13. POJO : Plain Old Java Object -> clases que no extienden a ninguna otra: MyDb.javaesPOJO, NewPostServletno esPOJO 14. Qu es Persistencia?
15. Posts: tabla -> entidad
16. Ahora que es una entidad cuenta con tres caractersticas:
17. Identidad: cada instancia de la entidad es nica 18. Soporte Transaccional: las operaciones CRUD (CReate, Update, Delete ) para esta entidad se realizan de forma transaccional 19. Antes de comenzar a #programar public class post{
20. private String post_title; 21. private Date post_date; 22. private String post_body; 23. //getter & setter methods } 24. Antes de comenzar a #programar
25. set_id 26. get_title 27. set_title 28. Anotaciones (@)
30. private String post_title; 31. ... 32. Identidad
@Entity public class posts{ @Id private int post_id; private String post_title; private Date post_date; private String post_body; //getter and setter methods } 33. Convenciones
34. Nombre de la clase: MiTabla 35. Nombre de las columnas: ATTR1, ATTR2, ATTR3 36. Nombre de los atributos: attr1, attr2, attr3 37. @ Generando id's automticamente
... @Id @GeneratedValue(strategy = GenerationType.SEQUENCE) private int post_id; ... 38. EntityManager
39. EntityManager: se refiere a una API que ofrece los servicios requeridos para trabajar con una entidad 40. En J2SE se define un EntityManager de la siguiente manera (explcita): EntityManagerFactory entityManagerFactory =Persistence.createEntityManagerFactory(PersistentUnitName); EntityManager eManager = entityManagerFactory.createEntityManager(); 41. EntityManager
@Resource private EntityManager entityManager; 42. Persistence Context
43. Entidades y Transacciones
44. Con las transacciones JTA el programador no debe preocuparse por nada, pero en las transacciones tipo Resource-local las validaciones corren por su cuenta y basado en los resultados de las mismas debe determinar si enva una transaccin (commit) o por el contrario la anula (roll-back) 45. Operaciones sobre Entidades
46. postObject.set();//definir valores para el objeto 47. entityManager.persist(postObject); 48. Operaciones sobre Entidades II
49. find() es un mtodo propio de la clase EntityManager y permite recuperar una instancia de una entidad empleando el nombre de la clase y la llave primaria: postEntity elPost =entityManager.find(postEntity.class, 1); If (elPost != null){ // post object puede o no ser null. // Procesar el objecto } 50. Operaciones sobre Entidades III
postEntity elPost = entityManager.find(postEntity.class, 1); if (elPost != null){ // post object puede o no ser null. // eliminar el objecto EntityManager.remove(elPost); } 51. Operaciones sobre Entidades IV
postEntity elPost = entityManager.find(postEntity.class, 1); If (elPost != null){ // post object puede o no ser null. // modificar los atributos del objecto con los metodos set elPost.setTitle("Un nuevo titulo"); EntityManager.merge(elPost); } 52. Operaciones sobre Entidades V
postEntity elPost = entityManager.find(postEntity.class, 1); If (elPost != null){ // post object puede o no ser null. // modificar los atributos del objecto con los metodos set elPost.setTitle("Un nuevo titulo"); EntityManager.merge(elPost); EntityManager.flush(); } 53. Operaciones sobre Entidades VI
postEntity elPost = entityManager.find(postEntity.class, 1); If (elPost != null){ // post object puede o no ser null. // modificar los atributos del objecto con los metodos set elPost.setTitle("Un nuevo titulo"); EntityManager.merge(elPost); EntityManager.refresh(); } 54. find() no es muy flexible
55. Existen 2 tipos de consultas diferentes: estticas y dinmicas 56. Static Query
@NamedQuery(name = PostEntity.findAll query = SELECT M FROM POSTENTITY) @Entity class PostEntity{ } 57. Static Query II
Query findAllQuery = entityManager. createNamedQuery(PostEntity.findAll) ; 58. Static Query III
@NamedQueries( {@NamedQuery(name = Post.selectAllQuery query = SELECT M FROM POSTENTITY),@NamedQuery(name = Post.deleteAllQuery query = DELETE M FROM POSTENTITY)} ) 59. Dynamic Query
Query singleSelectQuery = entityManager.createQuery( SELECT M FROM MOBILEENTITY WHERE M.IMEI = ABC-123); 60. Trabajando con los resultados
61. Parmetros para las Consultas
62. name = Post.findByTitle 63. query = SELECT P FROM POSTENTITY WHERE P.TITLELIKE '% :keyword %' 64. )
65. namedQuery.setParameter(keyword, entradaUsuario); 66. Paginacin de Resultados
67. Paginacin de Resultados int maxRecords = 10;int startPosition = 0;String queryString = SELECT M FROM MOBILEENTITY;while( true ){Query selectQuery = entityManager.createQuery(queryString);selectQuery.setMaxResults(maxRecords);selectQuery.setFirstResult(startPosition);List mobiles = entityManager.getResultList(queryString);if (mobiles.isEmpty()){break;}//Process the mobile entities.process(mobiles);entityManager.clear(); startPosition = startPosition + mobiles.size(); } 68. Unidades de Persistencia
69. Las unidades de persistencia se definen empleando archivos XML y deben asociarse a los objetos EntityManager:
70. private EntityManager entityManager; 71. Ejemplo: utilizando JPA para Blog
72. DataSource: conexin con la base de datos del blog (si no existe crear) Paso 2: crear una clase para la entidad de la tabla (posts) 73. Paso 3: crear el Servlet para que el usuario pueda buscar 74. Paso 4: asociar el EntityManager al Servlet 75. Paso 5: definir el mtodo de bsqueda y la interfaz 76. Creacin Unidad Persistencia 77. Creacin Unidad Persistencia 78. Creacin Entidad 79. Creacin Entidad 80. Creacin Entidad 81. Creacin Servlet 82. Creacin Servlet 83. Creacin Servlet 84. Asociando el EntityManager 85. Mtodo de bsqueda para el Servlet
86. Posts auxPost = null; 87. try { 88. Context ctx = (Context) new InitialContext().lookup("java:comp/env"); 89. utx.begin(); 90. EntityManager em = (EntityManager) ctx.lookup("persistence/LogicalName"); 91. //em.persist(object); 92. auxPost = em.find(Posts.class, auxPostId); 93. utx.commit(); 94. } catch (Exception e) { 95. Logger.getLogger(getClass().getName()).log(Level.SEVERE, "exception caught", e); 96. throw new RuntimeException(e); 97. } 98. return auxPost; 99. } 100. Interfaz de bsqueda Servlet
101. // TODO output your page here 102. 103. out.println("Motor de Busqueda - Blog"); 104. String uiAuxId = request.getParameter("post_id"); 105. if (uiAuxId != null && !uiAuxId.isEmpty()) { 106. //resultados de la busqueda 107. Posts resultadoBusqueda = this.findPostById(Integer.parseInt(uiAuxId)); 108. if (resultadoBusqueda != null) { 109. out.println(""); 110. out.println(""); 111. out.println("Resultado de su bsqueda:"); 112. out.println("" + resultadoBusqueda.getPostTitle() + ""); 113. out.println(""); 114. out.println(""); 115. Interfaz de bsqueda Servlet
116. out.println(""); 117. out.println(""); 118. out.println("Su bsqueda no arrojo resultados"); 119. out.println(""); 120. out.println(""); 121. } 122. } else { 123. //formulario de busqueda 124. out.println(""); 125. out.println(""); 126. out.println(""); 127. out.println("Codigo del Post:"); 128. out.println(""); 129. out.println(""); 130. out.println(""); 131. out.println(""); 132. out.println(""); 133. out.println(""); 134. out.println(""); 135. } 136. Y si quisiramos aadir un post?
137. Paso 2: definir la unidad de persistencia 138. Paso 3: implementar en l un mtodo que permita recuperar el ltimo id empleado 139. Paso 4: implementar la interfaz grfica 140. Mtodo para recuperar el ltimo id
141. Posts postAux = null; 142. try { 143. Context ctx = (Context) new InitialContext().lookup("java:comp/env"); 144. utx.begin(); 145. EntityManager em = (EntityManager) ctx.lookup("persistence/LogicalName"); 146. //em.persist(object); 147. Query findAllQuery = em.createNamedQuery("Posts.findAll"); 148. List posts = findAllQuery.getResultList(); 149. Mtodo para recuperar el ltimo id
150. Iterator auxiliar = posts.iterator(); 151. while(auxiliar.hasNext()){ 152. postAux = (Posts)auxiliar.next();//cast 153. } 154. utx.commit(); 155. } catch (Exception e) { 156. Logger.getLogger(getClass().getName()).log(Level.SEVERE, "exception caught", e); 157. throw new RuntimeException(e); 158. } 159. return postAux.getPostId(); 160. } 161. Interfaz Servlet (antes de submit)
162. //formulario para la creacion de un nuevo post 163. out.println(""); 164. out.println(""); 165. out.println(""); 166. ... 167. out.println(""); 168. out.println(""); 169. out.println(""); 170. out.println(""); 171. out.println(""); 172. } 173. out.println("
Top Related