剛來公司實習,遇到的第一個任務就是這個,簡單記錄一下思路過程。人菜的很,沒啥參考價值。
測試時:
將現有的oracle庫轉為mysql: 用的Navicat自帶數據傳輸功能,簡單粗暴
出現的問題:
1.原本在oracle中 NUMBER類型的字段轉為了decimal。
(1)Oracle使用序列(SEQUENCE)實現的主鍵遞增,原本表主鍵是沒有AUTO_INCREMENT。
(2)有些decimal類型的字段是主鍵。
(3)Decimal不能設置AUTO_INCREMENT。
解決方法:
百度了一哈,解決方法分兩種:
1:不去管它,在mysql中用函數模擬序列實現主鍵遞增,在mapper中的序列稍作修改就可以了。
2:將decimal手動改為支持AUTO_INCREMENT的類型,刪除mapper中的序列。
因為筆者很菜,所有我這里選用了第二種辦法,將表中所有decimal字段改為bigint類 型(還挺麻煩的)。
因為目前用到的庫只有字符串和數字兩種類型,所以數據庫目前只做了以上修改。
修改mapper:
主要注意以下幾點:
1 分頁查詢:用的插件,改改配置就行了。有些查詢直接寫在sql中,需手動改。
ROWNUM < '5' 改為 limit 5 ,同理取結果集的第一條時,使用limit 1。
2 空字符串問題:Oracle中空字符串''就是null(也就是說,只有null,沒有空字符),而MySQL是區分null和''的。所以改為
類似這樣子。
3 自增主鍵:直接刪去序列。
4 將mapper中的數據類型做對應。
百度一下 Mybatis JdbcType與Oracle、MySql數據類型對應列表。
我這里具體操作為將所有NUMERIC改為BIGINT,
jdbcType="CLOB" 改為varchar。
5 在本來的oracle中有user表,因為與關鍵字沖突的原因,在mapper中寫為”USER”,mysql中需要將雙引號去掉。
6 mysql的substr不能加雙引號,而且是從1開始(oracle是從0開始)。
2018.12.21
項目還未結束,還會更新。。
注:在實際操作中會遇到很多問題,多將代碼復制到可視化工具里運行一下看看。