Author:ZhangGuozhong
Date:2007-5-12
1.为什么要使用Hibernate?
有对比才有问题,才会看出原因?
在以前所用的JDBC数据库方面时,我们会发现:
1).在业务逻辑中混合JDBC..即操作大量的sql语句.
2).数据库迁移或者改变时,就要修改大量的代码.
3).当底层改变时,也须要修改大量的程序.
4).在调试时,工作量也很大.
基于以上四点不难看出,问题就在于耦合程度高.而Hibernate的出现,也就是在于提供一个持久化层,用来解耦!
2.持久化层(对象---关系)
其实写持久化层,也就是在写持久化类,建立对象关系映射(ORM映射).
Hibernate让普通的Java对象变成持久化类。一个持久化类很像JavaBean,属性通过get和set方法访问,对外隐藏了内部实现的细节.(初次理解,就可当为实体Bean来使用).
Hibernate对属性使用的类型不加限制。所有的Java JDK类型和原始类型(比如String,char和float)都可以被映射,也包括Java集合框架中的类。可以把它们映射成为值,值集合,或者与其他实体相关联。id是一个特殊的属性,代表了这个类的数据库标识符(主键),它对于类似于Cat这样的实体是必需的(详见后面XML配置)。
持久化类不需要实现什么特别的接口,也不需要从一个特别的持久化根类继承下来。Hibernate也不需要使用任何编译器处理,比如字节码增强操作,它独立的使用Java反射机制和运行时类增强(通过CGLIB)。所以,在Hibernate中,持久化类的类不需要任何前提条件,我们就可以把它射成为数据库表(详见XML)。
那么到底如何在配置文件XML中配置中,想必都期待己久了吧,呵,我们慢慢来...
XML配置实体与数据库的映射(ORM.xml):
<?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="net.sf.hibernate.examples.quickstart.Cat" table="CAT">
<id name="id" type="string" unsaved-value="null" >
<column name="CAT_ID" sql-type="char(32)" not-null="true"/>
<generator class="increment"/>
</id>
<property name="name">
<column name="NAME" sql-type="varchar(16)" not-null="true"/>
</property>
<property name="sex"/>
<property name="weight"/>
</class>
</hibernate-mapping>
说明:
XML声明不必去研究,我们一起来看hibernate-mapping之间的内容,大家知道,我们要做的是关于实体与数据库的映射,那么就必然有一个实体类与数据库中的某一张表去映射,这样才会一一对映.对吧?所以在class标记中name属性为所要映射的实体类名,table为所要映射的数据库表
名....go on
这样一来,我们再看class标记下面的内容:
1).首选是id标记,id也就是上面所说的"id是一个特殊的属性,代表这个类中的主键id---即实体中的主键id,clolumn的name属性为数据库中字段的名.亦可写成<id name="id" column="CAT_ID" type="string"> 即将实体与数据库对映字段写入一个标记中.
2).generator标记:
Hiernate附带了几种不同的标识符生成器,用于不同的场合(包括数据库本地的顺序(sequence)生成器和hi/lo高低位标识模式)。我们在这里使用increment生成器,并指定CAT表的CAT_ID字段(作为表的主键)存放生成的标识值(知道就可以了,不用多研究)。
3).接下来就是要对数据库中其它字段与实体进行映射:
property标记.可以如上写,亦可写成简单模式:<property name="name" column="NAME" type="string" not-null="true"/>其它的对应sex,weight...
2.
WEB服务器配置:
1.建立web的Hibernate工程,还要导入相应的.jar包,如果用JCreater练手,那么就要手动导入,类似于导servletApi.jar包一样,如果没有,呵,找老师或者找同学要一下吧...
2.连接配置文件:hibernate.properties文件,将hibernate.properties文件存放到web工程WEB-INF\classes\根目录下
1).如果是桥连,将下面文件写入到hibernate.properties里.(.properties为文件后缀名)
hibernate.dialect=net.sf.hibernate.dialect.SQLServerDialect
hibernate.connection.driver_class=sun.jdbc.odbc.JdbcOdbcDriver
hibernate.connection.url=jdbc:odbc:数据源名
hibernate.connection.username=sa
hibernate.connection.password=
hibernate.show_sql=truehibernate.properties
2).如果是直连,同上,改变内容
hibernate.dialect=net.sf.hibernate.dialect.SQLServerDialect
hibernate.connection.driver_class=com.microsoft.jdbc.sqlserver.SQLServerDriver
hibernate.connection.url=jdbc:microsoft:sqlserver://127.0.0.1:1433;databaseName=数据库名
hibernate.connection.username=sa
hibernate.connection.password=
hibernate.show_sql=true
3.实体与库表(ORM.xml)文件放在字节码文件下:即java源文件经过编辑之后,生成的.class所在包中,并且要配置到当前所映射的实体包下的.class所在包中.