免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2470 | 回复: 0
打印 上一主题 下一主题

Hibernate学习一:配置及碰到问题解决 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-12-06 10:59 |只看该作者 |倒序浏览

文章主要内容来自
http://www.jspcn.net/htmlnews/6008103182.html
的内容,将作者用的Oracle数据库换为mysql。
下载文件 需要Java SDK、 Hibernate包、Ant包、和JDBC Driver。
1、Hibernate包下载地址:
https://www.hibernate.org/6.html
我下载的是  Hibernate Core 3.3.2.GA。
2、Ant包下载地址:
http://ant.apache.org/bindownload.cgi
  我下载的是apache-ant-1.7.1-bin.zip。
3、JDBC 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目录下,创建两个目录: hibernate和db。 这样你有了如下的文件结构:
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文件copy到c:\workspace\My1stHibernate\lib\hibernate下。
将c:\dev你的Hibernate包所在目录>lib 下的所有文件同样copy到c:\workspace\My1stHibernate\lib\hibernate下。
将你的JDBC Driver文件(一般是一个jar文件)copy到c:\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"
          "http://hibernate.sourceforge.net/hibernate-mapping-3.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 3.0//EN"
          "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
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。这里说一下jre和jdk的区别。Jre是运行环境,及编译后的java程序运行时只需要jre就行了;jdk是开发环境,当你开发java程序时需要用jdk。Jdk包括了jre,及java程序运行有jre或jdk都可以,但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 官方有常见错误解答: http://www.slf4j.org/codes.html#log4j_version
得知此错误原因是:
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。


本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u2/88970/showart_2112211.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP