Chinaunix首页 | 论坛 | 博客
  • 博客访问: 151871
  • 博文数量: 34
  • 博客积分: 2010
  • 博客等级: 大尉
  • 技术积分: 346
  • 用 户 组: 普通用户
  • 注册时间: 2008-12-19 09:53
文章分类

全部博文(34)

文章存档

2011年(1)

2009年(33)

我的朋友

分类: Java

2009-12-06 10:59:10

文章主要内容来自 的内容,将作者用的Oracle数据库换为mysql

下载文件 需要Java SDK Hibernate包、Ant包、和JDBC Driver

1Hibernate包下载地址: 我下载的是  Hibernate Core 3.3.2.GA

2Ant包下载地址:   我下载的是apache-ant-1.7.1-bin.zip

3JDBC Driver要根据你用的database来定,一般database官方网站上都会有。 Hibernate支持常用的database,比如 MySQL, Oracle, PostgreSQL, MS-SQL Server。我用的是mysql

MySQL JDBC Driver下载地址

http://dev.mysql.com/downloads/connector/j/5.1.html

4、将Hibernate包和Ant包分别解压至c:dev(此目录不重要,你可以换其它任何目录)

 

配置环境:

1、你需要添加一个新的环境变量:

ANT_HOME,让它指向c:\dev<你的ANT包所在目录>。并在PATH环境变量里添加%ANT_HOME%\bin

2、你需要添加一个新的环境变量:

JAVA_HOME,让它指向你的j2sdk根目录。并在PATH环境变量里添加%JAVA_HOME%\bin

3、创建一个项目目录,比如c:\workspace\My1stHibernate 在项目目录下,另外创建三个目录: src, classes, lib lib目录下,创建两个目录: hibernatedb 这样你有了如下的文件结构:

c:\workspace\My1stHibernate

c:\workspace\My1stHibernate\src

c:\workspace\My1stHibernate\classes

c:\workspace\My1stHibernate\lib

c:\workspace\My1stHibernate\lib\hibernate

c:\workspace\My1stHibernate\lib\db

4、将c:\dev<你的Hibernate包所在目录>

Hibernate3.jar文件copyc:\workspace\My1stHibernate\lib\hibernate下。

c:\dev<你的Hibernate包所在目录>lib 下的所有文件同样copyc:\workspace\My1stHibernate\lib\hibernate下。

将你的JDBC Driver文件(一般是一个jar文件)copyc:\workspace\My1stHibernate\lib\db下。 创建数据库

1、用你最喜爱的database软件,创建一个hibernate_test的数据库。 2、在此数据库下,新建一个table名为CUSTOMER.

Mysql创建步骤:

C:\Program Files\MySQL\MySQL Server 5.0\bin>net start mysql   启动数据库服务

在另一个cmd中连接数据库:mysql –uroot –p;输入密码。连接成功后用create database db创建数据库,用use db命令选择数据库,然后创建表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 org.hibernate.*;
import org.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 < 10; 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 3.0//EN"
          "">
<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描述文件可以是一个propertiesxml文件,其中最重要的是定义数据库的连接。我这里列出的是一个XML格式的hibernate.cfg.xml描述文件。


<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE hibernate-configuration PUBLIC
          "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
          "">
<hibernate-configuration>
<session-factory name="java:/hibernate/HibernateFactory">
<property name="show_sql">true</property>
<property name="connection.driver_class">
com.mysql.jdbc.Driver
<!-- 这里是mysql的JDBC driver class名 -->
</property>
<property name="connection.url">
jdbc:mysql://localhost:3306/hibernate_test
<!--这里是mysql的hibernate_test数据库URL -->
</property>
<property name="connection.username">
root
</property>
<property name="connection.password">
root
</property>
<property name="dialect">
org.hibernate.dialect.MySQLDialect
<!-- 这里是mysql的Dialect -->
</property>
<mapping resource="Customer.hbm.xml"/>
<!-- 指定Customer的映射文件 -->
</session-factory>
</hibernate-configuration>

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

Buildfile: build.xml

init:

build:

     [copy] Copying 1 file to E:\ProgramLib\MyHibernate\classes

run:

     [java] 15 [main] INFO org.hibernate.cfg.Environment - Hibernate 3.3.2.GA

