本技術涉及計算機,尤其涉及一種數據處理方法及其裝置。
背景技術:
1、隨著金融機構信息化水平的提升,數據庫信創改造成為業界關注的焦點。在此過程中,將傳統的oracle數據庫遷移至mysql數據庫,以適應業務發展和成本控制的需要,成為了一項重要任務。然而,由于oracle和mysql在結構化查詢語言(structured?querylanguage,sql)語法和功能上存在差異,導致java應用程序中的sql語句需要進行相應的改造,以確保程序的正常運行和性能優化。
2、java應用程序中的映射文件通常包含大量的sql語句與可擴展標記語言(extensible?markup?language,xml)語句,手動識別和修改其中的oracle語法與mysql語法差異繁瑣耗時,需要大量的人力資源和時間成本,而且容易出現人為錯誤,影響遷移效率和質量。
技術實現思路
1、本公開提供一種數據處理方法及其裝置,以至少解決相關技術中手動識別和修改oracle語法與mysql語法差異效率低的問題。
2、本技術第一方面實施例提出了一種數據處理方法,包括:將源數據庫對應的第一映射文件拆解為第一數據操縱語言dml片段,其中,第一dml片段由可擴展標記語言xml語言和源數據庫對應的第一結構化查詢語言sql語言組成;對第一dml片段進行預處理以獲取預處理之后生成的第一sql語句,其中,預處理包括將第一dml片段中的目標內容轉化為sql注釋并生成鍵值對記錄;基于sql解釋器對第一sql語句進行解析以獲得抽象語法樹,并基于源數據庫到目標數據庫的轉換規則對抽象語法樹對應的表達式進行轉換,以獲取目標數據庫對應的第二sql語句;對第二sql語句進行后處理以生成目標數據庫對應的第二dml片段,其中,后處理包括根據鍵值對記錄對第二sql語句進行還原,其中,第二dml片段由xml語言和目標數據庫對應的第二sql語言組成;基于第二dml片段組成目標數據庫對應的第二映射文件。
3、根據本技術的一個實施例,源數據庫為oracle數據庫,目標數據庫為mysql數據庫,對第一dml片段進行預處理以獲取預處理之后生成的第一sql語句,包括:對第一dml片段進行格式化以獲得格式化dml片段;對格式化dml片段的每一行代碼進行標記,標記內容為首行、注釋行、數據行或尾行;將注釋行轉換為sql注釋,并根據sql注釋與注釋行生成鍵值對記錄;將數據行中的轉義字符按照轉換規則進行轉換;將數據行中的動態sql語句的開標簽和閉標簽依次轉換為sql注釋,并生成sql注釋與開標簽的鍵值對記錄以及sql注釋與閉標簽的鍵值對記錄;對注釋行和數據行進行拼接以生成第一sql語句。
4、根據本技術的一個實施例,生成sql注釋與開標簽的鍵值對記錄以及sql注釋與閉標簽的鍵值對記錄之后,還包括:判斷數據行中的mybatis變量中是否包含逗號符號;若mybatis變量中包含逗號符號,將mybatis變量轉換為sql注釋,并根據sql注釋與mybatis變量生成鍵值對記錄。
5、根據本技術的一個實施例,sql注釋攜帶數字標識,數字標識根據生成sql注釋的時間先后順序遞增。
6、根據本技術的一個實施例,基于sql解釋器對第一sql語句進行解析以獲得抽象語法樹,包括:基于sql解釋器對第一sql語句進行語法分析和語義分析以獲得抽象語法樹,其中,注釋行作為屬性掛靠到抽象語法樹對應的表達式中。
7、根據本技術的一個實施例,對第二sql語句進行后處理以生成目標數據庫對應的第二dml片段,包括:對第二sql語句中的轉義字符按照轉換規則進行還原;根據鍵值對記錄對第二sql語句中的sql注釋進行還原以獲得還原結果;在還原結果上添加首行和尾行以生成第二dml片段。
8、根據本技術的一個實施例,將源數據庫對應的第一映射文件拆解為第一數據操縱語言dml片段,包括:識別第一映射文件中每段代碼的頭部的特定關鍵字;基于特定關鍵字,將第一映射文件拆解為第一dml片段,第一dml片段為select片段、insert片段、update片段和delete片段中的其中之一。
9、本技術第二方面實施例提出了一種數據處理裝置,包括:拆解模塊,用于將源數據庫對應的第一映射文件拆解為第一數據操縱語言dml片段,其中,第一dml片段由可擴展標記語言xml語言和源數據庫對應的第一結構化查詢語言sql語言組成;預處理模塊,用于對第一dml片段進行預處理以獲取預處理之后生成的第一sql語句,其中,預處理包括將第一dml片段中的目標內容轉化為sql注釋并生成鍵值對記錄;轉換模塊,用于基于sql解釋器對第一sql語句進行解析以獲得抽象語法樹,并基于源數據庫到目標數據庫的轉換規則對抽象語法樹對應的表達式進行轉換,以獲取目標數據庫對應的第二sql語句;后處理模塊,用于對第二sql語句進行后處理以生成目標數據庫對應的第二dml片段,其中,后處理包括根據鍵值對記錄對第二sql語句進行還原,其中,第二dml片段由xml語言和目標數據庫對應的第二sql語言組成;組裝模塊,用于基于第二dml片段組成目標數據庫對應的第二映射文件。根據本技術的一個實施例,源數據庫為oracle數據庫,目標數據庫為mysql數據庫,預處理模塊,還用于:對第一dml片段進行格式化以獲得格式化dml片段;對格式化dml片段的每一行代碼進行標記,標記內容為首行、注釋行、數據行或尾行;將注釋行轉換為sql注釋,并根據sql注釋與注釋行生成鍵值對記錄;將數據行中的轉義字符按照轉換規則進行轉換;將數據行中的動態sql語句的開標簽和閉標簽依次轉換為sql注釋,并生成sql注釋與開標簽的鍵值對記錄以及sql注釋與閉標簽的鍵值對記錄;對注釋行和數據行進行拼接以生成第一sql語句。
10、根據本技術的一個實施例,預處理模塊,還用于:判斷數據行中的mybatis變量中是否包含逗號符號;若mybatis變量中包含逗號符號,將mybatis變量轉換為sql注釋,并根據sql注釋與mybatis變量生成鍵值對記錄。
11、根據本技術的一個實施例,預處理模塊中所涉及到的sql注釋攜帶數字標識,數字標識根據生成sql注釋的時間先后順序遞增。
12、根據本技術的一個實施例,轉換模塊,還用于:基于sql解釋器對第一sql語句進行語法分析和語義分析以獲得抽象語法樹,其中,注釋行作為屬性掛靠到抽象語法樹對應的表達式中。
13、根據本技術的一個實施例,后處理模塊,還用于:對第二sql語句中的轉義字符按照轉換規則進行還原;根據鍵值對記錄對第二sql語句中的sql注釋進行還原以獲得還原結果;在還原結果上添加首行和尾行以生成第二dml片段。
14、根據本技術的一個實施例,拆解模塊,還用于:識別第一映射文件中每段代碼的頭部的特定關鍵字;基于特定關鍵字,將第一映射文件拆解為第一dml片段,第一dml片段為select片段、insert片段、update片段和delete片段中的其中之一。
15、本技術第三方面實施例提出了一種電子設備,包括:至少一個處理器;以及與所述至少一個處理器通信連接的存儲器;其中,所述存儲器存儲有可被所述至少一個處理器執行的指令,所述指令被所述至少一個處理器執行,以實現如本技術第一方面實施例所述的數據處理方法。
16、本技術第四方面實施例提出了一種存儲有計算機指令的非瞬時計算機可讀存儲介質,其中,所述計算機指令用于實現如本技術第一方面實施例所述的數據處理方法。
17、本技術第五方面實施例提出了一種計算機程序產品,包括計算機程序,所述計算機程序在被處理器執行時實現如本技術第一方面實施例所述的數據處理方法。
18、本公開的實施例提供的技術方案至少帶來以下有益效果:本技術在生成抽象語法樹之前首先對源數據庫對應的第一映射文件進行拆解以生成第一dml片段,并對第一dml片段進行預處理以將第一dml片段從2種語言轉換為只存在一種sql語言的第一sql語句,在基于第一sql語句對應的抽象語法樹進行sql解析和轉換為第二sql語句之后,再通過后處理實現第二sql語句其他相關部分的還原,從而生成包含兩種語言的第二dml片段,本技術實現了源數據庫對應的映射文件從2種語言到一種語言的轉換,然后再轉換為目標數據庫對應的包含2種語言的映射文件,可以提高數據轉換的準確性和效率,減少人工操作可能帶來的錯誤。
19、應當理解的是,以上的一般描述和后文的細節描述僅是示例性和解釋性的,并不能限制本公開。