• <fieldset id="8imwq"><menu id="8imwq"></menu></fieldset>
  • <bdo id="8imwq"><input id="8imwq"></input></bdo>
    最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
    問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
    當前位置: 首頁 - 科技 - 知識百科 - 正文

    采用Hibernate框架的研發平臺如何能夠真正兼容Oracle和sqlServer

    來源:懂視網 責編:小采 時間:2020-11-09 07:51:31
    文檔

    采用Hibernate框架的研發平臺如何能夠真正兼容Oracle和sqlServer

    采用Hibernate框架的研發平臺如何能夠真正兼容Oracle和sqlServer:都說Hibernate框架的使用可以很容易的讓你的研發平臺支持多種不同類型的數據庫,但實踐表明,這里的容易,是相對的。 想讓研發平臺支持多種數據庫,并不是一件簡單的事,也可以這么說:并不是只要使用了Hibernate框架就能實現的。 下面記錄一下我做這件事情
    推薦度:
    導讀采用Hibernate框架的研發平臺如何能夠真正兼容Oracle和sqlServer:都說Hibernate框架的使用可以很容易的讓你的研發平臺支持多種不同類型的數據庫,但實踐表明,這里的容易,是相對的。 想讓研發平臺支持多種數據庫,并不是一件簡單的事,也可以這么說:并不是只要使用了Hibernate框架就能實現的。 下面記錄一下我做這件事情

    都說Hibernate框架的使用可以很容易的讓你的研發平臺支持多種不同類型的數據庫,但實踐表明,這里的容易,是相對的。 想讓研發平臺支持多種數據庫,并不是一件簡單的事,也可以這么說:并不是只要使用了Hibernate框架就能實現的。 下面記錄一下我做這件事情

      都說Hibernate框架的使用可以很容易的讓你的研發平臺支持多種不同類型的數據庫,但實踐表明,這里的“容易”,是相對的。

      想讓研發平臺支持多種數據庫,并不是一件簡單的事,也可以這么說:并不是只要使用了Hibernate框架就能實現的。

      下面記錄一下我做這件事情的過程和一些感悟。

      當我接到該任務時,我先大致的理了一下思路:

      要完成遷移,總體上有2大塊工作要做,分別是:數據庫層面的遷移 和 平臺底層代碼的改造

      一、數據庫層面的遷移過程:

      1、通過sqlServer Studio2008 工具將數據從Oracle導入到SqlServer數據庫

      從SSMS2008開始才支持此功能,具體操作步驟(右鍵點擊數據庫-選擇導入-點下一步-選擇 Oracle Provider for OLE DB 數據源-點擊屬性-填寫數據源,格式為 IP:端口/實例名),后面的步驟根據向導一步步的操作即可。需要注意的是在 選擇源表和源視圖的步驟中:

      (1)、要把【目標】列中的默認前綴去掉,這樣導入的表才會默認關聯到dbo下,否則你每次查詢表都要帶上schema前綴,導致你之前的應用程序中的sql無法執行,因為你之前寫的那些sql肯定不會帶這種前綴。

      (2)、先勾選你要導入的源,然后雙擊每一行記錄,在彈出的對話框中檢查是否所有的類型都正確綁定好了,我在檢查的時候就遇到了oracle中是varchar2類型的,在該對話框顯示的表結構中變成了130,只能手動的去將所有130改成varchar類型(sqlserver里沒有varchar2類型)。還有原來是clob類型的,現在變成了varchar,要手動改成text類型(因為clob類型的字段比較少,所以可以通過在oracle中執行“select * from user_tab_columns c where c.data_type='CLOB';”來查看哪些表中用到了CLOB類型的字段)。

      2、增加to_date、to_char、to_number、concat等常用的函數

    說明:我在編寫to_date函數的時候,只提供了一種格式“yyyy-mm-dd HH:mi:ss”,這是因為在sqlserver中是沒有和to_date函數的類似的函數的,只能使用convert函數實現,但是convert函數不支持傳入格式化字符串,只能傳入格式字符對應的整型數字,而120對應的正是之前提到的“yyyy-mm-dd HH:mi:ss”格式;另外此次是遷移到Sqlserver2005,該版本是沒有內嵌concat函數的,根據官方文檔的說法,是從sqlServer2012開始才有concat函數的,所以這里我要自己編寫一個concat函數。

    ------------------------------------------------------------------concat函數
    USE [skyplatform]
    GO
    /****** Object: UserDefinedFunction [dbo].[concat] Script Date: 03/10/2015 17:11:31 ******/
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    CREATE FUNCTION [dbo].[concat]
    (
    @param1 varchar(500),
    @param2 varchar(500)
    )
    returns varchar(1000)
    as
    begin
    DECLARE @returntext varchar(1000)
     if (@param1 is null)
     SELECT @returntext= @param2;
     else if (@param2 is null) 
     SELECT @returntext= @param1;
     else
     SELECT @returntext= @param1 + @param2;
     return @returntext;
    end
    
    --------------------------------------------------------------------to_char函數
    USE [skyplatform]
    GO
    /****** Object: UserDefinedFunction [dbo].[to_char] Script Date: 03/10/2015 17:12:09 ******/
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    CREATE FUNCTION [dbo].[to_char]
    (
    @param1 datetime,
    @param2 varchar(20)
    )
    returns varchar(20)
    as
    begin
    
    return convert(varchar(20),@param1,120)
     
    end
    
    --------------------------------------------------------------------to_date函數
    USE [skyplatform]
    GO
    /****** Object: UserDefinedFunction [dbo].[to_date] Script Date: 03/10/2015 17:12:58 ******/
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    CREATE FUNCTION [dbo].[to_date]
    (
    @param1 varchar(20),
    @param2 varchar(20)
    )
    returns datetime
    as
    begin
    
    return convert(datetime,@param1,120)--120 means that yyyy-mm-dd hh:mi:ss(24h)
     
    end
    --------------------------------------------------------------------to_number函數
    USE [skyplatform]
    GO
    /****** Object: UserDefinedFunction [dbo].[to_number] Script Date: 03/10/2015 17:13:09 ******/
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    CREATE FUNCTION [dbo].[to_number]
    (
    @param1 varchar
    )
    returns numeric
    as
    begin
    
    return convert(numeric,@param1)
     
    end

      二、平臺底層代碼的改造

      1、引入SqlServer的jar包:sqljdbc4-4.0.jar

    com.microsoft.sqlserver
    sqljdbc4
    4.0

      2、修改db.properties中關于數據庫連接信息的配置

    jdbc.dialect=org.hibernate.dialect.SQLServerDialect
    jdbc.driver=com.microsoft.sqlserver.jdbc.SQLServerDriver
    jdbc.url=jdbc:sqlserver://xx.xx.xx.xx:1433;DatabaseName=xxx
    jdbc.default_schema=dbo
    jdbc.username=xxx
    jdbc.password=xxx

      3、修改平臺中使用的一些非sql標準的語法

      在使用delete insert update這些dml語句的時候,切記不要使用別名,因為在oracle和sqlserver中,這些dml語句使用別名的語法是不一樣的。

      4、各實體類主鍵策略的改造

      最好都使用string類型的主鍵,但是因為之前的代碼中都用的sequence做主鍵策略,現在改成string類型工作量勢必很大,所以決定使用table策略來兼容各種數據庫。

      5、dao層對sql的處理

      由于sqlserver中調用自定義標量值函數,必須在函數名前加上dbo.的前綴,但是這樣寫勢必會導致不能兼容其它的關系型數據庫,所以只能從dao實現層,對sql進行統一的處理,處理規則就是:如果當前數據庫是sqlserver,并且sql中出現了concat、to_date、to_char、to_number等函數,就為這些函數名加上dbo.的前綴。

      以上做完,基本就可以讓平臺在sqlserver數據庫上跑了,同時也可以通過改配置文件切換到Oracle數據庫。

      以上的做法可能并不是最優的方式,如果有更好的方案,希望各位大牛能給予指點。

    聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

    文檔

    采用Hibernate框架的研發平臺如何能夠真正兼容Oracle和sqlServer

    采用Hibernate框架的研發平臺如何能夠真正兼容Oracle和sqlServer:都說Hibernate框架的使用可以很容易的讓你的研發平臺支持多種不同類型的數據庫,但實踐表明,這里的容易,是相對的。 想讓研發平臺支持多種數據庫,并不是一件簡單的事,也可以這么說:并不是只要使用了Hibernate框架就能實現的。 下面記錄一下我做這件事情
    推薦度:
    標簽: 平臺 如何 能夠
    • 熱門焦點

    最新推薦

    猜你喜歡

    熱門推薦

    專題
    Top
    主站蜘蛛池模板: 国产精品ⅴ无码大片在线看| 久久国产精品久久| 国产精品vⅰdeoxxxx国产| 精品国精品国产自在久国产应用男 | 国产成人A人亚洲精品无码| 久久亚洲中文字幕精品一区| 精品一区二区在线观看| 久久久久久久久无码精品亚洲日韩| 九色精品视频在线观看| 午夜精品久视频在线观看| 55夜色66夜色国产精品视频| 亚洲精品成人片在线播放| 久久精品亚洲欧美日韩久久| 97久久精品人人澡人人爽| 精品国产品香蕉在线观看75| 精品久久久久久无码专区| 精品无码国产一区二区三区AV| 国产啪亚洲国产精品无码 | 精品亚洲欧美无人区乱码| 亚洲国产精品不卡在线电影| 成人区人妻精品一区二区不卡网站 | 国产精品国产高清国产专区| 国产精品亚洲片在线va| 国产国产精品人在线观看| 久久夜色精品国产网站| 中文字幕精品久久| 亚洲精品视频在线看| 青草国产精品视频。| 久久青青草原精品国产软件| 精品无码国产污污污免费网站国产 | 国产在线精品一区二区夜色 | 杨幂国产精品福利在线观看| 久久97精品久久久久久久不卡| 99久久精品毛片免费播放| 98精品国产自产在线XXXX| 成人精品在线视频| 国产精品久久久久影院嫩草| 国产99视频精品免费专区| 国内精品久久久久影院日本| 精品一区二区三区在线观看视频| 久久国产精品成人影院|