Persistência
no JAVA
- Hibernate e JPA -



       Sérgio Lopes - @sergio_caelum
          sergio.lopes@caelum.com.br
Como você grava no seu
       banco de dados?
mysql
código
acessando via C
/* Connect to database */
 if (!mysql_real_connect(conn, server,
       user, password, database, 0, NULL,...
Considerações


• +Performance
• -Manutenção
lib_mysql                                      ???



            Vamos ver código dessa evolução!
código java   JDBC   driver   mysql
acessando via JDBC
try
      {
          String userName = "testuser";
          String password = "testpass";
          S...
Considerações

• ++Extensibilidade
• +Manutenção
• -Performance
código java   Hibernate   JDBC   driver   mysql




     Mapeamento Objeto/Relacional (ORM)
acessando via Hibernate


Livro livro = new Livro();
session.save(livro);
Considerações

• ++Extensibilidade
• +Manutenção
• -Performance
Livro l = new Livro();
l.setNome("Alice no País das Maravilhas");
l.setDescricao("Um excelente livro");

Session session =...
Livro l = new Livro();
l.setNome("Alice no País das Maravilhas");
l.setDescricao("Um excelente livro");

Session session =...
Livro l = new Livro();
l.setNome("Alice no País das Maravilhas");
l.setDescricao("Um excelente livro");

Session session =...
Livro l = new Livro();
l.setNome("Alice no País das Maravilhas");
l.setDescricao("Um excelente livro");

Session session =...
Livro l = new Livro();
l.setNome("Alice no País das Maravilhas");
l.setDescricao("Um excelente livro");

Autor a = new Aut...
código java   Hibernate   JDBC   driver   mysql
Hibernate
                 TopLink
código java JPA OpenJPA      JDBC driver   mysql
                EclipseLin
           ...
Hibernate
                 TopLink
código java JPA OpenJPA      JDBC driver   mysql
                EclipseLin
           ...
Hibernate
                 TopLink
código java JPA OpenJPA      JDBC driver    mysql
                EclipseLin
          ...
acessando via JPA


Livro livro = new Livro();
manager.persist(livro);



          Migrar de Hibernate -> JPA?
Problemas


• Mais uma camada!
• Não tem tudo do Hibernate
lib_mysql   jdbc   hibernate   jpa   ???
seu BD é a prova de balas?
seu BD é a prova de balas?
Relational DBs
-   Seguro
-   Consistente
-   Integro
-   Relacional
NO RELATIONAL
relational DBs
-   rapido
-   escalavel
-   SIMPLES
-   confiavel?
Migrando para o
Google App Engine!
BigTable API
// Get a handle on the datastore itself
DatastoreService datastore = DatastoreServiceFactory.getDatastoreServ...
#
JPA para BigTable #FTW


<provider>
  org.datanucleus.store.appengine.jpa.DatastorePersistenceProvider
</provider>
Acessando BigTable com JPA


   Livro livro = new Livro();
   manager.persist(livro);
Tá migrado!
Conclusão

• SQL queries difíceis
• ORM para o dia a dia
• NoSQL para escalabilidade, disponibilidade
• libC para insanida...
Obrigado!

  Sérgio Lopes - @sergio_caelum
     sergio.lopes@caelum.com.br
FJ-11   Java e Orientação a Objetos


        Laboratório Java com testes,
FJ-16        XML e Design Patterns


FJ-21   Ja...
Persistência Java: Hibernate e JPA
Persistência Java: Hibernate e JPA
Persistência Java: Hibernate e JPA
Persistência Java: Hibernate e JPA
Persistência Java: Hibernate e JPA
Persistência Java: Hibernate e JPA
Persistência Java: Hibernate e JPA
Persistência Java: Hibernate e JPA
Persistência Java: Hibernate e JPA
Persistência Java: Hibernate e JPA
Upcoming SlideShare
Loading in...5
×

Persistência Java: Hibernate e JPA

11,939

Published on

Palestra sobre persistência em Java com Hibernate e JPA

Published in: Technology

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

×