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源碼也是比較好理解的。 
    歡迎交流,希望對使用者有用。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM