第一步:
下载Hiberante,它的官网是http://hibernate.org/,一般使用Hibernate ORM这里的这个就可以了,如图1
图1
之后会跳转到这个网站http://hibernate.org/orm/ 它现在最新更新到4.3.5版本。这里我使用的是3.3.2的GA版本(因为这个版本最稳定,而且现在应用的最多,其下载地址是:http://sourceforge.net/projects/hibernate/files/hibernate3/3.3.2.GA/,一般windows环境下使用的是
hibernate-distribution-3.3.2.GA-dist.zip |
---|
而这个hibernate-distribution-3.3.2.GA-dist.tar.gz一般都是有linus下用的),
http://sourceforge.net/projects/hibernate/files/,这里是所有Hiberanate的下载地址。
第二步:
因为MyElicpse集成度太高,所以初学的时候,一般不使用,我这里使用的是Eclipse,在这里我们新建一个java项目,也可以新建一个JavaWeb项目,为了方便运行,以java项目为例。
首先,解压下载的hibernate-distribution-3.3.2.GA,在里面找到
这里的这个lib中文是类库的意思,在这个lib里面,它的文件结构是这样的:
将 required里面的所必须jar复制出来(这其实还缺少了一些jar包,在下面有讲到),这个三个文件夹的意思
是:字解码文件,可选的,必须的。
为了方便后面开发,这里把这个三件夹里面的所有jar复制出来,放在一个新建的lib文件夹里面,
除了这些jar之外,真正要能运行hibernate时,还应要如下的一 些jar包:(想偷懒? 呵呵,直接复制lib目录下的JPA的那个包里面的jar,就可以正常运行了。)
1.
commons-lang-2.3(或更高版本),这里给出所有的commons-langs下载地址是:
http://commons.apache.org/proper/commons-lang/download_lang.cgi(所有的commons-langs)
一般用这个Apache Commons Lang 2.6 (Requires Java 1.2 or later)可以了,下的时候选这个commons-lang-2.6-bin.zip下载(点击蓝色字体直接下载)
2.
slf4j-log4j12-1.5.8.jar:这个在这里的解释是这样的:(点击了解全部的地址是:http://baike.sogou.com/v54388530.htm)
SLF4J,即简单日志门面(Simple Logging Facade for Java),不是具体的日志解决方案,它只服务于各种各样的日志系统。按照官方的说法,SLF4J是一个用于日志系统的简单Facade,允许最终用户在部署其应用时使用其所希望的日志系统。
也就是在required里面的slf4j-api-1.5.8.jar这里的这个实现包(因为这个slf4j-api-1.5.8.jar里面只定义了一些接口和类,还没有真正实现):下载地址是:http://www.slf4j.org/dist/注意在里面找到slf4j-1.5.8.zip,跟下面的注释是一样的,有这一步的话,下在的注释可以不看。
3.log5j-1-2.16.jar或更高版本,它是一个记录日志jar包,最新的地址是:http://logging.apache.org/log4j/2.x/download.html如果不喜欢最新的,
点击这个地址http://archive.apache.org/dist/logging/log4j/找到自己实际用的版本,我这里使用的是log5j-1-2.16;
4.数据连接驱动:ojbc14.jar这个在oracle安装目录里面有,也可以在这个网站下载http://www.oracle.com/technetwork/cn/database/features/jdbc/index-093096-zhs.html
针对上面的zip文件,解压之后找到相对的名称即可。
对于一些版本使用的,看这里的这两个网站:
SLF4J错误代码(运行的时候日志报出来的的错误代码表,):http://www.slf4j.org/codes.html#StaticLoggerBinder
对于SLF4J里面的Failed to load class "org.slf4j.impl.StaticLoggerBinder".这个异常,使用slf4j-nop.jar这个的话,看这里的这两个网站:
http://bbs.csdn.net/topics/360137036和http://blog.csdn.net/Rogues/article/details/6123283
Log4J错误代码表:http://logging.apache.org/log4j/2.x/javadoc.html
在其里面找到required这个目录,解压出来的是如下这样子的:
,把里面所有的jar包都复制出来,放在一个新建的lib文件里面。
添加hibernate.cfg.xml这个文件和Person.hbm.xml映像文件还有Person映射类过来时(这里的Person类成员对应于oracle数据库里面对应的列,类名可以随便起,但最好是见名知意),关于hibernate.cfg.xml和用户映射文件的配置在下面有详细说明。
注:
在indio及以上的版本运行的时候,如果报如下的错误:
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
Exception in thread "main" java.lang.NoClassDefFoundError: org/slf4j/impl/StaticLoggerBinder
at org.slf4j.LoggerFactory.getSingleton(LoggerFactory.java:223)
at org.slf4j.LoggerFactory.bind(LoggerFactory.java:120)
at org.slf4j.LoggerFactory.performInitialization(LoggerFactory.java:111)
at org.slf4j.LoggerFactory.getILoggerFactory(LoggerFactory.java:269)
at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:242)
at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:255)
at org.hibernate.cfg.Configuration.<clinit>(Configuration.java:152)
at Test.main(Test.java:13)
Caused by: java.lang.ClassNotFoundException: org.slf4j.impl.StaticLoggerBinder
at java.net.URLClassLoader$1.run(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
... 8 more
说明在这里的所有文件中,它还少了slf4j-nop.jar,可以在这里下载hibernate-distribution-3.3.2.GA对应的slf4j-nop.jar,地址是(所有的Hibernage里面要用的slf4J都可以在这里这个下载列表找到对应的):http://www.slf4j.org/dist/,这个地址若无法访问,单击点此 直接访问。
如果想要出新的也可以打开http://www.slf4j.org/download.html这个地址,它是官方最新的下载slf4j,如果不知道的话,看这个图就可以了
之后在解压出来的hibernate的目录那里找到hibernate3.jar这个Hibernate核心运行库。也一起放在lib这个文件夹里面。接下来我们找数据库驱动文件,这里以oracle为例。一般在oracle里面里%oracle安装路径%:\app\ye\product\11.2.0\dbhome_1\jdbc\lib这里面找,我们这里使用的是最新的数据驱动包ojdbc14.jar。。这里是所有的jdbc驱动下载http://www.oracle.com/technetwork/cn/database/features/jdbc/index-093096-zhs.html,或点此打开。
第三步:
点击新建的java项目,将刚才新建的lib文件加载到java项目中,在eclipse(myEclipse类似)中,找到要添加的java项目,点右键 buid path(中文是建立路径)或者下面的 Properties(中文意思是属性),打开之后,找到Libraries选项卡,点击右边的Add external jars这个按钮。将lib里面所有的jar添加进来
根据如图这样配置:
注:如果是javaWeb项目的话,一定要放在WebRoot下面的lib里面。直接复制里面的jar包进lib即可(最后也是再点一下add external jars这个添加进去,这样一是保证jar包没有拷贝少,而且相对没有添加的速度更加快)。
第四步:
配置Hernate里面的hibernate.cfg.xml文件:
对于hibernate.cfg.xml这个文件(一个字一字字打进来也可以,但是不推荐,速度慢,而且容易出错),如果没有的话,可以分如下三种方法设置。
方法1:直接从以前的项目那里复制一份过来,与第五步的类映射文件也是一样;
方法2:在网上搜一下这个hibernate.cfg.xml也有,当然得在有网的情况下。
方法3:本方法是针对没有网的情况下,及方法1里面说的以前项目没有情况下。(对于初学者,推荐使用方法3)
本方法3是如下这样子的:
首先在hibernate-distribution-3.3.2.GA解压出来的目录下直接进里面的project文件夹里面找到etc里面就乖乖趟着一个名为hibernate.cfg.xml的文件,一般要这个就可以了,打开之后,发现要输入的还是要比较多的,
如图3
在这里,我们在找一下不用输入这么多的,在哪里找呢?这在这个project目录下面的tutorials文件夹里面就有了,这个tutorials中文意思就是官方指导的意思。。
找到这里,
注意:一定要是它里面的这个web\src\main\resources里面的哦,其他的暂时就没有发现有这个配置文件完整 的了。
找到之后,打开,打开发现写的好完整,这里给出去空内容行之后的截图:
对于初学的我们之要修改下面的这些就可以了
<?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>
<!-- 链接信息,注意这里的org.hsqldb.jdbcDriver,这个是纯java开发的数据库,现在已经没有这个数据库了-->
<property name="connection.driver_class">org.hsqldb.jdbcDriver(这里请设置为oracle.jdbc.driver.OracleDriver,因为是用oracle来测试的)</property>
<!--jdbc:oracle:thin:@localhost:1521:db--><!--正确-->
<!--jdbc:oracle:thin@localhost:1521:db-->
<!--注意上面的少了一个:-->
<property name="connection.url">jdbc:hsqldb:hsql://localhost(设置为jdbc:oracle:thin:@localhost:1521:db)</property>
<property name="connection.username">ynr(连接名,根据自己配置的数据库填写,下面的密码也是)</property>
<property name="connection.password">123</property>
<!-- 链接池信息-->
<property name="connection.pool_size">2</property>
<!-- 连接方言-->
<property name="dialect">org.hibernate.dialect.HSQLDialect(设置为oracle方言,如下:org.hibernate.dialect.Oracle10gDialect)</property>
<!--指定session查询范围,请设置为Thread,这对后面有用,也就是当Session那里如果使用的时getCurrentSession()方法时,可以操作结束之后,不必关闭Session,它在使用事务提交之后会自动关闭Session-->
<property name="current_session_context_class">thread(注意大小写)</property>
<property name="show_sql">true</property>
<!--设置映射文件路径,根据自己的项目类映射路径设置,特别注意,这里的不是包名.类名来,而是使用
包名/类名.hbm.xml的形式-->
<mapping resource="entity/Person.hbm.xml"/>
</session-factory>
</hibernate-configuration>
针对上面的这个的相关问题:
1:注意JDBC连接的方式,特别是标点符号和字母一定要注意;
2.关到如何寻找数据库连接方言的问题,其可以在解压出来的Hibernate目录里面的project\etc,我这里默认解压之后的文件名为hibernate-distribution-3.3.2.GA,所以就是hibernate-distribution-3.3.2.GA\project\etc(注意\这个符号表示路径名。)这个目录里面的hibernate.properties这个属性文件里面找到(用记事本打开就可了或者eclipse或MyEclipse或者像notpad++、editplus之类的文本工具打开)。
第五步:配置持久化类和对应的映射文件:
首先在数据库中新建一个表,这里以新建两列为列。
create table users(
userNames varchar2(20) primary key,
password varchar2(20)
);
之所以用primary Key。因为防止数据重复,初次写的话,可以不必设置。
其次是建立对面的持久化映像类,并将期放在一个包中,方便管理:(其成员变量,也称为属性设置为数据表里面的列名即可);
package entity;
public class Person {
private String userNames;
private String password;
public String getUserNames() {
return userNames;
}
public void setUserNames(String userNames) {
this.userNames = userNames;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
再次是配置持久化类映射文件(注意保存的位置跟持久化类在同一个类里面,虽然不是必须在同一目录,但是为了方便,所以放在同一个目录。熟练以后可以直接使用在持久化类里面使用标注的形式,就可以少了映射文件):
<?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="entity.Person" table="users">
<!--设置主键-->
<!--id是必须,其name是对应于持久类里面的字段属性,并注意大小写,也就是对应持久类里面的属性即可,type为其对应的类型,注意是lang包里面的,如果属性那里是int型的,这里必须是Interger型。Hibernate里面它都是进行类型转换之后存进数据库,取出来反之也是进行类型转换之后取出来的,column是对面表里面的列名,大小不重要。!<property />这样闭合也可以,也可以是<property ></property>,只要注意是闭合即可,下同-->
<id name="userNames" type ="java.lang.String">
<column name="userNames" length='20'/>
<generator class="assigned"/>
</id>
<!--设置其他列,注意所有的name里面对应实体类属性,并区分大小写,与实体映射类一致-->
<property name="password" type="java.lang.String"
column ="password" />
<--如果有多列,则都是用<property/或<property></property>来设置,如果 是属性是日期类的话,可以用type=“java.util.Date”,实体类那里也是一样哦。这种方时是只精确到天,而没有时分秒的-->
</class>
</hibernate-mapping>
关于这个映像文件有如下三种方式取得:
1.以前的项目直接拷贝
2.网上找
3.从Hibernate解压出来的文件里面找。其路径是:project下的tutorials这里面,在这里按下ctrl + F键,查询*.xml文件即可。也可以在这里project\tutorials\eg\src\main\java\org\hibernate\auction或者roject\tutorials\web\src\main\resources\org\hibernate\tutorial\domain找到,这里跟上面的Hibernate配置文件一样。修改之后,记得在Hibernate里面的在sessionfactory前面加上这个映射文件路径,比如前面我配置好的是 <mapping resource="entity/Person.hbm.xml"/>,这里,它是包名/类名。
第六步:进行测试:
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.hibernate.classic.Session;
import entity.Person;
public class Test {
public static void main(String[] args) {
Person person = new Person();
person.setUserNames("good");
person.setPassword("123");
Configuration conf = new Configuration().configure();
SessionFactory sf = conf.buildSessionFactory();
Session session = sf.getCurrentSession();//这种方式的话,就可以不必关闭session, 这里在前面的hibernate配置文件中。设置session范围为thread;
Transaction tx = session.beginTransaction();
session.save(person);
tx.commit();
}
}
到此,Hibernate可以小试牛刀,成功执行了!这里面只是进行插入测试。