Hibernate
英文的直意是冬眠的意思。
Hibernate
是一个面向
Java
环境的对象
/
关系数据映射工具,注意,这是一种技术工具。
ORM
(
object relational mapping
)
这个术语表示一种技术,用来把对象模型表示的对象映射到基于
SQL
的关系模型数据结构中去。
以上的这些概念性的东西,然我感觉和
.NET Framework 2.0
中的强类型数据集的作用差不多,但听研究过的人说,要比
Microsoft
的那个好得多,
Microsoft
的强类型数据集我用过,感觉爽,既然有说
Hibernate
更好,那已经更是过瘾,我心里痒痒的呀。继续。。。
书中有这样一句“对于以数据为中心的程序来说,他们往往只在数据库中使用存储过程来实现商业逻辑,
Hibernate
可能不是最好的解决方案。”这个是一定啦,
Hibernate
是桥梁,又不是万金油,当然是在数据库中直接用存储过程处理商业逻辑是最好的啦。我做过,直接在存储过程中搞定一切东西,传一个参数过去,然后所有的运算都在
SQL Server 2000
的存储过程中完成,那叫一个爽,比把数据读到程序里,然后用
Java
处理,再把数据传回去要快得多,但是在
SQL Server 2000
里直接用存储过程来完成这样的工作,难度还是不小的,调试就是最大的难点,反正我是没整明白有啥办法可以调试的,我就用最原始、最保靠,据说是也是有效的调试方法
print
来完成。哈哈。够晕的吧!继续看。。。
现在看到了一个“持久化实体类”这个类是符合
JavaBean
的编写要求。并且要给它一个唯一的标识符,这是为了我们使用
Hibernate
提供的所有特性。大多数程序,特别是
web
程序,都需要通过标识符来区分对象。但,通常我们不会直接操作对象的标识符,所以他的
setter
方法的访问级别是
private
。
Hibernate
需要知道怎样去加载(
load
)和存储(
store
)持久化类的对象,映射文件,它就是告诉
Hibernate
,应该访问数据库里面的哪个表,已经应该使用表里面哪些字段。
Hibernate
不会从
web
加载
DTD
文件,但它会首先在应用程序的
classpath
中查找。
DTD
文件包含在
hibernate3.jar
里,同时在
Hibernate
发布包的
src/
目录下。
映射文件的长相:
Event.hbm.xml
<hibernate-mapping>
<classname="events.Event" table="Events">
<idname="id" column="eventID">
<generatorclass="native"/>
</id>
<propertyname="date" type="timestamp" column="eventDate"/>
<propertyname="title" column="eventTitle"/>
</class>
</hibernate-mapping>
说明:
class
表示持久化类;
id
表示唯一标识;
property
表示类的属性字段;
name
是持久化类名;
table
是数据表名;
column
是数据字段名;
generator
是唯一标识的生成方式;
type
是映射的数据类型。
Hibernate
配置文件的长相:
hibernate.cfg.xml
<!-- by MyEclipse Hibernate tool integration. -->
<hibernate-configuration>
<session-factory>
<!-- properties -->
<propertyname="connection.driver_class">oracle.jdbc.driver.OracleDriver</property>
<propertyname="connection.url">jdbc:oracle:thin:@localhost:1521:test</property>
<propertyname="connection.username">system</property>
<propertyname="connection.password">manager</property>
<propertyname="dialect">net.sf.hibernate.dialect.OracleDialect</property>
<!-- mapping files -->
<mappingresource="events/Event.hbm.xml"/>
</session-factory>
</hibernate-configuration>
说明:
Session-factory
:特定数据库全局工厂
connection.driver_class
:驱动类
connection.url
:连接路径
connection.username
:用户名
connection.password
:用户密码
mapping resource
:持久化类加入映射文件
用
ant
创建
build.xml
我理解他就是管理文件位置的,就是拷贝,为编译运行做准备。
SessionFactory
是一个线程安全的全局对象,只需要被实例化一次,一个
Session
代表一个单线程的单元操作。
这时又来了一个辅助类
HibernateUtil
,负责启动
Hibernate
和更好的操作
SessionFactory
。
最后配置一个日志系统,
Log4j
或
JDK 1.4
都可以选择。
看到了一种编程模型:线程绑定(
thread-bound
)
Session
在第一次被使用,或第一次调用
getCurrentSession()
的时候,其生命周期就开始了,然后它被
Hibernate
绑定到当前线程。当事务运行结束的时候,不管是提交、回滚,
Hibernate
都会把
Session
从当前线程剥离,并且关闭它。