Perbedaan JPA, Hibernate, dan JDBC dapat dijelaskan sebagai berikut:
1. JPA (Java Persistence API)
JPA adalah spesifikasi Java untuk manajemen data persisten. JPA hanya mendefinisikan serangkaian antarmuka (interface) dan anotasi, tetapi tidak memberikan implementasi konkret. Framework seperti Hibernate adalah implementasi dari JPA.
Fitur Utama JPA:
- Anotasi untuk mendefinisikan relasi entitas.
- Query menggunakan JPQL (Java Persistence Query Language), mirip dengan SQL tetapi berbasis entitas.
- Deklaratif dan fokus pada ORM (Object Relational Mapping).
Contoh Implementasi JPA:
Java----------------------@Entity public class User { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String name; private String email; // Getter dan Setter } public class UserDAO { private EntityManager entityManager; public UserDAO(EntityManager entityManager) { this.entityManager = entityManager; } public void saveUser(User user) { entityManager.getTransaction()
.begin(); entityManager.persist(user); entityManager.getTransaction() .commit(); } public User findUser(Long id) { return entityManager.find(User.class, id); } }
2. Hibernate
Hibernate adalah implementasi dari JPA sekaligus framework ORM (Object Relational Mapping) yang menawarkan fitur tambahan di luar JPA, seperti caching, custom SQL, dan lain-lain. Hibernate mendukung JPA, tetapi Anda juga dapat menggunakan API Hibernate tanpa JPA.
Fitur Utama Hibernate:
- Fitur caching tingkat pertama (session cache) dan tingkat kedua (distributed cache).
- Query dengan HQL (Hibernate Query Language), yang serupa dengan JPQL.
- Fitur mapping lebih luas dibandingkan JPA.
Contoh Implementasi Hibernate (Non-JPA):
java-----------------------------------@Entity public class Product { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String name; private Double price; // Getter dan Setter } public class ProductDAO { private Session session; public ProductDAO(Session session) { this.session = session; } public void saveProduct(Product product) { Transaction transaction = session.beginTransaction(); session.save(product); transaction.commit(); } public Product findProduct(Long id) { return session.get(Product.class, id); } }
3. JDBC (Java Database Connectivity)
JDBC adalah API tingkat rendah untuk menghubungkan Java dengan database. Tidak ada abstraksi ORM di sini; pengembang langsung menulis query SQL mentah. JDBC memberikan kontrol penuh atas database tetapi lebih rawan kesalahan dan membutuhkan banyak kode boilerplate.
Fitur Utama JDBC:
- Menggunakan SQL secara langsung.
- Memberikan fleksibilitas untuk query kompleks.
- Tidak menyediakan ORM, sehingga data diakses sebagai tabel.
Contoh Implementasi JDBC:
javaimport java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; public class CustomerDAO { private Connection getConnection() throws Exception { String url = "jdbc:mysql://localhost:3306/
mydb"; String username = "root"; String password = "password"; return DriverManager.getConnection( url, username, password); } public void saveCustomer(String name, String email) throws Exception { Connection connection = getConnection(); String query = "INSERT INTO customers (name, email) VALUES (?, ?)"; PreparedStatement statement = connection.prepareStatement( query); statement.setString(1, name); statement.setString(2, email); statement.executeUpdate(); connection.close(); } public void findCustomer(int id) throws Exception { Connection connection = getConnection(); String query = "SELECT * FROM customers WHERE id = ?"; PreparedStatement statement = connection.prepareStatement( query); statement.setInt(1, id); ResultSet resultSet = statement.executeQuery(); while (resultSet.next()) { System.out.println("Name: " + resultSet.getString("name")); System.out.println("Email: " + resultSet.getString("email")); } connection.close(); } }
Perbandingan Singkat:
Fitur | JPA | Hibernate | JDBC |
---|---|---|---|
Level Abstraksi | Tinggi (ORM) | Tinggi (ORM + fitur tambahan) | Rendah (SQL mentah) |
Query | JPQL | HQL, Native SQL | SQL langsung |
ORM | Ya | Ya | Tidak |
Anotasi | Ya | Ya | Tidak |
Kinerja | Bergantung pada implementasi | Bisa dioptimalkan (caching) | Bergantung pada kode SQL |
Kesimpulan:
- Gunakan JPA atau Hibernate jika Anda menginginkan pengelolaan database berbasis objek dengan sintaks deklaratif.
- Gunakan JDBC jika Anda memerlukan kontrol penuh dan fleksibilitas terhadap query SQL.
No comments:
Post a Comment