hibernate配置文件可以有两种方式:官方推荐的XML配置文件和属性配置文件。我们大都采用XML方式的配置,因为结构良好,配置灵活,可读性强。而且可以在XML中直接配置映射文件而属性文件则不行。但是我们可能忽略的一个问题是:hibernate首先查找的配置文件却是属性配置文件hibernate.properties。 
    看看下面这张图,就很清楚了。 
 
    可以看到Hibernate首先去找了hibernate.properties配置文件,但是没找到。然后创建字节码支持器,用到cglib,之后用了时间戳控制,之后才是读取hibernate.cfg.xml配置文件。这些在最前面的日志信息我们可能会忽略它,但是我们要明白hibernate的一些加载原理。既然Hibernate第一读取的是属性配置文件,那么下面我们用属性配置文件做一个例子来看看效果。 
 
    将XML文件打成.bak,加入属性配置文件,其中的配置和XML相同。

  1. hibernate.connection.driver_class=oracle.jdbc.driver.OracleDriver
  2. hibernate.connection.url=jdbc:oracle:thin:@localhost:1521:orcl
  3. hibernate.connection.username=hibernate
  4. hibernate.connection.password=hibernate
  5. hibernate.dialect=org.hibernate.dialect.OracleDialect
  6. hibernate.current_session_context_class=thread
  7. hibernate.show_sql=true
  8. hibernate.format_sql=true

程序中,我们这样写就行了。

  1. package demo;
  2. import java.util.Date;
  3. import org.hibernate.*;
  4. import org.hibernate.cfg.Configuration;
  5. import demo.domain.User;
  6. public class Test {
  7. public static void main(String[] args) {
  8. Configuration config = new Configuration();
  9. config.addResource("demo/domain/User.hbm.xml");// 加载映射文件
  10. // config.addClass(demo.domain.User.class); 另外一种加载方式
  11. SessionFactory sessionFactory = config.buildSessionFactory();
  12. Session session = sessionFactory.getCurrentSession();
  13. Transaction tx = session.beginTransaction();
  14. User user = new User();
  15. user.setName("Sarin");
  16. user.setPhone("15912345678");
  17. user.setDepartment("研发部");
  18. user.setCity("大连");
  19. user.setHireTime(new Date());
  20. session.save(user);
  21. tx.commit();
  22. }
  23. }

在控制台,我们就看到这样的日志信息了。 
 
    可以看出,Hibernate直接读取配置信息,然后是字节码支持提供,初始化时间戳,加载映射文件,后面的流程就是一样的了。 
    hibernate.properties和hibernate.cfg.xml都是Hibernate解析配置文件时默认的命名方式,而且都必须放在类路径的根目录下,当然是不建议在使用时修改的,因为这就多此一举。如果有人不喜欢这种命名方式,当然可以自定义名称,不过此时你必须告诉Hibernate配置文件是哪个,可以如下方式进行,也是比较方便的。

  1. File file = new File("src/demo/hibernate.xml");
  2. Configuration config = new Configuration();
  3. config.configure(file);

同时,Hibernate支持在程序中设置新的属性,比如我们在配置时不设置show_sql和format_sql两个属性,那么在程序中也可以设置,如下进行即可。

  1. config.setProperty(Environment.SHOW_SQL, "true");
  2. config.setProperty(Environment.FORMAT_SQL, "true");

所有Hibernate中可配置的属性都是org.hibernate.cfg.Environment类中的一个静态成员变量。这样在程序中添加新的属性了。 
    org.hibernate.cfg.Configuration类的作用就是解析配置信息和映射信息,之后创建SessionFactory对象,此时配置信息都绑定在SessionFactory中,Configuration就没有使用价值了。这部分的Hibernate源码也是比较好理解的。 
    欢迎交流,希望对使用者有用。

