Subjects

All subjects Django Java Python React Spring Boot JavaScript PHP
Sign Up Free
Question 9 of 10 · Java Database Connectivity (JDBC)
Interview question

What is the difference between JDBC and an ORM like Hibernate? JDBC और Hibernate जैसे ORM में क्या अंतर है?

Answer
AspectJDBCHibernate (ORM)
Abstraction levelLow-level, direct SQLHigh-level, objects mapped to tables
SQL writingManual, full controlAuto-generated (HQL/JPQL or Criteria API)
BoilerplateMore - manual ResultSet mappingLess - automatic object mapping
CachingNone built-inBuilt-in first/second-level caching
Database portabilitySQL often database-specificMore 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
पहलूJDBCHibernate (ORM)
Abstraction levelLow-level, direct SQLHigh-level, objects tables से mapped
SQL लिखनाManualAuto-generated
CachingBuilt-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?