Hiberante初学

第一步:

    下载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/360137036http://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可以小试牛刀,成功执行了!这里面只是进行插入测试。

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值