当前位置:首页 » 操作系统 » hibernate多数据库

hibernate多数据库

发布时间: 2022-05-08 02:51:05

⑴ hibernate跨数据库查询

<!-- DataSource -->
以Mysql数据库为例: <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
<property name="driverClass" value="com.mysql.jdbc.Driver" />
<property name="jdbcUrl" value="jdbc:mysql://远程数据库的地址:端口号/数据库名" />
<property name="user" value="远程数据库的用户名" />
<property name="password" value="远程数据库的密码" />
<property name="maxPoolSize" value="100" />
<property name="minPoolSize" value="10" />
<property name="initialPoolSize" value="1" />
<property name="maxIdleTime" value="60" /> <!--单位秒-->
</bean>说白了,就是取得远程数据库的地址、端口号、用户名、密码就可以了。与连接本机区别不大。

⑵ hibernate数据库实现查询两个不同的数据库

配置两个数据源,将两个sessionfactory注入到不同的两个templete中,将两个templete模板再注入到两个中,一个调用模板的get方法取出A库中的学号,根据学号,另一调用get方法取出b库中的数据对象,然后操作A数据库的调用sava或者savaorupdate插入到A库,主要配置好hibernate+spring整合的配置文件

⑶ hibernate如何支持多数据库

一个sessionFactory对应一个数据库 配置多个不同名的sf 写一个容器管理他们

⑷ NHibernate 连接多数据库怎么配置

在开发一些项目时,会使用到多个数据库。例如类A保存在数据库A,类B保存在数据库B。NHibernate在BuildSessionFactory之后,ISessionFactory就不能改变数据库的连接,即是说一个ISessionFactory只能对应一个数据库连接。但NHibernate可以在同一个应用中实例化多个ISessionFactory。实例化多个ISessionFactory,并让类A或类B找到自己所对应的ISessionFactory,获取ISession,即可实现多数据库连接。

如何通过类型获取ISessionFactory呢?ISessionFactory的Statistics.EntityNames中保存了所有映射了的实体类的类名。我们可以判断实体类的类名是否在EntityNames中,确定实体类所对应的ISessionFactory。

根据类型获取ISessionFactory:

java">
{
<TEntity>()whereTEntity:IEntity;
}

:ISessionFactoryHolder
{
privateIDictionary<string,int>entityDictionary;
privateIDictionary<int,ISessionFactory>factoryDictionary;

publicSessionFactoryHolder()
{
this.entityDictionary=newDictionary<string,int>();
this.factoryDictionary=newDictionary<int,ISessionFactory>();
}

#

public<TEntity>()whereTEntity:IEntity
{
inthashCode=0;

Asserts.Assert<MappingException>(
this.EntityInDictionary(typeof(TEntity).FullName,outhashCode)==false
,string.Format("Nopersisterfor:{0}",typeof(TEntity).FullName));

returnthis.factoryDictionary[hashCode];
}

#endregion

(ISessionFactorysessionFactory)
{
Asserts.IsNotNull(sessionFactory,"sessionFactory");

this.factoryDictionary[sessionFactory.GetHashCode()]=sessionFactory;

this.(sessionFactory.Statistics.EntityNames
,sessionFactory.GetHashCode());
}

privateboolEntityInDictionary(stringentityName,outintsessionFactoryHashCode)
{
returnthis.entityDictionary.TryGetValue(entityName,outsessionFactoryHashCode);
}

privatevoid(string[]entityNames,intsessionFactoryHashCode)
{
foreach(varentityNameinentityNames)
{
this.entityDictionary[entityName]=sessionFactoryHashCode;
}
}
}

根据类型获取ISession:

