玩转Hibernate(二)实例解析

本文介绍如何利用Hibernate框架在不编写JDBC代码的情况下,快速完成200条记录的批量插入操作。通过创建数据库、编写Java实体类、配置Hibernate映射文件及描述文件等步骤,实现高效的数据持久化。
创建数据库

1、用你最喜爱的database软件,创建一个hibernate_test的数据库。

2、在此数据库下,新建一个table名为CUSTOMER

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


编写Java文件

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


    public int getId() {
        return id;
    }

    public String getPassword() {
        return password;
    }

    public String getUsername() {
        return username;
    }

    public void setId(int id) {
        this.id = id;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public void setUsername(String username) {
        this.username = username;
    }

}

将此类存为c:/workspace/My1stHibernate/src/Customer.java文件。

编写Test类

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 customer = new Customer();
                customer.setUsername("customer" + i);
                customer.setPassword("customer");
                session.save(customer);
            }

            tx.commit();
            session.close();

        } catch (HibernateException e) {
            e.printStackTrace();
        }
    }
}

将此类存为c:/workspace/My1stHibernate/src/Test.java文件。


创建Hibernate映射文件

因为这里只有一个Class --- Customer 和一个Table --- CUSTOMER,你只需要建立一个映射文件--- Customer.hbm.xml,来对应Customer类和CUSTOMER表之间的关系。

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
    "-//Hibernate/Hibernate Mapping DTD//EN"
    "http://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>

把此文件存为c:/workspace/My1stHibernate/src/Customer.hbm.xml,和Customer.java放在同一目录下。


编写Ant build.xml文件


你不一定要知道这个build.xml的细节,其实Ant也不是Hibernate所必须的。这里用Ant是为了简化一些任务,比如: 编译、copy、运行,等。

<?xml version="1.0" ?>

<project name="My1stHibernate" default="build" basedir=".">

    <property name="base.dir" value="." />
    <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 the source files">
        <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>


配置Hibernate描述文件

Hibernate描述文件可以是一个properties或xml 文件,其中最重要的是定义数据库的连接。我这里列出的是一个XML格式的hibernate.cfg.xml描述文件。

<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE hibernate-configuration
    PUBLIC "-//Hibernate/Hibernate Configuration DTD//EN"
    "http://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 <!-- 这里是Oracle 9i的JDBC driver class名 -->
        </property>
        <property name="connection.url">
            jdbc:oracle:oci8:@hibernate_test <!-- 这里是Oracle的hibernate_test数据库URL -->
        </property>
        <property name="connection.username">
            你的数据库用户名
        </property>
        <property name="connection.password">
            你的数据库密码
        </property>
        <property name="dialect">
            net.sf.hibernate.dialect.Oracle9Dialect <!-- 这里是Oracle 9i的Dialect -->
        </property>
       
        <mapping resource="Customer.hbm.xml" /> <!-- 指定Customer的映射文件 -->
       
    </session-factory>
   
</hibernate-configuration>

如果你用的不是Oracle 9i,可到C:/dev/<你的Hibernate包所在目录>/src/hibernate.properties文件里找到你的数据库,然后替换以上相对应的值。


开始运行

到c:/workspace/My1stHibernate下,运行ant run。如果你严格依照以上步骤,应该看到

run:
        [java] log4j:WARN No appenders could be found for logger (net.sf.hibernate.cfg.Environment).
        [java] log4j:WARN Please initialize the log4j system properly.
        [java] Hibernate: insert into CUSTOMER (USERNAME, PASSWORD, CID) values (?, ?, ?)
BUILD SUCCESSFUL

到你的hibernate_test数据库看一下,在CUSTMOR表里新添了200条记录,但你没有写任何JDBC code。
以后如果你要更换数据库,只需要改变hibernate.cfg.xml描述文件里相应的值即可。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值