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

Hibernate 極速入門:零依賴、純 Java SE 環境實作

     編輯:Java 相關知識

許多入門教學混雜了 Tomcat、Eclipse、Struts、JBoss 等雜項,嚇退初學者。本文回歸本質:Hibernate 是獨立框架,只需 JDK、JDBC Driver、Ant (建構工具) 即可運行。以下提供最精簡的「Hello World」級實作步驟。

準備工作

  1. JDK:已安裝並設定 JAVA_HOME。
  2. Hibernate:下載 最新版,解壓至 c:\dev\hibernate-x.x。
  3. Ant:下載 Ant 1.6.1,解壓至 c:\dev\ant-x.x,設定 ANT_HOME 並加入 PATH。
  4. JDBC Driver:依資料庫下載 (Oracle, MySQL, PostgreSQL, SQL Server)。

專案目錄結構

c:\workspace\My1stHibernate\
├── src\           (原始碼、映射檔、設定檔)
├── classes\       (編譯輸出、資源檔複製處)
└── lib\
    ├── hibernate\ (hibernate2.jar + lib/*.jar)
    └── db\        (JDBC Driver jar)

資料庫準備

CREATE DATABASE hibernate_test;
USE hibernate_test;
CREATE TABLE CUSTOMER (
  CID INTEGER NOT NULL PRIMARY KEY,
  USERNAME VARCHAR(12) NOT NULL,
  PASSWORD VARCHAR(12)
);

Java 類別

Customer.java (POJO,置於 src)

public class Customer {
    private int id;
    private String username;
    private String password;
    // getter / setter 略
}

Hibernate 映射檔

Customer.hbm.xml (置於 src,與 Customer.java 同目錄)

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
  "-//Hibernate/Hibernate Mapping DTD//EN"
  "https://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd">
<hibernate-mapping>
  <class name="Customer" table="CUSTOMER">
    <id name="id" column="CID">
      <generator class="increment"/>
    </id>
    <property name="username" column="USERNAME"/>
    <property name="password" column="PASSWORD"/>
  </class>
</hibernate-mapping>

Hibernate 設定檔

hibernate.cfg.xml (置於 src)

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
  "-//Hibernate/Hibernate Configuration DTD//EN"
  "https://hibernate.sourceforge.net/hibernate-configuration-2.0.dtd">
<hibernate-configuration>
  <session-factory name="java:/hibernate/HibernateFactory">
    <property name="show_sql">true</property>
    <property name="connection.driver_class">oracle.jdbc.driver.OracleDriver</property>
    <property name="connection.url">jdbc:oracle:oci8:@hibernate_test</property>
    <property name="connection.username">your_user</property>
    <property name="connection.password">your_pass</property>
    <property name="dialect">net.sf.hibernate.dialect.Oracle9Dialect</property>
    <mapping resource="Customer.hbm.xml"/>
  </session-factory>
</hibernate-configuration>

其他資料庫請參考 Hibernate 套件內 src/hibernate.properties 範例替換 driver、url、dialect。

Ant 建構腳本

build.xml (專案根目錄)

<project name="My1stHibernate" default="build" basedir=".">
  <property name="src.dir" value="src"/>
  <property name="build.dir" value="classes"/>
  <property name="lib.dir" value="lib"/>

  <path id="cp">
    <fileset dir="${lib.dir}"><include name="**/*.jar"/></fileset>
    <pathelement location="${build.dir}"/>
  </path>

  <target name="init"><mkdir dir="${build.dir}"/></target>

  <target name="build" depends="init">
    <javac classpathref="cp" srcdir="${src.dir}" destdir="${build.dir}"/>
    <copy todir="${build.dir}">
      <fileset dir="${src.dir}"><exclude name="**/*.java"/></fileset>
    </copy>
  </target>

  <target name="run" depends="build">
    <java classpathref="cp" classname="Test" fork="true"/>
  </target>

  <target name="clean">
    <delete includeEmptyDirs="true"><fileset dir="${build.dir}"/></delete>
  </target>
</project>

測試程式

Test.java (置於 src)

import net.sf.hibernate.*;
import net.sf.hibernate.cfg.*;

public class Test {
  public static void main(String[] args) {
    try {
      SessionFactory sf = new Configuration().configure().buildSessionFactory();
      Session session = sf.openSession();
      Transaction tx = session.beginTransaction();
      for (int i = 0; i < 200; i++) {
        Customer c = new Customer();
        c.setUsername("customer" + i);
        c.setPassword("customer");
        session.save(c);
      }
      tx.commit();
      session.close();
    } catch (HibernateException e) { e.printStackTrace(); }
  }
}

執行與驗證

命令列進入專案目錄,執行 ant run。若見到 Hibernate: insert into CUSTOMER ... 及 BUILD SUCCESSFUL,即代表成功寫入 200 筆資料,全程未寫一行 JDBC 代碼。

後續擴充

未來更換資料庫,僅需修改 hibernate.cfg.xml 中的連線參數與方言,代碼零修改。

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