Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Persistência Java: Hibernate e JPA

15,132 views

Published on

Palestra sobre persistência em Java com Hibernate e JPA

Published in: Technology
  • nice draft i like it
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here

Persistência Java: Hibernate e JPA

  1. 1. Persistência no JAVA - Hibernate e JPA - Sérgio Lopes - @sergio_caelum sergio.lopes@caelum.com.br
  2. 2. Como você grava no seu banco de dados?
  3. 3. mysql código
  4. 4. acessando via C /* Connect to database */ if (!mysql_real_connect(conn, server, user, password, database, 0, NULL, 0)) { fprintf(stderr, "%sn", mysql_error(conn)); exit(1); } /* send SQL query */ if (mysql_query(conn, "show tables")) { fprintf(stderr, "%sn", mysql_error(conn)); exit(1); } res = mysql_use_result(conn); /* output table name */ printf("MySQL Tables in mysql database:n"); while ((row = mysql_fetch_row(res)) != NULL) printf("%s n", row[0]);
  5. 5. Considerações • +Performance • -Manutenção
  6. 6. lib_mysql ??? Vamos ver código dessa evolução!
  7. 7. código java JDBC driver mysql
  8. 8. acessando via JDBC try { String userName = "testuser"; String password = "testpass"; String url = "jdbc:mysql://localhost/test"; Class.forName ("com.mysql.jdbc.Driver").newInstance (); conn = DriverManager.getConnection (url, userName, password); System.out.println ("Database connection established"); } catch (Exception e) { System.err.println ("Cannot connect to database server"); } finally { if (conn != null) { try { conn.close (); System.out.println ("Database connection terminated"); } catch (Exception e) { /* ignore close errors */ } } }
  9. 9. Considerações • ++Extensibilidade • +Manutenção • -Performance
  10. 10. código java Hibernate JDBC driver mysql Mapeamento Objeto/Relacional (ORM)
  11. 11. acessando via Hibernate Livro livro = new Livro(); session.save(livro);
  12. 12. Considerações • ++Extensibilidade • +Manutenção • -Performance
  13. 13. Livro l = new Livro(); l.setNome("Alice no País das Maravilhas"); l.setDescricao("Um excelente livro"); Session session = //.... session.beginTransaction(); session.save(l); session.getTransaction().commit();
  14. 14. Livro l = new Livro(); l.setNome("Alice no País das Maravilhas"); l.setDescricao("Um excelente livro"); Session session = //.... session.beginTransaction(); session.save(l); session.getTransaction().commit();
  15. 15. Livro l = new Livro(); l.setNome("Alice no País das Maravilhas"); l.setDescricao("Um excelente livro"); Session session = //.... session.beginTransaction(); session.save(l); session.getTransaction().commit();
  16. 16. Livro l = new Livro(); l.setNome("Alice no País das Maravilhas"); l.setDescricao("Um excelente livro"); Session session = //.... session.beginTransaction(); session.save(l); session.getTransaction().commit();
  17. 17. Livro l = new Livro(); l.setNome("Alice no País das Maravilhas"); l.setDescricao("Um excelente livro"); Autor a = new Autor(); a.setNome("Lewis"); a.setSobrenome("Carroll"); l.setAutor(a); Session session = //.... session.beginTransaction(); session.save(a); session.save(l); session.getTransaction().commit();
  18. 18. código java Hibernate JDBC driver mysql
  19. 19. Hibernate TopLink código java JPA OpenJPA JDBC driver mysql EclipseLin k
  20. 20. Hibernate TopLink código java JPA OpenJPA JDBC driver mysql EclipseLin k
  21. 21. Hibernate TopLink código java JPA OpenJPA JDBC driver mysql EclipseLin k Abstraindo a abstração da abstração! Socorro!
  22. 22. acessando via JPA Livro livro = new Livro(); manager.persist(livro); Migrar de Hibernate -> JPA?
  23. 23. Problemas • Mais uma camada! • Não tem tudo do Hibernate
  24. 24. lib_mysql jdbc hibernate jpa ???
  25. 25. seu BD é a prova de balas?
  26. 26. seu BD é a prova de balas?
  27. 27. Relational DBs - Seguro - Consistente - Integro - Relacional
  28. 28. NO RELATIONAL relational DBs - rapido - escalavel - SIMPLES - confiavel?
  29. 29. Migrando para o Google App Engine!
  30. 30. BigTable API // Get a handle on the datastore itself DatastoreService datastore = DatastoreServiceFactory.getDatastoreService(); // Lookup data by known key name Entity userEntity = datastore.get(KeyFactory.createKey("UserInfo", email)); // Or perform a query Query query = new Query("Task", userEntity); query.addFilter("dueDate", Query.FilterOperator.LESS_THAN, today); for (Entity taskEntity : datastore.prepare(query).asIterable()) { if ("done".equals(taskEntity.getProperty("status"))) { datastore.delete(taskEntity); } else { taskEntity.setProperty("status", "overdue"); datastore.put(taskEntity); } } “só” aprender mais uma API!
  31. 31. #
  32. 32. JPA para BigTable #FTW <provider> org.datanucleus.store.appengine.jpa.DatastorePersistenceProvider </provider>
  33. 33. Acessando BigTable com JPA Livro livro = new Livro(); manager.persist(livro);
  34. 34. Tá migrado!
  35. 35. Conclusão • SQL queries difíceis • ORM para o dia a dia • NoSQL para escalabilidade, disponibilidade • libC para insanidade • Java sempre :)
  36. 36. Obrigado! Sérgio Lopes - @sergio_caelum sergio.lopes@caelum.com.br
  37. 37. FJ-11 Java e Orientação a Objetos Laboratório Java com testes, FJ-16 XML e Design Patterns FJ-21 Java para desenvolvimento Web Preparatório para certificação FJ-19 de programador Java FJ-25 Persistência com JPA2 e Hibernate FJ-26 Laboratório Web com JSF2 e CDI FJ-31 Java EE avançado e Web Services

×