首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Hibernate 進階(二):從 JDBC 到 Hibernate 完整實例對比

     編輯:Java 相關知識

前言

通過一個完整的「保存用戶」實例,對比 JDBC 與 Hibernate,直觀體會 Hibernate 的「完全面向對象」優勢。

準備工作:導入 JAR 包

核心包(Hibernate 3.x 時代):

  • hibernate3.jar
  • mysql-connector-java-3.1.13-bin.jar
  • dom4j-1.6.1.jar、commons-collections-3.1.jar
  • javassist-3.12.0.GA.jar、antlr-2.7.6.jar
  • slf4j-api-1.6.1.jar、jta-1.1.jar
  • hibernate-jpa-2.0-api-1.0.1.Final.jar

現代項目建議用 Maven/Gradle 管理依賴,版本以 Hibernate 5.x/6.x 為主。

六步構建完整示例

1. 實體類

public class User {
    private String id, name, password;
    private Date createTime, expireTime;
    // getter/setter
}

2. 數據庫建表

建庫 建表 表結構

3. 映射文件

<hibernate-mapping>
    <class name="com.entity.User">
        <id name="id"><generator class="uuid"/></id>
        <property name="name"/>
        <property name="password"/>
        <property name="createTime"/>
        <property name="expireTime"/>
    </class>
</hibernate-mapping>

4. 核心配置文件

<hibernate-configuration>
    <session-factory>
        <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
        <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/hibernate_first</property>
        <property name="hibernate.connection.username">root</property>
        <property name="hibernate.connection.password">root</property>
        <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
        <property name="hibernate.show_sql">true</property>
        <mapping resource="com/entity/User.hbm.xml"/>
    </session-factory>
</hibernate-configuration>

5. 測試代碼

public class Client {
    public static void main(String[] args) {
        Configuration cfg = new Configuration().configure();
        SessionFactory factory = cfg.buildSessionFactory();
        Session session = null;
        try {
            session = factory.openSession();
            session.beginTransaction();
            User user = new User();
            user.setName("NAME1");
            user.setPassword("PWD1");
            user.setCreateTime(new Date());
            user.setExpireTime(new Date());
            session.save(user); // 核心:無需寫 SQL
            session.getTransaction().commit();
        } catch (Exception e) {
            e.printStackTrace();
            session.getTransaction().rollback();
        } finally {
            if (session != null && session.isOpen()) session.close();
        }
    }
}

6. 運行結果

運行結果

JDBC vs Hibernate 核心對比

維度JDBCHibernate
代碼風格手寫 SQL,面向表結構操作對象,面向對象模型
SQL 維護分散在代碼中,難維護框架自動生成,集中映射文件
表結構變更需同步修改所有 SQL只改映射文件,代碼無感
對象關係手動 ResultSet → Object自動透明轉換
事務管理手動 Connection 控制Session 封裝,聲明式事務

總結

Hibernate 核心接口 Session 的 save() 一行代碼替代了 JDBC 的十幾行,實現了真正的面向對象持久化。下一章將講解配置文件與映射細節。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved