- 浏览: 269809 次
- 性别:
- 来自: 新乡
文章分类
- 全部博客 (227)
- servciemix (10)
- db (18)
- javaTools (4)
- hibernate (31)
- web (3)
- spring (14)
- design pattern (4)
- java security (3)
- portal (1)
- ejb (6)
- session (2)
- java_lang (21)
- jbpm (29)
- struts (7)
- orgRights (2)
- project manager Jira (7)
- 跨库事务 (2)
- mysql (14)
- ubuntu (7)
- osgi (9)
- maven ant make (4)
- 分布式 高并发 高性能 (5)
- virgo-dm_server (0)
- osgi web (3)
- platform (1)
- smooks (1)
- business (1)
- 职场生涯 (14)
- Java编码格式 (2)
- web服务 (1)
- 计算机使用 (1)
- 健康工作生活的保障,工作中务必抛掉的不良心态 (4)
- 电信-网络监控 (1)
- 多线程-multithread (1)
- 海量数据-高性能 (2)
- Mybatis (1)
- web开发平台研发 (0)
- oracle (0)
- 应用服务器调优 (0)
- web前端 (0)
- servlet-jsp (0)
- tomcat (2)
- newtouch (1)
- portal_liferay (2)
- version control (1)
- apm-impact (2)
- tools (1)
- 研发管理 (1)
- 电商业务 (1)
- 生鲜电商市场调查 (0)
- PBX (0)
- 房东 (0)
最新评论
-
lifuchao:
...
权限问题 -
Branding:
谢谢,受教了,另外,CONN AS SYSDBA,必须是在操作 ...
Oracle密码忘记了怎么办? -
zhuchao_ko:
...
Portal实现原理 -
败类斯文:
不知道改哪里。。。木有见到红色。。表示悟性低了、、
jira error: Neither the JAVA_HOME nor the JRE_HOME environment variable is defin -
c__06:
正文:假如事务我是这样定义的: <tx:method n ...
Spring中Transactional配置
引用
丬Bōer 的 Hibernate多数据库访问问题
一、Hibernate访问数据库时加载的过程
对于大多数使用Hibernate的朋友来说,通常使用一下方式来获得Configuration实例: Configuration configure = new Configuration().configure();
在 Hibernate中,Configuration是hibernate的入口。在实例化一个Configuration的时候,Hibernate会自动在环境变量(classpath)里面查找Hibernate配置文件hibernate.properties。如果该文件存在,则将该文件的内容加载到一个Properties的实例GLOBAL_PROPERTIES里面,如果不存在,将打印信息 hibernate.properties not found;
接下来Hibernate将所有系统环境变量(System.getProperties())也添加到 GLOBAL_PROPERTIES里面。如果配置文件hibernate.properties存在,系统还会进一步验证这个文件配置的有效性,对于一些已经不支持的配置参数,系统将打印出警告信息。
默认状态下configure()方法会自动在环境变量(classpath)下面寻找Hibernate配置文件hibernate.cfg.xml,如果该文件不存在,系统会打印如下信息并抛出HibernateException异常: hibernate.cfg.xml not found;如果该文件存在,configure()方法会首先访问<session-factory>,并获取该元素name的属性,如果name的属性非空,将用这个配置的值来覆盖hibernate.properties的hibernate.session_factory_name的配置的值,从这里我们可以看出,hibernate.cfg.xml里面的配置信息可以覆盖hibernate.properties的配置信息。
接下来configure()方法访问<session-factory>的子元素,首先将使用所有的<property>元素配置的信息来覆盖hibernate.properties里面对应的配置信息。
然后configure()会依次访问以下几个元素的内容
<mapping>
<jcs-class-cache>
<jcs-collection-cache>
<collection-cache>
其中<mapping>是必不可少的,必须通过配置<mapping>,configure()才能访问到我们定义的java对象和关系数据库表的映射文件(hbm.xml),例如:
<mapping resource="Cat.hbm.xml"/>
这样configure()方法利用各种资源就创建了一个Configuration实例。对于整个项目来说,如果用一个本地线程来存放这个 Configuration实例,那么整个项目只需要实例化一次Configuration对象(注:Configuration实例很花费时间),也就提高了项目的效率。
二、Hibernate访问多个数据库的配置
根据以上所述,configure()方法默认是通过访问hibernate.cfg.xml的<mapping>元素来加载我们提供的.hbm.xml文件。我们也可以直接指定hbm.xml文件,例如addClass()方法可以直接通过指定class来加载对应的映射文件,hibernate会将提供的 class的全名(包括package)自动转化为文件路径,还可以用addFile方法直接指定映射文件。例如:
Configuration configurate = new Configuration().addClass(“Book.class”);
Configuration configurate = new Configuration().addURL(Configuration.class.getResource ("/Book.hbm.xml"));
Configuration config = new Configuration().addFile("/Cat.hbm.xml");
这样,如果用xml配置来配置多个数据库的话,那就写多个配置文件。这里假设对应两个数据库(一个是MySQL,一个是SQLServer),我们可以把其 xml文件定义为“mysql.cfg.xml”和“sqlserver.cfg.xml”。则用Configuration类获取 SessionFactory的代码如下:
SessionFactory mysqlFactory = new Configuration().configure("/mysql.cfg.xml").buildSessionFactory();
SessionFactory sqlserverFactory = new Configuration().configure("sqlserver.cfg.xml ").buildSessionFactory();
如果你用spring,多数据库就更简单了,像这段代码可以完成所有配置:
<beans>
<bean id="mysqlDS"
<property name="url">
<value>jdbc:mysql://localhost:3306/test</value>
</property>
<property name="driverClassName">
<value>org.gjt.mm.mysql.Driver</value>
</property>
<property name="username">
<value>root</value>
</property>
<property name="password">
<value>123</value>
</property>
</bean>
<bean id="mysqlFactory"
<property name="dataSource">
<ref local="mysqlDS"/>
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
</props>
</property>
<property name="mappingResources">
<list>
<value>test.hbm.xml</value>
</list>
</property>
</bean>
<bean id="sqlserverDS"
<property name="url">
<value>jdbc:odbc:test</value>
</property>
<property name="driverClassName">
<value>sun.jdbc.odbc.JdbcOdbcDriver</value>
</property>
<property name="username">
<value>root</value>
</property>
<property name="password">
<value>123</value>
</property>
</bean>
<bean id="sqlserverFactory"
<property name="dataSource">
<ref local="sqlserverDS"/>
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.SQLServerDialect</prop>
</props>
</property>
<property name="mappingResources">
<list>
<value>test.hbm.xml</value>
</list>
</property>
</bean>
.......
</beans>
以上只是配置Hibernate访问多个数据库的一般方法,hibernate还有很多可行的配置,有兴趣的读者可以参考它的reference。
丬Bōer 的 Hibernate多数据库访问问题
一、Hibernate访问数据库时加载的过程
对于大多数使用Hibernate的朋友来说,通常使用一下方式来获得Configuration实例: Configuration configure = new Configuration().configure();
在 Hibernate中,Configuration是hibernate的入口。在实例化一个Configuration的时候,Hibernate会自动在环境变量(classpath)里面查找Hibernate配置文件hibernate.properties。如果该文件存在,则将该文件的内容加载到一个Properties的实例GLOBAL_PROPERTIES里面,如果不存在,将打印信息 hibernate.properties not found;
接下来Hibernate将所有系统环境变量(System.getProperties())也添加到 GLOBAL_PROPERTIES里面。如果配置文件hibernate.properties存在,系统还会进一步验证这个文件配置的有效性,对于一些已经不支持的配置参数,系统将打印出警告信息。
默认状态下configure()方法会自动在环境变量(classpath)下面寻找Hibernate配置文件hibernate.cfg.xml,如果该文件不存在,系统会打印如下信息并抛出HibernateException异常: hibernate.cfg.xml not found;如果该文件存在,configure()方法会首先访问<session-factory>,并获取该元素name的属性,如果name的属性非空,将用这个配置的值来覆盖hibernate.properties的hibernate.session_factory_name的配置的值,从这里我们可以看出,hibernate.cfg.xml里面的配置信息可以覆盖hibernate.properties的配置信息。
接下来configure()方法访问<session-factory>的子元素,首先将使用所有的<property>元素配置的信息来覆盖hibernate.properties里面对应的配置信息。
然后configure()会依次访问以下几个元素的内容
<mapping>
<jcs-class-cache>
<jcs-collection-cache>
<collection-cache>
其中<mapping>是必不可少的,必须通过配置<mapping>,configure()才能访问到我们定义的java对象和关系数据库表的映射文件(hbm.xml),例如:
<mapping resource="Cat.hbm.xml"/>
这样configure()方法利用各种资源就创建了一个Configuration实例。对于整个项目来说,如果用一个本地线程来存放这个 Configuration实例,那么整个项目只需要实例化一次Configuration对象(注:Configuration实例很花费时间),也就提高了项目的效率。
二、Hibernate访问多个数据库的配置
根据以上所述,configure()方法默认是通过访问hibernate.cfg.xml的<mapping>元素来加载我们提供的.hbm.xml文件。我们也可以直接指定hbm.xml文件,例如addClass()方法可以直接通过指定class来加载对应的映射文件,hibernate会将提供的 class的全名(包括package)自动转化为文件路径,还可以用addFile方法直接指定映射文件。例如:
Configuration configurate = new Configuration().addClass(“Book.class”);
Configuration configurate = new Configuration().addURL(Configuration.class.getResource ("/Book.hbm.xml"));
Configuration config = new Configuration().addFile("/Cat.hbm.xml");
这样,如果用xml配置来配置多个数据库的话,那就写多个配置文件。这里假设对应两个数据库(一个是MySQL,一个是SQLServer),我们可以把其 xml文件定义为“mysql.cfg.xml”和“sqlserver.cfg.xml”。则用Configuration类获取 SessionFactory的代码如下:
SessionFactory mysqlFactory = new Configuration().configure("/mysql.cfg.xml").buildSessionFactory();
SessionFactory sqlserverFactory = new Configuration().configure("sqlserver.cfg.xml ").buildSessionFactory();
如果你用spring,多数据库就更简单了,像这段代码可以完成所有配置:
<beans>
<bean id="mysqlDS"
<property name="url">
<value>jdbc:mysql://localhost:3306/test</value>
</property>
<property name="driverClassName">
<value>org.gjt.mm.mysql.Driver</value>
</property>
<property name="username">
<value>root</value>
</property>
<property name="password">
<value>123</value>
</property>
</bean>
<bean id="mysqlFactory"
<property name="dataSource">
<ref local="mysqlDS"/>
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
</props>
</property>
<property name="mappingResources">
<list>
<value>test.hbm.xml</value>
</list>
</property>
</bean>
<bean id="sqlserverDS"
<property name="url">
<value>jdbc:odbc:test</value>
</property>
<property name="driverClassName">
<value>sun.jdbc.odbc.JdbcOdbcDriver</value>
</property>
<property name="username">
<value>root</value>
</property>
<property name="password">
<value>123</value>
</property>
</bean>
<bean id="sqlserverFactory"
<property name="dataSource">
<ref local="sqlserverDS"/>
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.SQLServerDialect</prop>
</props>
</property>
<property name="mappingResources">
<list>
<value>test.hbm.xml</value>
</list>
</property>
</bean>
.......
</beans>
以上只是配置Hibernate访问多个数据库的一般方法,hibernate还有很多可行的配置,有兴趣的读者可以参考它的reference。
发表评论
-
如何使用hibernate
2012-05-24 19:21 0一、选择Hibernate还是iBATIS都有它的道理: H ... -
关于hibernate自动建表和主键的数据类型的关系
2012-02-27 16:18 1142要想让hibernate自动建表, 1、除了 <prop ... -
用Spring+Hibernate链接时,在增删改时会报错: Write operations are not allowed in read-only mod
2011-09-11 19:53 884用Spring+Hibernate链接时,在增删改时会报错: ... -
[转]hibernate延迟加载
2011-04-26 11:41 5672007-12-01 [转]hibernate延迟 ... -
Hibernate利用XDoclet自动生成配置文件
2011-04-18 18:34 801Hibernate利用XDoclet自动生 ... -
如何利用 myeclipse 生成Hibernate 配置文件
2011-04-18 18:13 1247在hibernate中,每个数据表对应的其实是一个实体类,每个 ... -
Hibernate Synchronizer是一个Eclipse插件,可以自动生成*.hbm文件、持久化类和DAOs
2011-04-18 18:00 1895Hibernate Synchronizer是一个Eclips ... -
Hibernate auto produce
2011-04-18 17:52 981Hibernate 中需要class和mapp ... -
使用动态代理实现用AOP对数据库进行操作
2011-04-12 14:11 947使用动态代理实现用AOP对数据库进行操作 2008-03-14 ... -
Hibernate中cascade与inverse属性详解
2011-04-01 16:20 938Hibernate中cascade与inverse属性详解 ... -
事务和事务边界
2011-03-31 15:44 101310.1.2 事务和事务边界 http://book.51ct ... -
事务传播行为种类
2011-03-31 15:31 821事务传播行为种类 Spring在TransactionDef ... -
Hibernate saveOrUpdate分析
2011-03-31 15:30 861* Hibernate s ... -
使用Spring AOP代理方式实现声明式事务的原理
2011-03-31 15:28 1205使用Spring AOP代理方式实 ... -
Hibernate Session缓存概述
2011-03-31 15:27 1006* Hibernate Session缓存 ... -
解说Hibernate的工作原理实例
2011-03-31 15:26 874* 解说Hibernate的工作原理实例 ... -
简述Hibernate配置连接池
2011-03-31 15:25 842* 简述Hiber ... -
简单解析J2EE数据持久层设计
2011-03-31 15:24 980* 简单解 ... -
浅析Hibernate Callback接口
2011-03-31 15:23 893* 浅析Hibernate Callbac ... -
概述Hibernate equals()方法
2011-03-31 15:22 768* 概述Hiber ...
相关推荐
总结来说,Hibernate访问多个数据库的关键在于为每个数据库创建单独的配置和`SessionFactory`。在XML配置文件中,每个数据库的连接信息、方言和映射文件都需要明确指定。而在Spring环境中,我们可以利用IoC容器和...
这有助于优化性能,减少不必要的数据库访问。 10. **事务管理** Hibernate提供了一种便捷的事务管理方式,可以将多个数据库操作封装在一个Transaction中,保证原子性和一致性。 通过以上内容,我们了解了...
- 使用二级缓存:通过配置Hibernate的二级缓存,可以减少对数据库的访问,提高系统性能。 - HQL与SQL:使用HQL(Hibernate Query Language)可以更好地利用ORM的优势,但必要时也可以使用原生SQL进行性能优化。 5...
### HIBERNATE - 符合Java习惯的关系数据库持久化:深入解析与实践 #### 一、概述 Hibernate是Java领域内最受欢迎的对象关系映射(ORM)框架之一,它简化了Java应用程序与关系型数据库之间的交互,使得开发人员...
这样的设计既支持了读写分离,又简化了事务管理,是互联网应用中常见的一种数据库访问策略。在实际应用中,还需要根据业务需求,配置事务管理器、制定读写策略,并且可能需要处理如分库分表、数据库连接池等更复杂的...
当与Hibernate结合使用时,可以构建出高效、灵活的数据访问层。 在反向生成数据库文件的过程中,首先你需要确保已安装并配置好Hibernate 3.2以及相应的JDBC驱动(对于SQL 2000,这通常是Microsoft的JDBC驱动)。接...
- 为提高性能,一对多关系默认采用懒加载,只有在真正访问集合时才会去数据库加载数据。若希望在获取父实体时同时加载子实体,可以设置`fetch = FetchType.EAGER`。 6. **缓存策略**: - Hibernate提供了一级缓存...
处理多对多关系时,考虑到N+1查询问题,可以使用`fetch`策略进行预加载,避免多次数据库访问。同时,合理使用缓存策略(一级缓存、二级缓存)能提升性能。 **六、总结** 通过Hibernate的多对多映射,开发者可以...
总的来说,这个“hibernate 多对多 映射实例,学生 选课”项目涵盖了Hibernate的多对多关系映射、数据库设计、对象模型构建、事务管理等多个方面,是一个很好的学习和实践Hibernate的实战案例。通过深入理解和实践这...
《Hibernate需要注意的问题与数据源配置详解》 在Java企业级开发中,Hibernate作为一种流行的ORM(对象关系映射)框架,极大地简化了数据库操作。然而,使用Hibernate的过程中,开发者需要特别注意一些关键点,以...
本文将深入探讨如何在Hibernate中实现多对多关系,并通过配置文件和数据库实际操作来阐述这一过程。 首先,多对多关系在数据库设计中表示两个实体之间存在多个对应关系。比如,在学生和课程的关系中,一个学生可以...
Order类会包含对OrderLineItem(订单项)的引用,表示一个订单可以包含多个商品。 4. **订单项(OrderLineItem Entity)**:订单项表示订单中的每一件商品,包含商品ID、数量和单价。这需要创建OrderLineItem类和相应...
在Java的持久化框架Hibernate中,"多对一"关联关系是一种常见的对象关系映射(ORM)设计,它表示一个实体(子项)可以与多个其他实体(父项)相关联,而每个父项可能被多个子项引用。在数据库层面,这通常对应于一个...
总的来说,这篇博客和相关代码示例为开发者提供了一个理解和实现Hibernate中多对多单向关联的起点,帮助他们更好地处理复杂的数据库关系映射。学习和实践这部分内容对于提升Java后端开发能力,特别是使用Hibernate...
HIBERNATE - 符合Java习惯的关系数据库持久化 Hibernate参考文档 3.2 -------------------------------------------------------------------------------- 目录 前言 1. 翻译说明 2. 版权声明 1. Hibernate...
6. **第二级缓存**:为了提高性能,Hibernate支持第二级缓存,它可以存储已加载的对象,减少对数据库的访问。常用的二级缓存提供商有Ehcache和Infinispan。 7. **事件监听器和拦截器**:Hibernate允许自定义事件...
DBMS是数据库系统中各种操作的桥梁,允许多个应用程序同时访问数据库。 数据模型是数据库系统的基础,它定义了数据的逻辑结构。常见的数据模型有多种,如层次模型、网络模型和关系模型。其中,关系模型是最广泛使用...
延迟加载是一种优化技术,允许Hibernate在真正需要的时候才加载关联的对象,从而减少了不必要的数据库访问,提高了应用程序的性能。 #### Session管理 在Hibernate中,所有的数据操作都需要在一个Session的上下文中...