hibernate.properties和hibernate.cfg.xml的更多相关文章

  1. hibernate.properties与hibernate.cfg.xml 区别

    Hibernate的数据库连接信息是从配置文件中加载的. Hibernate的配置文件有两种形式:一种是XML格式的文件,一种是properties属性文件. 一)hibernate.cfg.xml ...

  2. 用hibernate.properties代替hibernate.cfg.xml配置常用的属性

    我们使用hibernate时经常在hibernate.cfg.xml文件中配置数据库连接的相关属性,是否显示sql语句,数据库的方言等,这些配置其实也可以在.properties文件中配置.现在我把这 ...

  3. [原创]java WEB学习笔记77:Hibernate学习之路---Hibernate 版本 helloword 与 解析,.环境搭建,hibernate.cfg.xml文件及参数说明,持久化类,对象-关系映射文件.hbm.xml,Hibernate API (Configuration 类,SessionFactory 接口,Session 接口,Transaction(事务))

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...

  4. Hibernate 系列 04 - Hibernate 配置相关的类

    引导目录: Hibernate 系列教程 目录 前言: 通过上一篇的增删改查小练习之后,咱们大概已经掌握了Hibernate的基本用法. 我们发现,在调用Hibernate API的过程中,虽然Hib ...

  5. Hibernate学习之Hibernate流程

    Hibernate的核心组件 在基于MVC设计模式的JAVA WEB应用中,Hibernate可以作为模型层/数据访问层.它通过配置文件(hibernate.properties或hibernate. ...

  6. Hibernate之深入Hibernate的配置文件

    1.创建Configuration类的对象 Configuration类的对象代表了应用程序到SQL数据库的映射配置.Configuration类的实例对象,提供一个buildSessionFacto ...

  7. Hibernate学习二----------hibernate简介

    © 版权声明:本文为博主原创文章,转载请注明出处 1.hibernate.cfg.xml常用配置 - hibernate.show_sql:是否把Hibernate运行时的SQL语句输出到控制台,编码 ...

  8. 5 -- Hibernate的基本用法 --4 2 hibernate.properties文件与hibernate.cfg.xml文件

    hibernate.properties : project\etc\hibernate.properties hibernate.cfg.xml : project\etc\hibernate.cf ...

  9. hibernate.properties官方属性用例(可用于hibernate.cfg.xml属性参考)

    ######################### Query Language ######################### ## define query language constant ...

随机推荐

  1. Java内部类、静态嵌套类、局部内部类、匿名内部类

    Nested classes are further divided into two types: static nested classes: If the nested class is sta ...

  2. StringBuffer中的flush()方法作用

    在java API1.6对flush()方法的介绍如下: 方法摘要  void close()           关闭此流,但要先刷新它.  void flush()           刷新该流的 ...

  3. SHA1加密C#

    //SHA1 static public string SHA1_Hash(string str_sha1_in) { SHA1 sha1 = new SHA1CryptoServiceProvide ...

  4. Unix下五种IO模型

    http://blog.chinaunix.net/uid-25324849-id-247813.html 1. I/O模型 Unix下共有五种I/O模型 a. 阻塞I/O b. 非阻塞I/O c. ...

  5. ExecutorService线程池讲解

    ExecutorService 建立多线程的步骤: 1.定义线程类 class Handler implements Runnable{ } 2.建立ExecutorService线程池 Execut ...

  6. 2016年11月8日 星期二 --出埃及记 Exodus 19:24

    2016年11月8日 星期二 --出埃及记 Exodus 19:24 The LORD replied, "Go down and bring Aaron up with you. But ...

  7. 2016年6月28日 星期二 --出埃及记 Exodus 14:25

    2016年6月28日 星期二 --出埃及记 Exodus 14:25 He made the wheels of their chariots come off so that they had di ...

  8. BFC——一个我们容易忽视掉的布局神器

      今天给大家说说BFC这个概念,在说概念前,先给大家看个例子: 首先,定义三个div块元素   效果: 我们发现,块级元素的排列顺序是从上往下,一块接着一块,在w3c中,是这样解释block-lev ...

  9. MVC开发模式

     关于mvc详情可参阅:http://www.w3school.com.cn/aspnet/mvc_intro.asp MVC (Modal View Controler)本来是存在于Desktop程 ...

  10. 阻止js冒泡

    <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title&g ...