Interview question
What is the difference between JDBC and an ORM like Hibernate? JDBC और Hibernate जैसे ORM में क्या अंतर है?
Answer
| Aspect | JDBC | Hibernate (ORM) |
|---|---|---|
| Abstraction level | Low-level, direct SQL | High-level, objects mapped to tables |
| SQL writing | Manual, full control | Auto-generated (HQL/JPQL or Criteria API) |
| Boilerplate | More - manual ResultSet mapping | Less - automatic object mapping |
| Caching | None built-in | Built-in first/second-level caching |
| Database portability | SQL often database-specific | More portable via dialect abstraction |
// JDBC - manual mapping from ResultSet to object
PreparedStatement pstmt = conn.prepareStatement('SELECT * FROM users WHERE id = ?');
pstmt.setInt(1, userId);
ResultSet rs = pstmt.executeQuery();
User user = null;
if (rs.next()) {
user = new User();
user.setId(rs.getInt('id'));
user.setName(rs.getString('name'));
user.setEmail(rs.getString('email'));
}
// Hibernate (ORM) - object-relational mapping via annotations
@Entity
@Table(name = 'users')
class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
private String name;
private String email;
// getters/setters
}
// Fetching with Hibernate - no manual SQL or ResultSet mapping needed
Session session = sessionFactory.openSession();
User user2 = session.get(User.class, userId);
// HQL (Hibernate Query Language) - object-oriented, not raw SQL
Query<User> query = session.createQuery('FROM User WHERE email = :email', User.class);
query.setParameter('email', 'john@example.com');
User result = query.uniqueResult();
// When to use which:
// JDBC: fine-grained control, performance-critical raw queries, simple apps
// Hibernate/JPA: complex domain models, less boilerplate, faster development| पहलू | JDBC | Hibernate (ORM) |
|---|---|---|
| Abstraction level | Low-level, direct SQL | High-level, objects tables से mapped |
| SQL लिखना | Manual | Auto-generated |
| Caching | Built-in नहीं | Built-in caching |
// JDBC - manual mapping
PreparedStatement pstmt = conn.prepareStatement('SELECT * FROM users WHERE id = ?');
pstmt.setInt(1, userId);
ResultSet rs = pstmt.executeQuery();
User user = null;
if (rs.next()) {
user = new User();
user.setId(rs.getInt('id'));
user.setName(rs.getString('name'));
}
// Hibernate (ORM) - annotations से mapping
@Entity
@Table(name = 'users')
class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
private String name;
private String email;
}
Session session = sessionFactory.openSession();
User user2 = session.get(User.class, userId);
Query<User> query = session.createQuery('FROM User WHERE email = :email', User.class);
query.setParameter('email', 'john@example.com');
User result = query.uniqueResult();Was this answer clear?