📜  JDBC和Java的Hibernate之间的区别(1)

📅  最后修改于: 2023-12-03 15:16:39.181000             🧑  作者: Mango

JDBC和Java的Hibernate之间的区别

1. JDBC

JDBC(Java Database Connectivity)是Java语言访问关系数据库的标准规范,它提供了一套完整的API,提供了Java应用程序与关系型数据库连接、查询、更新等操作的能力。

JDBC需要手动编写SQL语句,并通过ResultSet对象将数据存储到Java对象中。以下是JDBC代码片段示例:

Connection conn = null;
PreparedStatement pstmt = null;
ResultSet rs = null;

try {
    // 获取数据库连接
    conn = DriverManager.getConnection(DB_URL, USER, PASS);
    // 编写SQL语句
    String sql = "SELECT * FROM users WHERE age > ?";
    // 创建PreparedStatement对象
    pstmt = conn.prepareStatement(sql);
    // 设置参数
    pstmt.setInt(1, 18);
    // 执行查询操作
    rs = pstmt.executeQuery();

    // 遍历ResultSet对象
    while (rs.next()) {
        int id = rs.getInt("id");
        String name = rs.getString("name");
        int age = rs.getInt("age");
        System.out.println(id + " " + name + " " + age);
    }
} catch (SQLException e) {
    e.printStackTrace();
} finally {
    // 关闭连接、释放资源
    try {
        if (rs != null) rs.close();
        if (pstmt != null) pstmt.close();
        if (conn != null) conn.close();
    } catch (SQLException e) {
        e.printStackTrace();
    }
}
2. Hibernate

Hibernate是一个开源的对象关系映射(ORM)框架,它为Java应用程序提供了对象与关系数据库间映射的支持,使得Java程序员可以更加面向对象地访问关系数据库。Hibernate可以自动生成SQL语句和执行查询操作,同时还提供了其他的特性,例如:缓存、延迟加载、事务处理等。

Hibernate让我们不必了解底层数据访问层的实现细节,只需要定义好Java对象之间的映射关系,Hibernate就可以自动将对象持久化到关系数据库中,或者从数据库中加载出对象并实例化。以下是Hibernate代码片段示例:

SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory();
Session session = sessionFactory.openSession();

try {
    // 开启事务
    session.beginTransaction();
    // 查询User对象集合
    List<User> userList = session.createQuery("from User where age > :age")
            .setParameter("age", 18)
            .getResultList();
    // 遍历User对象集合
    for (User user : userList) {
        System.out.println(user.getId() + " " + user.getName() + " " + user.getAge());
    }
    // 提交事务
    session.getTransaction().commit();
} catch (Exception e) {
    // 回滚事务
    session.getTransaction().rollback();
} finally {
    // 关闭Session
    if (session.isOpen()) {
        session.close();
    }
    // 关闭SessionFactory
    if (!sessionFactory.isClosed()) {
        sessionFactory.close();
    }
}
3. 区别

JDBC和Hibernate都可以实现Java应用程序与关系型数据库的交互,但它们在以下方面有所不同:

  • SQL:JDBC需要手动编写SQL语句,而Hibernate可以自动生成SQL语句。
  • 对象映射:JDBC需要将ResultSet中的数据存储到Java对象中,而Hibernate直接将Java对象映射到关系数据库中。
  • 事务管理:JDBC需要手动管理事务,而Hibernate可以自动管理事务。
  • 缓存:Hibernate提供了缓存机制,可以大大提高应用程序的性能,而JDBC则没有提供缓存机制。
  • 学习曲线:JDBC是标准规范,学习起来比较容易,而Hibernate则需要掌握一些ORM的概念,学习曲线较陡峭。

总之,JDBC适合于简单的数据库操作,或者在特定的场景下使用,Hibernate则适合于复杂的数据库操作,或者需要高性能、高可靠性的情况下使用。