Hibernate 連線訪問多個數據庫(含訪問不同資料庫的相同表)
本人在開發過程中的解決方案,希望大家交流。一般用myEclipse工具會自動生成Hibernate的相關檔案,大致有下面幾類:
(1)資料庫配置檔案:.cfg.xml
(2)對映檔案.hbm.xml
(3)對映類:pojo
(4)會話工廠類:SessionFactory
(5)基礎DAO介面:IBaseHibernateDAO
(6)DAO介面的實現基礎類:BaseHibernateDAO
(7)資料訪問物件:DAO。所有DAO預設繼承BaseHibernateDAO
當然,不同的工具生成的檔案也略有差異,但不影響實現思路。
一般工具生成的配置只針對一個數據庫,所以都生成了一個數據庫配置檔案。
(1)配置兩個資料庫配置檔案:db1.cfg.xml和db2.cfg.xml,分別連線兩個資料庫。(2)配置兩個SessionFactory:SessionFactory_db1繫結db1.cfg.xml,SessionFactory_db2,繫結db2.cfg.xml。(3)基礎DAO介面:IBaseHibernateDAO保持不變,程式碼預設如下
public interface IBaseHibernateDAO {
public Session getSession( );
}
(4)DAO介面的實現基礎類:BaseHibernateDAO改造後如下:
public class BaseHibernateDAO implementsIBaseHibernateDAO {
private String dbName;//要連線的資料庫
// 為了保證每個DAO能夠正確指定所操作的資料庫,將無參構造設為私有private BaseHibernateDAO() { }
//
指定目標資料庫的DAO構造方法public BaseHibernateDAO(StringdbName) {
this.dbName = dbName;
}
//重寫getSession()方法,使之能夠訪問不同的資料庫
public Session getSession() {
if (dbName == null) {
return null;
}else if (dbName.equals("db01")){
returnSessionFactory_db01.getSession();//連線db01庫 } else if (dbName.equals("db02")) {
returnSessionFactory_db02.getSession();//連線db02庫 } else {
return null;
}
}
}
(5)改造自動生成使用者表對應的DAO——UserDAO類:即繼承父類BaseHibernateDAO的有參構造。
public class UserDAOextends BaseHibernateDAO {
//因為父類將無參構造設定為了private,所以該類只能存在有參構造了。
public UserInfoTbDAO(StringdbName) {
super(dbName);
}
//以下是自動生成的程式碼:
public void save(UserTb transientInstance){
try {
getSession().save(transientInstance);
log.debug("save successful");
} catch (RuntimeException re) {
log.error("save failed", re);
throw re;
}
}
}
(6)應用層的測試
public voidtestSaveUser(UserTb user){
UserDAO userDao_1 = newUserDAO("db01");//得到db01庫的DAO
UserDAO userDao_2 = new UserDAO("db02");//得到db02庫的DAO
//假設兩個庫中的資料要同步更新(實際操作中應該加入事務控制)
userDao_1.save();//更新01庫
userDao_2.save();//更新02庫
}
(7)總結:優點:
1.程式碼改動比較小,能充分利用工具生成的程式碼。
2.結構簡單,訪問靈活。
3.訪問不同庫的同一個表,只需一個DAO,一個pojo,無需寫額外程式碼。
缺點:
1.每次連線資料庫時都要指定訪問的資料庫。
2.為了有效指定資料庫邏輯名,和利於維護,就得“db01”這樣的字串設定為全域性的final變數,或者弄
一個DAO工廠來產生不同的DAO例項。
另一種方法:上面的方法是改造了DAO的構造方法。也可以改造getSession()方法,這樣透明度更高,但略欠靈活。
本人剛剛接觸Hibernate,不知以上設計是否妥當,望高手指點一二。
相關推薦
Hibernate 連線訪問多個數據庫(含訪問不同資料庫的相同表)
利用訪問不同資料庫中的不同表或不同資料庫中的相同表。 本人在開發過程中的解決方案,希望大家交流。一般用myEclipse工具會自動生成Hibernate的相關檔案,大致有下面幾類: (1)資料庫配置檔
Hibernate 連接訪問多個數據庫(含訪問不同數據庫的相同表)(轉)
手指 row 測試 ransient cat 接口 ava 針對 pos 利用hibernate訪問不同數據庫中的不同表或不同數據庫中的相同表。 本人在開發過程中的解決方案,希望大家交流。一般用myEclipse工具會自動生成Hibernate的相關文件,大致有下面幾類:
訪問Access數據庫(有多個數據庫時 體現多態)
.sh into img 保留 tag int32 無效 要求 oledb 如果想編寫單機版MIS、小型網站等對數據庫性能要求不高的系統,又不想安裝SQLServer,可以使用Access(MDAC),只要一個mdb文件就可以了。使用Access創建mdb文件,建表。Ole
Laravel框架實現同時連線多個數據庫
laravel4.2版本, 1.修改配置檔案:config/database.php 'pgsql' => array( 'driver' => 'pgsql', 'host' => '10.0.2.203', 'database'
Mybatis連線多個數據庫配置方法
注意:本文配置不涉及Spring,僅限於Mybatis內。 思路: 1、configuration.xml配置檔案中environments內參數寫成動態傳參; 2、DBUtil類中構建SQLSessionFactory時讀取傳入的資料庫連線配置資訊動態生成。 案例如下: 1)c
grails3.0.9 連線多個數據庫
grails 連結多個數據庫的時候: 注意的地方: 1、格式要對齊 2、dialect必須寫正確 3、採用多個數據源,可以在最頂層寫,寫可以寫在environments裡,同時也可以在兩
TP5 連線SQLServer資料庫及多個數據庫切換
phpstudy php版本5.5.38 TP5.0 1.配置database.php //db1 // 伺服器地址 'hostname' => '127.0.0.1', // 資料庫名 'databa
Spring+jpa連線多個數據庫
1.persistence.xml<?xml version="1.0" encoding="UTF-8"?><persistence xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="
使用Flask_SQLAlchemy連線多個數據庫
#!/usr/bin/env python #-*- coding: utf-8 -*- from flask import Flask from flask_sqlalchemy import SQLAlchemy app = Flask(__name__) # 配置多個數據庫連線 SQL
jfinal 多個數據庫連線及使用
有時根據專案需要,我們要連線多個數據,如db1 ,或db2,分別對應不同的ip地址及資料庫名稱, jfinal 對於這樣的要求,有自己的一套方案,需要進行如下配置。 public void configPlugin(Plugins me) { PropKit.use("con
單個工程中Spring+Mybatis連線多個數據庫的配置(個人分享版本)
上一篇部落格說到同一個問題,經過和朋友的研究已經參考網上的資料,現在給出一份更簡潔的配置。 情景:現在單個工程中需要連線兩個庫,這兩個庫在同一個mysql中,兩個庫都需要進行讀寫。 解決: 第一步:將spring和mybatis整合,這個過程就不具體演示了,在這個過程中建立
一個專案中hibernate框架下配置多個數據庫
hibernate框架下配置多個數據庫 當我們在同一個專案中需要同時連線多個數據庫時,在hibernate框架下的我們可以通過配置多個sessionFactory與多個連線池配置實現獲取不同資料庫的連線session物件。 初始化hibernate的se
django配置連線多個數據庫,和把應用名字在admin後臺顯示為中文
在專案tt下新建兩個app,分別為app01、app02。配置app01使用default節點資料庫;app02使用hvdb節點資料庫(也可以配置app01下的model既使用default,也可以使用hvdb資料庫)1.編輯settings.py,新增多個數據庫:DATAB
springboot連線多個數據庫
今天借到一個新的需求,需要把自己資料庫某個表的資料遷移到別的資料庫中,於是百度,中間出現了一些細節的問題,解決花了點時間,在此記錄一下,下次避免出現過的錯誤 這裡把連線一個數據庫的情況也記錄一下,好做對比 一、連線一個數據庫 1.啟動類 @SpringBootAppl
ThinkPHP 3.2 連線多個數據庫使用(M、D)操作說明
<?php /** * 配置檔案 */ return array( // 預設連線資料庫 'DB_TYPE' => 'mysql', // 資料庫型別 'DB_H
ci高階用法篇之連線多個數據庫
在我們的專案中有時可能需要連線不止一個數據庫,在ci中如何實現呢? 我們在本地新建了兩個資料庫,如下截圖所示: 修改配置檔案database.php檔案為如下格式(讀者根據自己資料庫的情況修改相應引數的配置): <?php defined('BASEPATH')
phalcon 連線多個數據庫 phalcon multi-database
http://stackoverflow.com/questions/22197678/how-to-connect-multiple-database-in-phalcon-framework //This service returns a MySQL databa
django 對多個數據庫支持
django 多數據庫 數據庫自動路由使用多數據庫最簡單的方法是建立一個數據庫路由模式。默認的路由模式確保對象’粘滯‘在它們原始的數據庫上(例如,從foo 數據庫中獲取的對象將保存在同一個數據庫中)。默認的路由模式還確保如果沒有指明數據庫,所有的查詢都回歸到default數據庫中。你不需要做任何事情來
YII2 gii 配置多個數據庫, 或者多個配置文件的時候 gii 出現數據表不存在, 實現選擇數據庫 Table '****' does not exist. 解決 就在gii 頁面 選擇數據庫選項
TP 實現 分享 inf 技術 bsp 多個 ble png 用著用著就暈了 就在gii 頁面 選擇數據庫選項 (配置多個數據庫後制動就該有選項) YII2 gii 配置多個數據庫, 或者多個配置文件的時候 gii 出現數據表不存在, 實現選擇數據庫 Table
SpringBoot(三)通過properties實現多個數據庫環境自動切換配置
方式 info 本地 所有 -c int 安裝 style 過多 前面的文章已經介紹了CentOS部署SpringBoot項目從0到1的詳細過程,包括Linux安裝ftp、Tomcat以及Java jdk的全部過程。這篇文章主要介紹關於springboot如何通過多