hibernate
Hibernate简介:
Jboss资助的开源项目,当前比较流行的持久层框架,是一种先进的JDBC封装框架。
优点:提高了数据访问层的开发效率,使我们不必直接调用JDBC来访问关系型数据库。Hibernate建立在面向对象的基础之上,开发人员只需针对对象进行操作,不必再关心数据库的连接关闭,sql的执行,以及resultset中的字段,将更多精力投入于业务逻辑层的实现。Hibernate本身采用了性能优化机制,提供了内置数据库联接池支持,从而提高了系统性能。而且,hibernate提供了对不同数据库的良好支持,通过修改配置参数可以实现在不同底层数据库间切换,提高了系统的可移植性。
1 hibernate的Configuration类、SessionFactory类和Session类
上图描述了hibernate的配置文件(Hibernate.cfg.xml)、configuration类、SessionFactory类、Session类间的关系。
1.1 SessionFactory
用于保存所有映射关系、维护二级缓存、statement pool及创建Session,由于其创建过程比较复杂、代价较高,但可以由多个线程并发调用的特性,所以在应用中我们共享一个SessionFactory。
1.2 Session
不是我们通常意义上HttpSession,这里的Session与hibernate的关系,类似于JDBC与connection的关系。我们通过Session进行增、删、查、改。一个Session实例不能被多个线程并发调用,因此调用后必须关闭才能被其他线程使用。Session通过事务进行commit和rollback,通过session.beginTransaction()返回一个Transation类的实例。
注:基于上述特点,在实际应用中,我们通过一个SessionFactory管理类对SessionFactory及Session进行池化管理,以节省系统资源。
2 hibernate的配置文件
2.1 示例
<?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>
<property name="connection.username">card</property>
<property name="connection.url">
jdbc:oracle:thin:@87.6.93.7:1521:assmng
</property>
<property name="dialect">
org.hibernate.dialect.Oracle9Dialect
</property>
<property name="connection.password">
card
</property>
<property name="connection.driver_class">
oracle.jdbc.driver.OracleDriver</property>
<mapping resource="com/persistent/ZoneTbl.hbm.xml"></mapping>
</session-factory>
</hibernate-configuration>
2.2 可选配置项:
3 实体类影射文件
3.1示例
<?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="com.persistent.ZoneTbl" table="ZONE_TBL" schema="CARD">
<id name="zoneno" type="string">
<column name="ZONENO" length="5" />
</id>
<property name="zonename" type="string">
<column name="ZONENAME" length="9" />
</property>
</class>
</hibernate-mapping>