hibernate.properties和hibernate.cfg.xml
hibernate配置文件可以有两种方式:官方推荐的XML配置文件和属性配置文件。我们大都采用XML方式的配置,因为结构良好,配置灵活,可读性强。而且可以在XML中直接配置映射文件而属性文件则不行。但是我们可能忽略的一个问题是:hibernate首先查找的配置文件却是属性配置文件hibernate.properties。
看看下面这张图,就很清楚了。
可以看到Hibernate首先去找了hibernate.properties配置文件,但是没找到。然后创建字节码支持器,用到cglib,之后用了时间戳控制,之后才是读取hibernate.cfg.xml配置文件。这些在最前面的日志信息我们可能会忽略它,但是我们要明白hibernate的一些加载原理。既然Hibernate第一读取的是属性配置文件,那么下面我们用属性配置文件做一个例子来看看效果。
将XML文件打成.bak,加入属性配置文件,其中的配置和XML相同。
hibernate.connection.driver_class=oracle.jdbc.driver.OracleDriverhibernate.connection.url=jdbc:oracle:thin:@localhost:1521:orclhibernate.connection.username=hibernatehibernate.connection.password=hibernatehibernate.dialect=org.hibernate.dialect.OracleDialecthibernate.current_session_context_class=threadhibernate.show_sql=truehibernate.format_sql=true
package demo;import java.util.Date;import org.hibernate.*;import org.hibernate.cfg.Configuration;import demo.domain.User;public class Test {public static void main(String[] args) {Configuration config = new Configuration();config.addResource("demo/domain/User.hbm.xml");// 加载映射文件// config.addClass(demo.domain.User.class); 另外一种加载方式SessionFactory sessionFactory = config.buildSessionFactory();Session session = sessionFactory.getCurrentSession();Transaction tx = session.beginTransaction();User user = new User();user.setName("Sarin");user.setPhone("15912345678");user.setDepartment("研发部");user.setCity("大连");user.setHireTime(new Date());session.save(user); tx.commit();}}
File file = new File("src/demo/hibernate.xml");Configuration config = new Configuration();config.configure(file);
config.setProperty(Environment.SHOW_SQL, "true");config.setProperty(Environment.FORMAT_SQL, "true");