publicinterfaceISessionHolder:IDisposable
{
ISessionGetSessionForEntity<TEntity>()whereTEntity:IEntity;
}
publicclassSessionHolder:ISessionHolder,IUnitOfWork
{
;
privateIDictionary<int,ISession>sessionDictionary;

publicSessionHolder()
{
Asserts.IsNotNull(factoryHolder,"factoryHolder");

this.factoryHolder=factoryHolder;
this.sessionDictionary=newDictionary<int,ISession>();
}

#regionISessionHolderMembers

<TEntity>()whereTEntity:IEntity
{
if(this.sessionDictionary.ContainsKey(this.GetFactoryHashCode<TEntity>())==false)
{
this.sessionDictionary[this.GetFactoryHashCode<TEntity>()]=this.OpenNewSession<TEntity>();
}

returnthis.sessionDictionary[this.GetFactoryHashCode<TEntity>()];
}

#endregion

#regionIDisposableMembers
//DisposeCode
#endregion

#regionIUnitOfWork
//IUnitOfWork
#endregion

<TEntity>()whereTEntity:IEntity
{
returnthis.factoryHolder.GetSessionFactoryForEntity<TEntity>();
}

privateintGetFactoryHashCode<TEntity>()whereTEntity:IEntity
{
returnthis.GetFactory<TEntity>().GetHashCode();
}

privateISessionOpenNewSession<TEntity>()whereTEntity:IEntity
{
returnthis.GetFactory<TEntity>().OpenSession();
}
}

Repository:

publicinterfaceIRepository<TEntity>whereTEntity:IEntity
{
voidSave(TEntityentity);
//......
}

<TEntity>:IRepository<TEntity>whereTEntity:IEntity
{
;

publicNHibernateRepository(ISessionHoldersessionHolder)
{
Asserts.IsNotNull(sessionHolder,"sessionHolder");

this.sessionHolder=sessionHolder;
}


{
get
{
returnthis.sessionHolder.GetSessionForEntity<TEntity>();
}
}

publicoverridevoidSave(TEntityentity)
{
this.Session.Save(entity);
}
//......
}

⑸ Hibernate 怎样 连接2个以上的数据库

<class
name="entity.Person"
table="Person"
schema="dbo"
catalog="hibernate">
用catalog属性设置是那个数据库就可以拉

⑹ java web项目中hibernate +spring +tomcat如何实现多数据库

一下方法只能是同一种数据库, 因为数据库不同的话,数据库方言也就不同,这个暂时解决不了

applicationContext.xml:
<bean id="parentDataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<!-- 设置连接池初始值 -->
<property name="initialSize" value="5" />
<!-- 设置连接池最大值 -->
<property name="maxActive" value="5" />
<!-- 设置连接池最小空闲值 -->
<property name="minIdle" value="2" />
<!-- 设置连接池最大空闲值 -->
<property name="maxIdle" value="5" />
</bean>

<bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<property name="hibernateProperties">
<value>
<!-- 设置数据库方言 -->
hibernate.dialect=org.hibernate.dialect.Oracle10gDialect
<!-- 输出SQL语句到控制台 -->
hibernate.show_sql=true
<!-- 格式化输出到控制台的SQL语句 -->
hibernate.format_sql=true

</value>
</property>
<property name="packagesToScan" value="com.zxw.link.business.**.entity"></property>
</bean>

<bean id="dataSource" class="com.zxw.link.commons.data.DynamicDataSource">
<property name="targetDataSources">
<map key-type="java.lang.String">
<entry key="zxw" value-ref="zxw_DataSource"/>
<entry key="new_back" value-ref="new_back_DataSource"/>
<!--更多的数据源,根据下面的配置文件再写一个datasource 并且在这里配置entry -->
</map>
</property>
<property name="defaultTargetDataSource" ref="zxw_DataSource"/>
</bean>

<bean id="zxw_DataSource" parent="parentDataSource">
<!-- 设置JDBC驱动名称 -->
<property name="driverClassName" value="oracle.jdbc.driver.OracleDriver" />
<!-- 设置JDBC连接URL -->
<property name="url" value="jdbc:oracle:thin:@148.20.20.17:1521:oradb" />
<!-- 设置数据库用户名 -->
<property name="username" value="zhou" />
<!-- 设置数据库密码 -->
<property name="password" value="zhou" />
</bean>

