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

Hibernate極速入門:零依賴、純Java實戰教程(附完整代碼)

     編輯:J2EE

初學者誤區與本教程定位

大多數入門教程混雜Tomcat、Eclipse、Log4j、Struts、XDoclet甚至JBoss,導致初學者誤以為Hibernate依賴重型容器。事實上,Hibernate是獨立框架,無需任何Web/App Server支援。本教程剝離所有干擾因素,僅保留JDK、Hibernate、Ant、JDBC驅動,建立最低門檻的Hello World。

環境準備與目錄結構

必要下載

環境變量配置

ANT_HOME=c:\dev\apache-ant-1.6.1
PATH=%ANT_HOME%\bin;%PATH%

JAVA_HOME=c:\j2sdk1.4.x
PATH=%JAVA_HOME%\bin;%PATH%

專案目錄結構

c:\workspace\My1stHibernate\
├── src\           # 源碼與映射文件
├── classes\       # 編譯輸出
└── lib\
    ├── hibernate\ # hibernate2.jar + lib/* 所有依賴
    └── db\        # JDBC驅動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)
);

核心代碼實現

1. 實體類 Customer.java

public class Customer {
    private int id;
    private String username;
    private String password;

    // 標準getter/setter...
    public int getId() { return id; }
    public void setId(int id) { this.id = id; }
    public String getUsername() { return username; }
    public void setUsername(String username) { this.username = username; }
    public String getPassword() { return password; }
    public void setPassword(String password) { this.password = password; }
}

2. 測試類 Test.java

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();
        }
    }
}

3. 映射文件 Customer.hbm.xml

<?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>

4. Ant構建腳本 build.xml

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

    <path id="myclasspath">
        <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" description="compile source">
        <javac classpathref="myclasspath" 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="myclasspath" classname="Test" fork="true"/>
    </target>

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

5. Hibernate配置 hibernate.cfg.xml(Oracle 9i範例)

<?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_username</property>
        <property name="connection.password">your_password</property>
        <property name="dialect">net.sf.hibernate.dialect.Oracle9Dialect</property>
        <mapping resource="Customer.hbm.xml"/>
    </session-factory>
</hibernate-configuration>

其他資料庫請參考Hibernate安裝目錄下src/hibernate.properties中的方言與驅動配置。

執行驗證

c:\workspace\My1stHibernate> ant run

預期輸出:

run:
    [java] Hibernate: insert into CUSTOMER (USERNAME, PASSWORD, CID) values (?, ?, ?)
    ... (200條記錄)
BUILD SUCCESSFUL

資料庫中CUSTOMER表將新增200條記錄,全程零JDBC手寫代碼。遷移資料庫僅需修改hibernate.cfg.xml中的四個屬性值。

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