分享

hibernate使用小结

 昵称22369024 2015-05-03
  • hibernate适用情况

    在最近的项目开发过程中,需要实现数据的持久化工作,原本打算在应用程序和数据库中中间增加一层数据持久层,使用Hibernate技术实现该功能。经过测试发现hibernate操作数据库的速度较慢,因此放弃的hibernate的使用。

    究竟是什么原因呢?分析hibernate源码,未发现hibernate采用多线程异步操作数据库,虽然它也支持缓存管理(hibernate有两级缓存结构),但在数据库更新频繁的环境下,有无缓存差别不大。当然,如果程序要频繁更新数据库并且对性能要求比较高的话,采用hibernate不是一个十分妥当的解决方案。如果对数据库的操作大多数是查询的话,采用hibernate应该相当不错,在开启hibernate缓存的情况下,应该对性能不会造成太大的影响。

  • hibernate使用中关键的类

Configuration

    Configuration 类负责读取 Hibernate.cfg.xml 文件,管理Hibernate 的配置信息。Hibernate 运行时需要获取一些底层实现的基本信息,其中几个关键属性包括:

    数据库URL

    数据库用户

    数据库用户密码

    数据库JDBC驱动类

    数据库dialect,用于对特定数据库提供支持,其中包含了针对特定数据库特性的实现,如Hibernate数据类型到特定数据库数据类型的映射等。

SessionFactory

    SessionFactory负责创建Session实例。可以通过Configuation 实例构建SessionFactory。

Session

    Session是持久层操作的基础,相当于JDBC中的Connection。Session实例通过SessionFactory实例构建。

Query

   用来执行查询操作。通常由Session类来构建。

Transaction

    每次对数据库的操作都可以看作是一次事务。

    事务通常由session使用session.beginTransaction()方法构建。事务结束要使用commit()方法提交,如果出错可以使用rollback()方法回滚。

  • 使用步骤

    1.创建数据库

      创建javabean

      创建配置文件Hibernate.cfg.xml和类名.hbm.xml

    2.根据hibernate配置文件完成初始化,并获得一个Configuration类的实例。

      Configuration config = new Configuration().configure();

    3.然后根据该实例构建一个SessionFactory的实例.

      SessionFactory sessionFactory = config.buildSessionFactory();

    4.根据 SessionFactory的实例构建一个Session的实例

      Session session = sessionFactory.openSession();

    5.调用Session所提供的save、find、load 、flush等方法完成持久层操作;

      也可以通过session.createQuery方法创建Query一个实例来执行查找操作。

  • 配置Hibernate.cfg.xml一个典型的配置文件(Hibernate.cfg.xml),下面配置文件中的注释应该已经比较清楚:<?xml version="1.0" encoding="UTF-8" ?><hibernate-configuration>    <!-- SessionFactory 配置 -->    <session-factory>    <!-- 数据库URL -->    <property name="hibernate.connection.url">    jdbc:oracle:thin:@10.172.10.39:1521:ora92    </property>    <!-- 数据库JDBC驱动 -->    <property name="hibernate.connection.driver_class">    oracle.jdbc.driver.OracleDriver    </property>    <!-- 数据库用户名 -->    <property name="hibernate.connection.username">icor</property>    <!-- 数据库用户密码 -->    <property name="hibernate.connection.password">icor01</property>    <!--dialect ,每个数据库都有其对应的Dialet以匹配其平台特性 -->    <property name="dialect">    net.sf.hibernate.dialect.OracleDialect    </property>    <!-- 是否将运行期生成的SQL输出到日志以供调试 -->    <property name="hibernate.show_sql">True</property>    <!-- 事务管理类型,这里我们使用JDBC Transaction -->    <property name="hibernate.transaction.factory_class">    net.sf.hibernate.transaction.JDBCTransactionFactory    </property>    <!--映射文件配置,使用相对路径 -->    <mapping resource="conf/UserInfo.hbm.xml" />    <mapping resource="conf/IcorInfo.hbm.xml" />    </session-factory></hibernate-configuration>

    先写到这,后续跟新。。。


    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多