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

hibernate数据库实现查询两个不同的数据库,第1张

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

persistent.xml配置

<?xml version="1.0" encoding="UTF-8"?>

<persistence xmlns="http://java.sun.com/xml/ns/persistence" version="2.0">

<persistence-unit name="userPU" transaction-type="RESOURCE_LOCAL">

<!--jpa的提供者-->

<provider>org.hibernate.ejb.HibernatePersistence</provider>

<properties>

<!--声明数据库连接的驱动-->

<property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver"/>

<!--jdbc数据库的连接地址-->

<property name="hibernate.connection.url" value="jdbc:mysql://localhost:3306/manager?characterEncoding=gbk"/>

<property name="hibernate.connection.username" value="root"/>

<property name="hibernate.connection.password" value="123456"/>

<!--配置方言-->

<property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5Dialect"/>

<!--激活查询日志功能-->

<property name="hibernate.show_sql" value="true"/>

<!--优雅地输出Sql-->

<property name="hibernate.format_sql" value="true"/>

<!--添加一条解释型标注-->

<property name="hibernate.use_sql_comments" value="false"/>

<!--配置如何根据java模型生成数据库表结构,常用update,validate-->

<property name="hibernate.hbm2ddl.auto" value="update"/>

</properties>

</persistence-unit>

</persistence>

applicationContext.xml配置

<!--第二步-->

<!--定义实体的工厂bean-->

<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">

<property name="persistenceUnitName" value="userPU" />

<property name="persistenceXmlLocation" value="classpath:persistence.xml"></property>

</bean>

<!--第三步-->

<!--定义事务管理器-->

<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">

<property name="entityManagerFactory" ref="entityManagerFactory"/>

</bean>

首先来说,跨数据库肯定是可以的!

通常有两个方法,第一个是笨办法,就是在配置项里定义两个数据源,并且这两个数据源分属于两个SessionFaction对象。并且在代码中也有创建两个dao对象分别对应两个数据库,这样做比较麻烦,代码会很繁琐,并且执行效率不一定高。

第二个办法是使用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)


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/sjk/6731187.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-03-27
下一篇2023-03-27

发表评论

登录后才能评论

评论列表(0条)

    保存