hibernate.properties和hibernate.cfg.xml
看看下面这张图,就很清楚了。

可以看到Hibernate首先去找了hibernate.properties配置文件,但是没找到。然后创建字节码支持器,用到cglib,之后用了时间戳控制,之后才是读取hibernate.cfg.xml配置文件。这些在最前面的日志信息我们可能会忽略它,但是我们要明白hibernate的一些加载原理。既然Hibernate第一读取的是属性配置文件,那么下面我们用属性配置文件做一个例子来看看效果。

将XML文件打成.bak,加入属性配置文件,其中的配置和XML相同。
- hibernate.connection.driver_class=oracle.jdbc.driver.OracleDriver
- hibernate.connection.url=jdbc:oracle:thin:@localhost:1521:orcl
- hibernate.connection.username=hibernate
- hibernate.connection.password=hibernate
- hibernate.dialect=org.hibernate.dialect.OracleDialect
- hibernate.current_session_context_class=thread
- hibernate.show_sql=true
- hibernate.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();
- }
- }
在控制台,我们就看到这样的日志信息了。
可以看出,Hibernate直接读取配置信息,然后是字节码支持提供,初始化时间戳,加载映射文件,后面的流程就是一样的了。
hibernate.properties和hibernate.cfg.xml都是Hibernate解析配置文件时默认的命名方式,而且都必须放在类路径的根目录下,当然是不建议在使用时修改的,因为这就多此一举。如果有人不喜欢这种命名方式,当然可以自定义名称,不过此时你必须告诉Hibernate配置文件是哪个,可以如下方式进行,也是比较方便的。
- File file = new File("src/demo/hibernate.xml");
- Configuration config = new Configuration();
- config.configure(file);
同时,Hibernate支持在程序中设置新的属性,比如我们在配置时不设置show_sql和format_sql两个属性,那么在程序中也可以设置,如下进行即可。
- config.setProperty(Environment.SHOW_SQL, "true");
- config.setProperty(Environment.FORMAT_SQL, "true");
所有Hibernate中可配置的属性都是org.hibernate.cfg.Environment类中的一个静态成员变量。这样在程序中添加新的属性了。
org.hibernate.cfg.Configuration类的作用就是解析配置信息和映射信息,之后创建SessionFactory对象,此时配置信息都绑定在SessionFactory中,Configuration就没有使用价值了。这部分的Hibernate源码也是比较好理解的。
欢迎交流,希望对使用者有用。
hibernate.properties和hibernate.cfg.xml的更多相关文章
- hibernate.properties与hibernate.cfg.xml 区别
Hibernate的数据库连接信息是从配置文件中加载的. Hibernate的配置文件有两种形式:一种是XML格式的文件,一种是properties属性文件. 一)hibernate.cfg.xml ...
- 用hibernate.properties代替hibernate.cfg.xml配置常用的属性
我们使用hibernate时经常在hibernate.cfg.xml文件中配置数据库连接的相关属性,是否显示sql语句,数据库的方言等,这些配置其实也可以在.properties文件中配置.现在我把这 ...
- [原创]java WEB学习笔记77:Hibernate学习之路---Hibernate 版本 helloword 与 解析,.环境搭建,hibernate.cfg.xml文件及参数说明,持久化类,对象-关系映射文件.hbm.xml,Hibernate API (Configuration 类,SessionFactory 接口,Session 接口,Transaction(事务))
本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...
- Hibernate 系列 04 - Hibernate 配置相关的类
引导目录: Hibernate 系列教程 目录 前言: 通过上一篇的增删改查小练习之后,咱们大概已经掌握了Hibernate的基本用法. 我们发现,在调用Hibernate API的过程中,虽然Hib ...
- Hibernate学习之Hibernate流程
Hibernate的核心组件 在基于MVC设计模式的JAVA WEB应用中,Hibernate可以作为模型层/数据访问层.它通过配置文件(hibernate.properties或hibernate. ...
- Hibernate之深入Hibernate的配置文件
1.创建Configuration类的对象 Configuration类的对象代表了应用程序到SQL数据库的映射配置.Configuration类的实例对象,提供一个buildSessionFacto ...
- Hibernate学习二----------hibernate简介
© 版权声明:本文为博主原创文章,转载请注明出处 1.hibernate.cfg.xml常用配置 - hibernate.show_sql:是否把Hibernate运行时的SQL语句输出到控制台,编码 ...
- 5 -- Hibernate的基本用法 --4 2 hibernate.properties文件与hibernate.cfg.xml文件
hibernate.properties : project\etc\hibernate.properties hibernate.cfg.xml : project\etc\hibernate.cf ...
- hibernate.properties官方属性用例(可用于hibernate.cfg.xml属性参考)
######################### Query Language ######################### ## define query language constant ...
随机推荐
- word中设置前几页为罗马数字,后几页设置为阿拉伯数字
假如第1-5页摘要部分页脚要是罗马数字,第6页开始是正文部分是阿拉伯数字,起始页为1. WORD2003 1.将光标定位在第5页末尾处,在菜单栏中依次点击“插入——分隔符——(分节符类型)下一页”.按 ...
- 学习java annotation
Annotation介绍 内置注解 自定义注解 元注解 /** * 测试自定义注解的使用 * */ @SxtAnnotation01 public class Demo02 { @Annotation ...
- 15款开源PHP类库
PHP库给开发者提供了一个标准接口,它帮助开发者在PHP里充分利用面向对象编程.这些库为特定类型的内置功能提供了一个标准的API,允许类可以与PHP引擎进行无缝的交互.此外,开发者使用这些类库还可以简 ...
- anroid
http://mirrors.neusoft.edu.cn/more.we#android http://www.cnblogs.com/youxilua/archive/2013/05/20/308 ...
- 【LTE基础知识】SGLTE, SVLTE, CSFB, VoLTE
4G网络下实现语音通话功能的技术共有三种--VoLTE.SGLTE(GSM /LTE同步并发)和CSFB(电路域回落).简单来说: VoLTE就是语音数据都在4G通道内完成: SGLTE是语音走2G通 ...
- android source
h1 { margin-bottom: 0.21cm } h1.western { font-family: "Liberation Sans", sans-serif; font ...
- Gearman任务分布系统部署windows平台_使用Cygwin
1.下载Cygwin http://www.cygwin.com/ 然后选择 Install from Internet -> Direct Connection -> 选择第一个网址就 ...
- Duilib自定义控件响应指定命令(转载)
转载:http://blog.csdn.net/panxianzhan/article/details/50772893 duilib在UIManager.h里的EVENTTYPE_UI枚举里定义了很 ...
- KDTree
学习链接:http://www.cnblogs.com/eyeszjwang/articles/2429382.html 下面实现的kdtree支持以下操作:(1) 插入一个节点(2) 插入n个节点( ...
- SQL中添加远程服务器连接
EXEC sp_addlinkedserver 'Testserver','','SQLOLEDB','192.168.1.221' EXEC sp_addlinkedsrvlogin 'Testse ...