<!-- #################### 新备份 ################ -->
<bean id="new_back_DataSource" parent="parentDataSource">
<!-- 设置JDBC驱动名称 -->
<property name="driverClassName" value="oracle.jdbc.driver.OracleDriver" />
<!-- 设置JDBC连接URL -->
<property name="url" value="jdbc:oracle:thin:@148.20.20.15:1521:ora10" />
<!-- 设置数据库用户名 -->
<property name="username" value="report" />
<!-- 设置数据库密码 -->
<property name="password" value="report" />
</bean>
<!-- #################### 新备份 ################ -->

DynamicDataSource .java:

public class DynamicDataSource extends AbstractRoutingDataSource {

protected Object determineCurrentLookupKey() {
// TODO Auto-generated method stub
return CustomerContextHolder.getCustomerType();
}

}

CustomerContextHolder .java:

public class CustomerContextHolder {
private static final ThreadLocal contextHolder =
new ThreadLocal();

public static void setCustomerType(String customerType) {
contextHolder.set(customerType);
}

public static String getCustomerType() {
return (String) contextHolder.get();
}

public static void clearCustomerType() {
contextHolder.remove();
}
}

action中调用
public class ZzhAction {

@Resource
private ZzhService zzhService;

@RequestMapping("/zzh/test.do")
public void test(){

List<Zzh> zzhs=zzhService.getAll();
System.out.println(zzhs.size());
//设置数据源, 参数为配置文件中的
//<entry key="new_back" value-ref="new_back_DataSource"/> 的key
CustomerContextHolder.setCustomerType("new_back");
}

}

⑺ 程序中hibernate怎样实现多个数据库多表互相联查

程序中hibernate怎样实现多个数据库多表互相联查
参考如下
例如:student表和score表需要做联合查询。
1)sql:
select
s.id,s.name,sc.score
from
student
as
s,score
as
sc
where
s.id
=
sc.userId;
(字段都是用的数据库中字段名称)
2)HQL:
select
s.id,s.name,sc.score
from
Student
as
s,Score
as
sc
where
s.id
=
sc.userId;
(上面字段都是
javabean的属性)
如果按1)查询的话,必须调用
session.createSQLQuery();方法
如果按2)查询,还是调用
session.createQuery();

⑻ 基于hibernate 技术的多种数据库管理系统

说的专业,其实就是基于Hibernate的javaweb开发,创建SSH项目,数据库操作使用HIbernate操作

⑼ Hibernate 向数据库一次插入多条数据

把你需要插入的数据全部放到一个集合里面,然后遍历插入,个人觉得用set比较合适因为set是不可重复的,这样才比较符合数据库。

⑽ 怎样用Hibernate配置多个数据源

如果用xml配置的话,那就写两个配置文件,可以不再用“hibernate.cfg.xml”做文件名,随便什么都可以,像“mysql.cfg.xml”或“sqlserver.xml”都行。用Configuration类获取SessionFactory的代码:

SessionFactory mysqlFactory = new Configuration().configure("mysql.cfg.xml").buildSessionFactory();

SessionFactory sqlserverFactory = new Configuration().configure("sqlserver.xml").buildSessionFactory();

如果你用spring,多数据库就更简单了,像这段代码可以完成所有配置:

<beans>
<bean id="mysqlDS" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<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>123456</value>
</property>
</bean>

<bean id="mysqlFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<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" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<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>123456</value>
</property>
</bean>

<bean id="sqlserverFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<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和spring还有很多可行的配置,可以参考他们的references,有很详细地说明的。

热点内容
华为电脑服务器系统进不去提示 发布:2024-10-08 00:13:42 浏览:490
登录密码如何获取 发布:2024-10-07 23:58:40 浏览:424
王者荣耀人机脚本 发布:2024-10-07 23:58:33 浏览:807
地标建筑脚本 发布:2024-10-07 23:48:51 浏览:242
sqlorderby 发布:2024-10-07 23:42:13 浏览:958
qq秒源码 发布:2024-10-07 23:41:37 浏览:471
51单片机编译器 发布:2024-10-07 23:28:04 浏览:798
安卓手机陌陌封设备了怎么搞 发布:2024-10-07 23:17:00 浏览:180
sql管理系统代码 发布:2024-10-07 23:00:51 浏览:524
安卓什么浏览器可以打开 发布:2024-10-07 23:00:51 浏览:121