hibernate跨数据库
㈠ hibernate不同数据库连接查询
在 hibernate 里面写原生sql——ANSI SQL,就可以这样
如果单查询,还可以用视图的方式
㈡ hibernate跨数据库查询
可以使用hibernate支持的Hql语言实现跨平台操作数据库的要求!
㈢ Hibernate框架适用于什么项目说明其优劣性
Hibernate框架基本上适用于所有项目,其优点在于hibernate对表的级联操作,如何你操作一条数据对很多表的数据都有影响,hibernate的级联会自动帮你维护表里面的数据,前提是要配置级联选项。
其二优点在于hibernate跨数据库,我想只要是程序员,都希望自己的项目开发后适用于所有的数据库,不只是针对某一种数据库,如果单纯的用jdbc去操作数据库,那么就必须编写sql语句,不同的数据库的sql语句稍微有差距,那么项目肯定是针对某个数据库进行开发。要想hibernate的项目实用所有数据,前提是不要使用hibernate的纯sql查询。
一般大项目都是对性能要求很高,也就是并发量很大,整个项目的性能瓶颈都压在了数据库上,sql语句的好坏直接影响性能,如果不精通hibernate的查询语句和hibernate管理的对象的状态的区别就不要使用hibernate。什么是精通hibernate ,你懂的。
㈣ hibernate可以跨数据库吗
首先来说,跨数据库肯定是可以的!
通常有两个方法,第一个是笨办法,就是在配置项里定义两个数据源,并且这两个数据源分属于两个SessionFaction对象。并且在代码中也有创建两个对象分别对应两个数据库,这样做比较麻烦,代码会很繁琐,并且执行效率不一定高。
第二个办法是使用spring开源框架里提供的动态数据源,通过动态的加载,将两个数据源信息加载到一个SessionnFacgtion对象中。方法一里面提到的缺点在这里都能够很好的解决。
大概步骤如下:
1.org.springframework.beans.factory.support.DefaultListableBeanF
actory获得bean工厂,可以添加销毁数据源;
2.org.springframework.beans.factory.support.BeanDefinitionBuilder动态创建bean,然后通过
DefaultListableBeanFactory.registerBeanDefinition(dsInfo.getId(), beanDefinitionBuilder.getBeanDefinition()); 注册数据源事务
3.销毁数据源
beanFactory.destroySingleton(tsId);
beanFactory.removeBeanDefinition(tsId);
㈤ 如何用hibernate实现跨oracle数据库操作
如果用的myeclipsese的话,打开window---->open perspective---->Myeclipse Haibernate,然后new一个,然后的然后,......在new的这个点击右键有个反向工程,就好了!
㈥ hibernate与数据库连接的几种方式
三种连接都是以连接MySQl为例。
<!-- JDBC驱动程序 -->
<property name="connection.driver_class">org.gjt.mm.mysql.Driver</property> <property name="connection.url">jdbc:mysql://localhost:3306/struts?useUnicode=true&characterEncoding=GBK</property> <!-- 数据库用户名 -->
<property name="connection.username">root</property> <!-- 数据库密码 -->
<property name="connection.password">8888</property>
上面的一段配置,在c3p0和dbcp中,都是必需的,因为hibernate会根据上述的配置来生成connections,再交给c3p0或dbcp管理.但是,proxool则不能,虽然说服文档上说proxool也可以和hibernate结合,但我按照官方文档上的说明怎么配也出错,而且,到了sun和hibernat有的官方网站上问了几天,都没有一个人回复。后来我只能让proxool自身来生成连接,这在下面再讲。
1 C3P0
只需在hibernate.cfg.xml中加入
<property name="c3p0.min_size">5</property>
<property name="c3p0.max_size">30</property>
<property name="c3p0.time_out">1800</property>
<property name="c3p0.max_statement">50</property>
还有在classespath中加入c3p0-0.8.4.5.jar
2 dbcp
在hibernate.cfg.xml中加入
<property name="dbcp.maxActive">100</property>
<property name="dbcp.whenExhaustedAction">1</property>
<property name="dbcp.maxWait">60000</property>
<property name="dbcp.maxIdle">10</property>
<property name="dbcp.ps.maxActive">100</property>
<property name="dbcp.ps.whenExhaustedAction">1</property>
<property name="dbcp.ps.maxWait">60000</property>
<property name="dbcp.ps.maxIdle">10</property>
还有在classespath中加入commons-pool-1.2.jar 和commons-dbcp-1.2.1.jar.
3 proxool
在hibernate.cfg.xml中加入
<property name="proxool.pool_alias">pool1</property>
<property name="proxool.xml">ProxoolConf.xml</property>
<property name="connection.provider_class">net.sf.hibernate.connection.ProxoolConnectionProvider</property>
然后,在和hibernate.cfg.xml同一个目录下,加一个ProxoolConf.xml文件,内容为
<?xml version="1.0" encoding="utf-8"?>
<!-- the proxool configuration can be embedded within your own application's.
Anything outside the "proxool" tag is ignored. -->
<something-else-entirely>
<proxool>
<alias>pool1</alias>
<!--proxool只能管理由自己产生的连接-->
<driver-url>jdbc:mysql://localhost:3306/struts?useUnicode=true&characterEncoding=GBK</driver-url>
<driver-class>org.gjt.mm.mysql.Driver</driver-class>
<driver-properties>
<property name="user" value="root"/>
<property name="password" value="8888"/>
</driver-properties>
<!-- proxool自动侦察各个连接状态的时间间隔(毫秒),侦察到空闲的连接就马上回收,超时的销毁-->
<house-keeping-sleep-time>90000</house-keeping-sleep-time>
<!-- 指因未有空闲连接可以分配而在队列中等候的最大请求数,超过这个请求数的用户连接就不会被接受-->
<maximum-new-connections>20</maximum-new-connections>
<!-- 最少保持的空闲连接数-->
<prototype-count>5</prototype-count>
<!-- 允许最大连接数,超过了这个连接,再有请求时,就排在队列中等候,最大的等待请求数由maximum-new-connections决定-->
<maximum-connection-count>100</maximum-connection-count>
<!-- 最小连接数-->
<minimum-connection-count>10</minimum-connection-count>
</proxool>
</something-else-entirely>
并在classespath中加入proxool-0.8.3.jar
㈦ hibernate跨数据库查询问题
不可以跨数据库连接查询的,这得看数据库中没有这方面的其他支持。
而且你现在这样查根本就不在一个事物中,如果需要支持多数据库事物需要使用jta,分布式事物。
㈧ hibernate切换了不同的数据库,那hql还需要改动吗它会自动转换成对应数据库语言的sql吗
不需要改动。hql是独立于数据库的,hibernate切换数据库以后,除了jdbc的一些如地址、用户名、密码要换以外。
Hibernate支持不同的数据库主要是用方言也就是dialect的,对应就是hibernate.cfg.xml配置文件里的一个设置,比如 SQL Server的就是:
<propertyname="hibernate.dialect"value="org.hibernate.dialect.SQLServerDialect"/>
这里的org.hibernate.dialect.SQLServerDialect是hibernate带的或你自己提供的一个数据库数据类型映射的一个Java类,由它处理不同数据库的区别。
但是如果不同的数据库之间差别太大的话,即直接要写不同的SQL语句的话,Hibernate的dialect也处理不了。