Hibernate配置方式
Hibernate给人的感受是灵活的,要达到同一个目的,我们可以使用几种不同的办法。就拿Hibernate配置来说,常用的有如下三种方式,任选其一。
- 在 hibernate.cfg.xml 中加入元素 <property>、<mapping>,放置在类路径(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配置属性,当然我们加载了配置文件就不能使用这个方法了。
1
2
3
4
5
|
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文档以<hibernate-configuration>为根元素,你可以在其子元素<session-factory>中
- 加入<property>元素来配置各种参数。
- 加入<mapping>加载映射文件,resource代表映射文件的路径。
一个hibernate.cfg.xml例子:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
<?xml version= '1.0' encoding= 'utf-8' ?>
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd" >
<hibernate-configuration> <session-factory>
<!-- Database connection settings -->
<property name= "connection.url" >jdbc:mysql: //localhost:3306/test</property>
<property name= "connection.username" >root</property>
<property name= "connection.password" >klguang @mysql </property>
<property name= "connection.driver_class" >com.mysql.jdbc.Driver</property>
<!-- SQL dialect -->
<property name= "dialect" >org.hibernate.dialect.MySQLDialect</property>
<!-- JDBC connection pool (use the built-in) -->
<property name= "connection.pool_size" > 10 </property>
<!-- Enable Hibernate's automatic session context management -->
<property name= "current_session_context_class" >thread</property>
<!-- Disable the second-level cache -->
<property name= "cache.provider_class" >
org.hibernate.cache.NoCacheProvider
</property>
<!-- Echo all executed SQL to stdout -->
<property name= "show_sql" > true </property>
<!-- Drop and re-create the database schema on startup -->
<property name= "hbm2ddl.auto" >update</property>
<property name= "javax.persistence.validation.mode" >none</property>
<mapping resource= "hbm/User.hbm.xml" />
<mapping resource= "hbm/Event.hbm.xml" />
<mapping resource= "hbm/Person.hbm.xml" />
</session-factory>
</hibernate-configuration> <br> |
hibernate.properties
对于hibernate.properties作为配置文件的方式,我是不推荐新手使用的。因为,其可读性差,另外众多的配置参数会让初学者不知道如何下手。
在Hibernate发布包的project/etc/,提供了一个hibernate.properties文件,该文件列出了Hibernate 的所有配置参数,但都是用#注释掉了。每一行是一个配置参数,以键值对的方式存在,空格前是key,空格后是value,我们应该将空格改为等号。
对每一个配置参数,文件里都有详细的解释。我们只需要将见面#去掉,并修改其value就可以了。
一个hibernate.properties例子:
1
2
3
4
5
6
7
8
9
10
11
12
13
|
#数据库使用的驱动类 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类在同一包(目录)中。
1
2
3
4
|
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_class |
JDBC driver class |
hibernate.connection.url |
JDBC URL |
hibernate.connection.username |
database user |
hibernate.connection.password |
数据库用户密码 |
hibernate.connection.pool_size |
maximum number of pooled connections |
Hibernate 数据源属性
属性名 |
用途 |
hibernate.connection.datasource |
数据源 JNDI 名字 |
hibernate.jndi.url JNDI |
提供者的 URL(可选) |
hibernate.jndi.class JNDI |
InitialContextFactory 类(可选) |
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_name |
org.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有适当的默认值。入门者可以忽略这些设置,等学到一定阶段,你可以参考官方文档进行适当配置。
Hibernate配置方式的更多相关文章
-
hibernate 联合主键生成机制(组合主键XML配置方式)
hibernate 联合主键生成机制(组合主键XML配置方式) 如果数据库中用多个字段而不仅仅是一个字段作为主键,也就是联合主键,这个时候就可以使用hibernate提供的联合主键生成策略. 具体 ...
-
hibernate 一对一 one to one的两种配置方式
hibernate中one-to-one两种配置方式 标签: hibernateHibernateone-to-one 2013-02-19 17:44 11445人阅读 评论(1) 收藏 举报 分 ...
-
spring+hibernate 配置多个数据源过程 以及 spring中数据源的配置方式
spring+hibernate 配置多个数据源过程 以及 spring中数据源的配置方式[部分内容转载] 2018年03月27日 18:58:41 守望dfdfdf 阅读数:62更多 个人分类: 工 ...
-
Hibernate中双向多对多的两种配置方式
Hibernate中双向多对多的两种配置方式 1.建立多对多双向关联关系 package cn.happy.entitys; import java.util.HashSet; import java ...
-
c3p0三种配置方式(automaticTestTable)
c3p0的配置方式分为三种,分别是http://my.oschina.net/lyzg/blog/551331.setters一个个地设置各个配置项2.类路径下提供一个c3p0.properties文 ...
-
Spring MVC+Spring +Hibernate配置事务,但是事务不起作用
最近做项目,被一个问题烦恼了很久.使用Spring MVC+Spring +Hibernate开发项目,在使用注解配置事务管理,刚开始发现无论如何数据库都无法更新,但是可以从数据库查询到数据.怀疑是配 ...
-
Hibernate入门6.Hibernate检索方式
Hibernate入门6.Hibernate检索方式 20131128 代码下载 链接: http://pan.baidu.com/s/1Ccuup 密码: vqlv Hibernate的整体框架已经 ...
-
Spring+Hibernate配置多数据源
配置说明 在实际应用中,经常会用到读写分离,这里就这种情况进行Spring+Hibernate的多数据源配置.此处的配置只是让读的方法操作一个数据库,写的方法操作另外一个数据库. 注:我这里的配置JD ...
-
C3P0连接池配置方式
c3p0的配置方式分为三种,分别是 1.setters一个个地设置各个配置项 2.类路径下提供一个c3p0.properties文件 3.类路径下提供一个c3p0-config.xml文件 1.set ...
随机推荐
-
java27
1:反射(理解) (1)类的加载及类加载器 (2)反射: 通过字节码文件对象,去使用成员变量,构造方法,成员方法 (3)反射的使用 A:通过反射获取构造方 ...
-
iOS应用之间调用
//// iOS应用之间调用.h// IOS笔记 1.判断系统里是否安装了某个app.比如新浪微博应用注册了URL scheme为@"weibo",我们可以通过[[UIAppl ...
-
iOS开发——源代码管理——git(分布式版本控制和集中式版本控制对比,git和SVN对比,git常用指令,搭建GitHub远程仓库,搭建oschina远程仓库 )
一.git简介 什么是git? git是一款开源的分布式版本控制工具 在世界上所有的分布式版本控制工具中,git是最快.最简单.最流行的 git的起源 作者是Linux之父:Linus Bened ...
-
Ajax动态滚动加载数据
看新浪微博,人人网都有这样的效果:滚动条滚动到最下面的时候,新的数据就被自动加载出来了,今天亲自尝试了一下这个效果的实现. 最开始在CSDN上写了一版,功能比较简单,今天又增加了一个小功能:翻页到指定 ...
-
post请求和get请求的区别
1:如果表单是以post方式发送,那么表单中的数据会放在请求报文体中,发送到服务端.但是如果是以get方式提交表单,那么表单中用户输入的数据都是以URL地址的方式发送到服务端. 2:在服务端接收数据时 ...
-
消息对话框(MessageBox)用法介绍
在软件中我们经常会弹出个小窗口,给一点点提示.这就会用到消息对话框. 在Win32 API程序中只有MessageBox这一种用法. 而在MFC中就有三各方法: 1.调用API中的MessageBox ...
-
B二分法
<span style="color:#330099;">/* B - 二分法 基金会 Time Limit:1000MS Memory Limit:65536KB 6 ...
-
ROS(indigo)一个简单灵活和可扩展的2D多机器人仿真器stdr_simulator
官方网址:http://wiki.ros.org/stdr_simulator 教程非常详细,参考即可.这里引用一张架构图.hydro,indigo,jade,kinetic均可用. 可以使用Qt编译 ...
- SQL类型转换和数学函数
-
关于JAVA项目中的常用的异常处理情况总结
1. JAVA异常处理 在面向过程式的编程语言中,我们可以通过返回值来确定方法是否正常执行.比如在一个c语言编写的程序中,如果方法正确的执行则返回1.错误则返回0.在vb或delphi开发的应用程序中 ...