<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答1問答10問答100問答1000問答2000關(guān)鍵字專題1關(guān)鍵字專題50關(guān)鍵字專題500關(guān)鍵字專題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關(guān)鍵字專題關(guān)鍵字專題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
        當(dāng)前位置: 首頁 - 科技 - 知識百科 - 正文

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

        來源:懂視網(wǎng) 責(zé)編:小采 時間:2020-11-09 07:51:31
        文檔

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

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

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

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

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

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

          當(dāng)我接到該任務(wù)時,我先大致的理了一下思路:

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

          一、數(shù)據(jù)庫層面的遷移過程:

          1、通過sqlServer Studio2008 工具將數(shù)據(jù)從Oracle導(dǎo)入到SqlServer數(shù)據(jù)庫

          從SSMS2008開始才支持此功能,具體操作步驟(右鍵點擊數(shù)據(jù)庫-選擇導(dǎo)入-點下一步-選擇 Oracle Provider for OLE DB 數(shù)據(jù)源-點擊屬性-填寫數(shù)據(jù)源,格式為 IP:端口/實例名),后面的步驟根據(jù)向?qū)б徊讲降牟僮骷纯?。需要注意的是?選擇源表和源視圖的步驟中:

         ?。?)、要把【目標(biāo)】列中的默認前綴去掉,這樣導(dǎo)入的表才會默認關(guān)聯(lián)到dbo下,否則你每次查詢表都要帶上schema前綴,導(dǎo)致你之前的應(yīng)用程序中的sql無法執(zhí)行,因為你之前寫的那些sql肯定不會帶這種前綴。

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

          2、增加to_date、to_char、to_number、concat等常用的函數(shù)

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

        ------------------------------------------------------------------concat函數(shù)
        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函數(shù)
        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函數(shù)
        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函數(shù)
        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中關(guān)于數(shù)據(jù)庫連接信息的配置

        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標(biāo)準的語法

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

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

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

          5、dao層對sql的處理

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

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

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

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

        文檔

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

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

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: a级黄色毛片免费播放视频| 成人无码视频97免费| 免费精品国产自产拍在| 亚洲第一香蕉视频| av无码国产在线看免费网站| 亚洲最大在线视频| 日本片免费观看一区二区| 亚洲综合一区二区| 精品久久久久成人码免费动漫| 亚洲人成电影亚洲人成9999网| 十八禁无码免费网站| 4480yy私人影院亚洲| 91免费精品国自产拍在线不卡| 亚洲jizzjizz在线播放久| 日韩免费电影在线观看| 国产成人亚洲午夜电影| 亚洲一区二区视频在线观看| 中文字幕免费人成乱码中国| 久久久久亚洲AV成人无码| 91精品国产免费久久久久久青草| 91丁香亚洲综合社区| 免费在线精品视频| 91成人免费观看在线观看| 亚洲色av性色在线观无码| 日本特黄特色免费大片| 一级特黄a免费大片| 亚洲av无码潮喷在线观看| 国产精品永久免费10000| 久久亚洲中文无码咪咪爱| 国产亚洲人成A在线V网站 | 国产精品亚洲高清一区二区| 成人A毛片免费观看网站| 亚洲av最新在线网址| 最近的中文字幕大全免费版| 五月婷婷免费视频| 亚洲视频国产精品| 四虎在线播放免费永久视频 | 亚洲日本人成中文字幕| 亚洲国产精品人人做人人爽| 男人进去女人爽免费视频国产| 亚洲色大成网站www久久九|