您的位置:首页 > 其它

【S2HS学习笔记】第三章节:Hiberbate的基本用法02

2016-05-11 14:13 423 查看
2.Hibernate入门

只需要在Java项目中引入Hibernate框架,就可以以面向对象的方式操作关系型数据库了。

由于Hibernate底层是基于JDBC的,因此在应用程序中使用Hibernate执行持久化时一定少不了JDBC驱动。

2.1.Hibernate下载安装(略)

2.2.Hibernate的数据库操作

在所有的ORM框架产品中有一个非常重要的中间媒介:PO(Persistent Object,持久化对象)。持久化对象的作用就是完成持久化操作,简单的说就是持久化对象可以执行增、删、改、查等操作——以面向对象的方式操作数据库。

应用程序无需直接访问数据库,甚至不需要关注底层采用何种数据库,应用程序只需要创建、修改、删除、查询持久化对象即可,Hibernate则负责将这种对指定持久化对象的操作转化为对底层指定数据库表的操作。

可以使用普通的Java对象(JavaBean)作为持久化对象使用,即POJO。

Hibernate不要求持久化类继承任何父类,或实现任何接口,这样可以保证代码不被污染。

普通的JavaBean(POJO)没有持久化操作的能力,Hibernate采用XML映射文件使其拥有持久化操作的能力。

Hibernate中XML映射文件全部代码如下:

News.hbm.xml (映射文件)

<!-- 指定XML文件的版本、编码字符集信息 -->

<?xml version="1.0" encoding="UTF-8"?>

<!-- 指定Hibernate3映射文件的DTD信息 -->

<!DOCTYPE hibernate-mapping PUBLIC

"-//Hibernate/Hibernate Mapping DTD 3.0//EN"

"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">

<!-- hibernate-mapping是映射文件的根元素 -->

<hibernate-mapping package="org.crazyit.app.domain">

<!-- 每个class元素对应一个持久化对象(PO,PO = POJO + 映射文件) -->

<class name="News" table="news_table">

<!-- id元素定义持久化类的标识属性 -->

<id name="id">

<!-- 指定主键生成策略 -->

<generator class="identity"/>

</id>

<!-- property元素定义常规属性 -->

<property name="title"/>

<property name="content"/>

</class>

</hibernate-mapping>

通过上面的映射文件,Hibernate可以理解为持久化类和数据库表之间的对应关系。

Hibernate中XML配置文件全部代码如下:

hibernate.cfg.xml(配置文件)

<!-- 指定XML文件的版本、编码字符集信息 -->

<?xml version="1.0" encoding="UTF-8"?>

<!-- 指定Hibernate配置文件的DTD信息 -->

<!DOCTYPE hibernate-configuration PUBLIC

"-//Hibernate/Hibernate Configuration DTD 3.0//EN"

"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">

<!-- hibernate-configuration是连接配置文件的根元素 -->

<hibernate-configuration>

<session-factory>

<!-- 指定连接数据库所用的驱动 -->

<property name="connection.driver_class">com.mysql.jdbc.Driver</property>

<!-- 指定连接数据库的url,hibernate链接的数据库名 -->

<property name="connection.url">jdbc:mysql://localhost/hibernate</property>

<!-- 指定连接数据库的用户名 -->

<property name="connection.username">root</property>

<!-- 指定连接数据库的用户密码 -->

<property name="connection.password">root</property>

<!-- 指定连接池的最大连接数 -->

<property name="hibernate.c3p0.max_size">20</property>

<!-- 指定连接池的最小连接数 -->

<property name="hibernate.c3p0.min_size">1</property>

<!-- 指定连接池里连接的超时时长 -->

<property name="hibernate.c3p0.timeout">5000</property>

<!-- 指定连接池里最大缓存多少个Statement对象 -->

<property name="hibernate.c3p0.max_statement">100</property>

<property name="hibernate.c3p0.idle_test_period">3000</property>

<property name="hibernate.c3p0.acquire_increment">2</property>

<property name="hibernate.c3p0.validate">true</property>

<!-- 指定数据库方言 -->

<property name="dialect">org.hibernate.dialect.MySQLInnoDBDialect</property>

<!-- 根据需要自动创建数据库表 -->

<property name="hbm2ddl.auto">update</property>

<!-- 罗列所有映射文件 -->

<mapping resource="org/crazyit/app/domain/Mews.hbm.xml"/>

</session-factory>

</hibernate-configuration>

Hibernate配置文件的默认文件名是:hibernate.cfg.xml,当程序调用Configuration对象的configure()方法时,Hibernate将自动加载该配置文件。

Hibernate并不推荐使用DriverManager来连接数据库,而是推荐采用数据源来管理数据库连接,这样才能保证最好的性能。Hibernate推荐使用C3P0数据源。采用数据源管理数据库连接,可以避免频繁的获取数据库连接、关闭数据库连接所导致的性能下降。

使用C3P0数据源,需要将hibernate-distribution-3.6.0.Final\lib的optional子目录下的c3p0目录下的JAR包添加到系统的类加载路径下。

除此之外,还需要下载SLF4J日志工具,具体添加参见网络。

使用Hibernate进行持久化操作,通常需要如下几个步骤:

>> 开发持久化类,由POJO加映射文件组成

>> 获取Configuration(Configuration对象负责加载Hibernate配置文件)

>> 获取SessionFactory(由Configuration对象生成SessionFactory对象)

SessionFactory是数据库编译后的内存镜像,通常一个应用对应一个SessionFactory对象。

>> 获取Session,打开事务管理(由SessionFactory工厂生成Session对象)

>> 用面向对象的方法是操作数据库

>> 保存消息,提交事务

>> 关闭Session,关闭SessionFactory

随PO和Session的关联关系,PO可分为如下三种状态:

>> 瞬时状态:如果PO实例从未与Session关联过,该PO实例就处于瞬时状态(对象)

>> 持久化状态:如果PO实例与Session关联,且该实例对应到数据库记录,则该PO实例就处于持久化状态(对象-数据库表记录)

>> 托管状态:如果PO实例曾经与Session关联过,但因为Session关闭等原因,PO实例与脱离了Session的管理,就是托管状态(数据库表记录)

使用Hibernate的两个显著优点:

>> 不再需要编写大量的SQL语句,而是采用OO方式来访问数据库

>> JDBC访问过程中大量的checked异常被包装成Hbibernate的Runtime异常,从而不再要求程序必须处理所有的异常
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: