在最近的项目开发过程中,需要实现数据的持久化工作,原本打算在应用程序和数据库中中间增加一层数据持久层,使用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> 先写到这,后续跟新。。。
|