Hibernate 是 ORM 框架,將數據庫表映射為 Java POJO,底層仍基於 JDBC。本文記錄配置文件編寫、映射定義與基本 CRUD 代碼。
從官網下載 hibernate-release-5.2.2.Final,導入 lib/required/ 所有 jar,可選 lib/optional/c3p0/ 連接池 jar。
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"https://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<!-- 數據庫連接 -->
<property name="connection.driver_class">com.microsoft.sqlserver.jdbc.SQLServerDriver</property>
<property name="connection.url">jdbc:sqlserver://localhost:1433;DatabaseName=webLastExam_20160727</property>
<property name="connection.username">sa</property>
<property name="connection.password">password</property>
<!-- Hibernate 方言 -->
<property name="dialect">org.hibernate.dialect.SQLServer2008Dialect</property>
<!-- 連接池大小 -->
<property name="connection.pool_size">5</property>
<!-- SQL 輸出 -->
<property name="show_sql">true</property>
<property name="format_sql">true</property>
<!-- DDL 策略 -->
<property name="hbm2ddl.auto">update</property>
<!-- 映射文件 -->
<mapping resource="entity/BookCard.hbm.xml"/>
</session-factory>
</hibernate-configuration>
關鍵點: 將數據庫連接信息從 Java 代碼剝離到配置文件,便於環境遷移;hbm2ddl.auto=update 自動更新表結構(create 會清空數據)。
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"https://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="entity.BookCard" table="t_book_card">
<id name="id" type="integer">
<column name="id"/>
<generator class="native"/>
</id>
<property name="bookName" type="string">
<column name="book_name"/>
</property>
<!-- 其他屬性映射 -->
</class>
</hibernate-mapping>

class.name:全限定實體類名。id:主鍵映射,generator class="native" 根據底層數據庫自動選擇主鍵生成策略。property:普通字段映射,指定 Hibernate 類型(string、integer、date 等)。// 1. 創建 SessionFactory(配置文件名非默認時需指定)
SessionFactory sf = new Configuration().configure("mySQLHibernate.cfg.xml").buildSessionFactory();
// 2. 打開 Session
Session session = sf.openSession();
// 3. CRUD 示例:查詢所有
Query query = session.createQuery("from BookCard");
List<BookCard> list = query.getResultList();
生產環境建議將 SessionFactory 交給 Spring 管理,通過 LocalSessionFactoryBean 在 applicationContext.xml 中定義,DAO 注入 SessionFactory 或使用 HibernateTemplate。