Hibernate配置方式
Hibernate给人的感受是灵活的,要达到同一个目的,我们可以使用几种不同的办法。就拿Hibernate配置来说,常用的有如下三种方式,任选其一。
在 hibernate.cfg.xml 中加入元素 、,放置在类路径(classpath)的根目录下。
将 hibernate.properties 放置放在类路径的根目录下。
可编程的配置方式,即在程序中配置Hibernate的启动参数、加载映射文件,需要用Configuration接口来实现这一方式。
使用hibernate.cfg.xml是我比较喜欢的方式,一方面xml天生的优势——良好的可读性,让配置的意图一目了然。另一方面这是官方推荐使用的,如果同时在hibernate.cfg.xml和hibernate.properties对Hibernate进行了配置,那么前者将覆盖后者。
hibernate.properties可以非常的简洁明了,并且有一种linux配置文件的风格。以#开始一行的注释,用键值对的方式存储配置参数。
对于这两种方式,结果都是一样的。只是看个人喜好。关于配置参数我们稍后讨论。
Configuration类
org.hibernate.cfg.Configuration实例的作用是对Hibernate进行配置,以及对它进行启动。在Hibernate的启动过程中,Configuration类的实例首先读取Hibernate配置文件,加载配置信息,然后加载映射文件,创建一个SessionFactory对象。
实例被设计成启动期间(startup-time)对象,一旦SessionFactory 创建完成它就被丢弃了。
要使用一个Configuration对象,要为它设置两个方面的内容:
数据库连接属性
hbm.xml或pojo类
Configuration常用操作函数
1.加载Hibernate配置文件
Configuration cfg=new Configuration().configure("/etc/hibernate.cfg.xml");
或者
Configuration cfg=new Configuration().configure("/etc/hibernate.properties");
2.为Configuration指定映射文件
cfg.addResource("test/User.hbm.xml");
3.为Configuration指定POJO类,Order.hbm.xml根Order.java一个目录
cfg.addClass(test.Order.class);
4.为Configuration指定Hibernate配置属性,当然我们加载了配置文件就不能使用这个方法了。
Configuration cfg = new Configuration()
.addClass(test.User.class)
.setProperty("hibernate.dialect", "org.hibernate.dialect.MySQLDialect")
.setProperty("hibernate.connection.datasource", "java:comp/env/jdbc/test")
.setProperty("hibernate.order_updates", "true");
5.获得SessionFactory
SessionFactory sessions = cfg.buildSessionFactory();
当所有映射定义被 Configuration 解析后,应用程序必须获得一个用于构造org.hibernate.Session 实例的工厂SessionFactory。这个工厂将被应用程序的所有线程共享,线程安全的全局对象,只需要被实例化一次。单例模式。
Hibernate 允许你的应用程序创建多个SessionFactory 实例。这对 使用多个数据库的应用来说很有用。
hibernate.cfg.xml
hibernate.cfg.xml在文档开头的DTD(文档类型定义)是很复杂的。我们并不需要去理会和记忆他。你可以直接copy它。
hibernate.cfg.xml文档以为根元素,你可以在其子元素中
加入元素来配置各种参数。
加入加载映射文件,resource代表映射文件的路径。
一个hibernate.cfg.xml例子:
jdbc:mysql://localhost:3306/test root klguang@mysql com.mysql.jdbc.Driver org.hibernate.dialect.MySQLDialect 10 thread org.hibernate.cache.NoCacheProvider true update none
hibernate.properties
对于hibernate.properties作为配置文件的方式,我是不推荐新手使用的。因为,其可读性差,另外众多的配置参数会让初学者不知道如何下手。
在Hibernate发布包的project/etc/,提供了一个hibernate.properties文件,该文件列出了Hibernate 的所有配置参数,但都是用#注释掉了。每一行是一个配置参数,以键值对的方式存在,空格前是key,空格后是value,我们应该将空格改为等号。
对每一个配置参数,文件里都有详细的解释。我们只需要将见面#去掉,并修改其value就可以了。
一个hibernate.properties例子:
#数据库使用的驱动类
hibernate.connection.driver_class=com.mysql.jdbc.Driver
#数据库连接串
hibernate.connection.url=jdbc:mysql://localhost:3306/db
#数据库连接的用户名
hibernate.connection.username=user
#数据库连接的密码
hibernate.connection.password=password
#数据库使用的方言
hibernate.dialect=net.sf.hibernate.dialect.MySQLDialect
#是否打印SQL语句
hibernate.show_sql=true
javax.persistence.validation.mode=none
hibernate.properties没有提供加载映射文件的方式。因此需要通过Configuration的.addResource()方法来加载映射文件或POJO类,Hibernate会自动找到另一方,前提映射文件和POJO类在同一包(目录)中。
Configuration cfg = new Configuration();
cfg.configure("/etc/hibernate.properties");
cfg.addResource("test/User.hbm.xml");
cfg.addClass(test.Order.class);
Hibernate配置参数详解
Hibernate JDBC 属性
属性名用途
hibernate.connection.driver_classJDBC driver class
hibernate.connection.urlJDBC URL
hibernate.connection.usernamedatabase user
hibernate.connection.password数据库用户密码
hibernate.connection.pool_sizemaximum number of pooled connections
Hibernate 数据源属性
属性名用途
hibernate.connection.datasource数据源JNDI 名字
hibernate.jndi.url JNDI提供者的URL(可选)
hibernate.jndi.class JNDIInitialContextFactory 类(可选)
hibernate.connection.username数据库用户(可选)
hibernate.connection.password数据库密码(可选)
可选的配置属性
有大量属性能用来控制 Hibernate 在运行期的行为。它们都是可选的,并拥有适当的默认值。
属性名用途可选值
()内为默认
hibernate.dialect允许Hibernate针对特定的关系数据库生成优化的SQL的org.hibernate.dialect.Dialect的类名。
例如:org.hibernate.dialect.MySQLDialect
hibernate.show_sql输出所有SQL语句到控制台。true|false
(false)
hibernate.format_sql在log和console中打印出更漂亮的SQL。true|false
(false)
hibernate.default_catalog在生成的SQL中,将给定的catalog附加于非全限定名的表名上
hibernate.session_factory_nameorg.hibernate.SessionFactory创建后,将自动使用这个名字绑定到JNDI中。
hibernate.max_fetch_depth为单向关联(一对一,多对一)的外连接抓取(outer join fetch)树设置最大深度。0到3
hibernate.default_batch_fetch_size为Hibernate关联的批量抓取设置默认数量。4、8、16
hibernate.default_entity_mode为由这个SessionFactory打开的所有Session指定默认的实体表现模式。dynamic-map,dom4j,pojo
hibernate.order_updates强制Hibernate按照被更新数据的主键,为SQL更新排序。这么做将减少在高并发系统中事务的死锁。true|false
hibernate.generate_statistics如果开启,Hibernate将收集有助于性能调节的统计数据。true|false
hibernate.use_identifier_rollback如果开启,在对象被删除时生成的标识属性将被重设为默认值。true|false
hibernate.use_sql_comments如果开启,Hibernate将在SQL中生成有助于调试的注释信息,默认值为false。true|false
(false)
Hibernate JDBC 和连接(connection)属性、Hibernate 缓存属性、Hibernate 事务属性等主要用于提升性能,并且Hibernate有适当的默认值。入门者可以忽略这些设置,等学到一定阶段,你可以参考官方文档进行适当配置。
+289683894裙交流学习,领取更多资料