mybatis-plus的一些tips

文章首發於 https://donlex.cn

一些在使用springcloudmybatis-plus中遇到的小問題以及解決方法

oracle 列轉行 LISTAGG和WM_CONCAT

對於將一列多值合併成一行問題,oracle提供了wmsys.wm_concatlistagg函數處理此問題。但是使用那一個函數具體得看數據庫的版本

WMSYS.WM_CONCAT: 依賴WMSYS用戶

LISTAGG: 11g2才提供的函數,不支持distinct

select listagg(多行轉單行的列,分隔符) within group(order by 按哪一列分組) from tmp t group by 按哪一列分組

用法就像聚合函數一樣,通過Group by語句,把每個Group的一個字段,拼接起來,非常方便

例子:

select * from SONG_INFO ALBUMS_INFO

查出表的數據如圖所示:
在這裏插入圖片描述
現在我需要讓兩行中的名字合併成一行,並用“+”連接起來

select listagg(t.SONG_NAME, '+') within group (order by t.SONG_RD) as BelongSinger
from (select * from SONG_INFO ALBUMS_INFO) t group by t.SONG_RD

結果:
在這裏插入圖片描述

mybatis-plus使用枚舉類型

對於在代碼中定義枚舉類型,最好實現 IEnum 接口,並在配置文件中配置好掃描枚舉類型的位置,否則會報下面的的錯誤。

java.lang.IllegalArgumentException: No enum constant com.content.enums.BusinessType.8
	at java.lang.Enum.valueOf(Enum.java:238) ~[na:1.8.0_144]

配置文件設置:

mybatis-plus.configuration.default-enum-type-handler=com.baomidou.mybatisplus.extension.handlers.MybatisEnumTypeHandler
mybatis-plus.type-enums-package=com.content.enums

具體可以參考:mybatis-plus官網

mybatis-plus關鍵字

對於oracle中定義的實體名稱和數據庫中的關鍵字衝突,強烈建議不要使用關鍵字作爲實體名稱,因爲自己使用註解@TableField,也不一定能夠解決。
比如:我在使用validate這個關鍵字的時候,就無法正常的解釋過去

關鍵字.png

oracle序列

在java中使用update,並且主鍵是一個自增序列的話,如果另外有一個程序在批量導入數據,可能會導致休閒主鍵衝突的情況,這就是因爲數據在導入的時候序列已經增長了,但是java代碼還是使用自己原來每增長之前的序列,導致了衝突。

解決辦法:

  1. 先得到當前的序列
  2. 獲取數據庫中數據的id最大值
  3. 設置增長序列下一次增長爲數據庫中id最大值減去當前序列
  4. 運行一次獲取下一序列值
  5. 設置序列下一次增長爲1
SELECT seq_t_test.CURRVAL FROM DUAL  -- 獲取當前序列值
alter sequence seq_t_test increment by n -- n表示最大id值減去當前序列值
SELECT seq_t_test.NEXTVAL FROM DUAL -- 增長一次

alter sequence seq_t_test increment by 1 -- 設置回每次增長1
SELECT seq_t_test.CURRVAL FROM DUAL

參考資料:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章