zoukankan      html  css  js  c++  java
  • hibernate.properties和hibernate.cfg.xml

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

        程序中,我们这样写就行了。 
    Java代码  收藏代码
    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配置文件是哪个,可以如下方式进行,也是比较方便的。 
    Java代码  收藏代码
    1. File file = new File("src/demo/hibernate.xml");  
    2. Configuration config = new Configuration();  
    3. config.configure(file);  

        同时,Hibernate支持在程序中设置新的属性,比如我们在配置时不设置show_sql和format_sql两个属性,那么在程序中也可以设置,如下进行即可。 
    Java代码  收藏代码
    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源码也是比较好理解的。 
        欢迎交流,希望对使用者有用。
  • 相关阅读:
    杂记5
    杂记4
    杂记3
    杂记2
    杂记1
    也来个网页版本的五子棋
    验证码识别
    npm publish命令
    window nginx php ci框架环境搭建
    也来个网页版本的五子棋
  • 原文地址:https://www.cnblogs.com/xiohao/p/4150293.html
Copyright © 2011-2022 走看看