。。。。。。

     [java] Hibernate: select max(CID) from customer

     [java] Hibernate: insert into customer (username, password, CID) values (??, ?)

     [java] Hibernate: insert into customer (username, password, CID) values (??, ?)

     [java] Hibernate: insert into customer (username, password, CID) values (??, ?)

     [java] Hibernate: insert into customer (username, password, CID) values (??, ?)

。。。。。。

 

到你的hibernate_test数据库看一下,在CUSTMOR表里新添了10条记录,但你没有写任何JDBC code。以后如果你要更换数据库,只需要改变hibernate.cfg.xml描述文件里相应的值即可。

 

结论 此文是一篇门槛极低的入门介绍。我给一个完全不懂Hibernate的朋友看,他用了不到30分钟就运行了他的第一个Hibernate程序,从此引起了 他对Hibernate的兴趣。但读者必须认识到这只是一个开始,此文实乃窥Hibernate冰山一角上的一颗小冰晶。千里之行始于足下,你可以把此文章当迈向Hibernate大道的一个起点。

 

其中碰到的问题:

1. Unable to locate tools.jar. Expected to find it in D:\jre6\lib\tools.jar问题解决

在运行ant编译程序时碰到该问题。Ant默认在jre6目录下找tools.jar。这里说一下jrejdk的区别。Jre是运行环境,及编译后的java程序运行时只需要jre就行了;jdk是开发环境,当你开发java程序时需要用jdkJdk包括了jre,及java程序运行有jrejdk都可以,但jdk包括了在开发过程中需要的工具。如果只是运行java程序,只要jre就行了,因为jre要比jdk省空间。

我在配置java环境时一般都将D:\jdk6\bin目录直接加入环境变量就可以了,这对java编译环境已经可以满足要求。但ant要用到tools.jar,而该文件在D:\jdk6\lib目录下,ant怎么才能找到该文件呢。经过摸索,原来问题出在JAVA_HOME这个变量名字上(在这之前都是直接设置,不用JAVA_HOME)。右击我的电脑->高级->新建用户变量:名字输入JAVA_HOME,值输入D:\jdk6。其他配置都不用改变,问题即可解决。

2. 软件包 net.sf.hibernate不存在

在用ant生成hibernate应用程序时出现如下错误:

[javac] E:\ProgramLib\MyHibernate\src\Test.java:1: 软件包 net.sf.hibernate不存在

[javac] import net.sf.hibernate.*;

[javac] ^

原来在hibernat 2下面和hibernat 3中包的名称不一样,我导入的是hibernat 2中的包:

import net.sf.hibernate.*;

import net.sf.hibernate.cfg.*;

用的是hibernat 3,所以得导入hibernat 3中的包,改为

import org.hibernate.*;

import org.hibernate.cfg.*;

问题解决

3. Failed to load class "org.slf4j.impl.StaticLoggerBinder" 问题解决

分析问题,由于是找不包slf4j相应的jar包,因此是由于少jar包的原因。

slf4j 官方有常见错误解答:

得知此错误原因是:

This error is reported when the org.slf4j.impl.StaticLoggerBinder class could not be loaded into memory. This happens when no appropriate SLF4J binding could be found on the class path. Placing one (and only one) of slf4j-nop.jar , slf4j-simple.jar , slf4j-log4j12.jar , slf4j-jdk14.jar or logback-classic.jar on the class path should solve the problem.

在官方下载 slf4j-1.5.2.zip

解压出slftj-nop-1.5.jar导入项目,后无报错,问题解决。

4. 抛出异常: [java] org.hibernate.HibernateException: problem parsing configuration/hibernate.cfg.xml,其实重点是后面的一句: [java] Caused by: org.dom4j.DocumentException: Invalid byte 2 of 2-byte UTF-8 sequence. Nested exception: Invalid byte 2 of 2-byte UTF-8 sequence.

原因:copy文章里的代码保存的时候,因为有中文,默认保存成了GB2312格式。解决:把hibernate.cfg.xml存成utf-8格式

5. [java] org.hibernate.HibernateException: JDBC Driver class not found: com.mysql.jdbc.driver

[java] Caused by: java.lang.ClassNotFoundException: com.mysql.jdbc.driver

类名字写错了:com.mysql.jdbc.Driver,小写d改为大写D


阅读(2343) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~