Hibernate读书笔记-----Hibernate知识总结
利用一个星期(实际上是两个星期的上午)的时间终于是结束了Hibernate,本来在四月份就可以结束的,但是由于为期一个月的实习,加上各种考试、三个课程设计,hibernate的学习一直都是断断续续的,等到暑假有时间了,也差不多都忘记了,于是只有从头开始了。下面是我就这个星期所学的知识的一个简要的总结。
一、Hibernate开发流程
Hibernate是一个面向java环境的对象/关系数据库映射工具,用来把对象模型表示的对象映射到基于SQL的关系模型数据结构中去。主要是完成面向对象的编程语言到关系型数据库的映射
Hibernate的开发流程一般有如下几个步骤:
1、编写domain对象:持久化类。
2、加入hibernate.jar和其依赖的包。
3、编写XX.hbm.xml映射文件。
4、编写hibernate.cfg.xml配置文件。必须要提供以下几个参数:connection.driver_class、connection.url、connection.username、connection.password、dialect、hbm2ddl.auto。
5、编写HibernateUtil工具类、主要用于完成hibernate的初始化过程和提供一个获得session的方法(可选)。
6、编写实现类。
二、Hibernate的体系结构
Hibernate有如下三种体系结构:
非常简要的Hibernate体系结构的概要图:
从这个图可以看出,Hibernate使用数据库和配置信息来为应用程序提供持久化服务(以及持久的对象)。
轻型”的体系结构方案,它要求应用程序提供自己的JDBC 连接并管理自己的事务
全面解决”的体系结构方案,将应用层从底层的JDBC/JTA API中抽象出来,而让Hibernate来处理这些细节。
三、Hibernate的持久化类
Hibernate采用完全面向对象的方式来操作数据库,通过Hibernate的支持,我们只需要管理对象的状态,无须关心底层数据库系统的细节。
虽然Hibernate对持久化类没有太多的要求,但是我们应该遵循如下规则:
1、提供一个无参的构造函数。
2、提供一个标识属性。
3、为持久化类的每个属性听过getter和setter方法
4、使用非final类
持久化对象有如下几个对象状态:
1、瞬态:对象有new操作符创建,且尚未与Hibernate Session关联的对象被认为处于瞬态。
2、持久化:持久化实例在数据库中有对应的记录,并且拥有一个持久化标识
3、托管:某个实例曾经处于持久化状态,但随着与之关联的Session被关闭了额,那么该对象就变成了托管状态。
三种状态的演变图如下:
Hibernate提供save()、persist()方法可以将对象转变为持久化状态。但是两个方法存在一点区别:save()方法保存持久化对象时,该方法返回持久化对象的标识属性值,而且他会立即将持久化对象的数据插入到数据库中。但是persist()方法就没有任何返回值,它保证当他在一个事务外部被调用时,并不会立即转换成insert语句,这个特性对于我们在封装一个长回话流程的时候,显得很重要。
同时我们还可以通过load()和get()方法来加载一个持久化对象。两者都是根据主键装载持久化实例的。但是两者的区别就在于:get()方易做图立即加载,而load()方易做图延迟加载。
四、Hibernate的配置:hibernate.cfg.xml和映射文件
Hibernate进行持久化操作时是离不开SessionFactory对象,这个对象是整个数据库映射关系经过编译后的内存镜像。该对象由Configuration对象产生的。Configuration对象代表了应用程序到数据库的映射配置。创建Configuration对象,通常有如下几种配置Hibernate的方式。
1、使用hibernate.cfg.xml文件作为配置文件
2、使用hibernate.properties文件作为配置文件
3、不适用任何配置文件,以编码方式创建Configuration对象
其中hibernate.cfg.xml文件是最常用的。对于hibernate.cfg.xml而言,必须要提供以下几个参数:
connection.driver_class:设置连接数据库的驱动。
connection.url:设置所需要连接数据库服务的URL。
connection.username:连接数据的用户名。
connection.password:连接数据的密码
dialect:设置连接数据库使用的方言
hbm2ddl.auto:设置当创建SessionFactory时,是否根据映射文件自动建立数据。
一般hibernate.cfg.xml的配置文件如下(以SQL2005为例):
[html]
<hibernate-configuration>
<session-factory>
<!-- 指定连接数据库所用的驱动 -->
<property name="connection.driver_class">com.microsoft.sqlserver.jdbc.SQLServerDriver</property>
<!-- 指定连接数据的url -->
<property name="connection.url">jdbc:sqlserver://localhost:1433;databaseName=test</property>
<!-- 指定连接数据库的用户名 -->
<property name="connection.username">sa</property>
<!-- 指定数据库的密码-->
<property name="connection.password">*****</property>
<!-- 指定连接池里最大的连接数 -->
<property name="hibernate.c3p0.max_size">200</property>
<!-- 指定连接池里最小的连接数 -->
<property name="hibernate.c3p0.min_size">1</property&
补充:软件开发 , Java ,