mybatis-plus 注解實現(xiàn)多表關(guān)聯(lián)查詢的最佳實踐

在之前一篇文章 MyBatis多表關(guān)聯(lián)的無SQL通用方案 中我們提到了注解綁定關(guān)聯(lián)查詢的實踐方案役首,這里我們再匯總梳理一下常用開發(fā)場景中需要涉及到 關(guān)聯(lián) 的場景以及其要支持的綁定方式。

1. 注解自動綁定數(shù)據(jù)字典(自定義枚舉)的顯示值Label

開發(fā)過程中的枚舉值陆盘,比如用戶狀態(tài)(ACTIVE:激活经瓷,LOCKED:鎖定 ...)汤善、身份證類型等,我們會將其名稱name和值value定義在數(shù)據(jù)字典表牧愁,以支持擴展不改代碼以及用戶可編輯素邪。其他數(shù)據(jù)表中關(guān)聯(lián)該字典時,存儲對應的value猪半,顯示時又需要查詢字典表將value轉(zhuǎn)換為對應的name兔朦。

通過注解綁定,我希望簡單使用如這樣:

@BindDict(type="USER_STATUS", field = "status")
private String statusLabel;

2. 注解自動綁定其他表的字段

如部門實體Department(department表的Java映射對象)對應的VO對象中需要關(guān)聯(lián)組織Organization實體(organization表的映射對象)磨确。

我希望簡單使用如這樣:

// 支持關(guān)聯(lián)條件+附加條件綁定字段
@BindField(entity=Department.class, field="name", condition="department_id=id AND parent_id>=0")
private String deptName;

// 支持通過中間表的級聯(lián)關(guān)聯(lián)綁定字段
@BindField(entity = Organization.class, field="name", condition="this.department_id=department.id AND department.org_id=id")
private String orgName;

3. 注解自動綁定其他表實體Entity

如部門實體Department(department表的Java映射對象)對應的VO對象中需要關(guān)聯(lián)組織Organization實體(organization表的映射對象)沽甥。

我希望簡單使用如這樣:

// 支持關(guān)聯(lián)條件+附加條件綁定Entity
@BindEntity(entity = Department.class, condition="department_id=id")
private Department department;

// 通過中間表的級聯(lián)關(guān)聯(lián)綁定Entity(支持附加條件)
@BindEntity(entity = Organization.class, condition = "this.department_id=department.id AND department.org_id=id AND department.deleted=0")
private Organization organization;

4. 注解自動綁定其他表實體集合List<Entity>

如部門實體Department對應的VO對象中需要關(guān)聯(lián)多個子部門Department實體。

我希望簡單使用如這樣:

// 支持關(guān)聯(lián)條件+附加條件綁定多個Entity
@BindEntityList(entity = Department.class, condition = "id=parent_id")
private List<Department> children;

// 通過中間表的 多對多關(guān)聯(lián) 綁定Entity(支持附加條件)
@BindEntityList(entity = Role.class, condition="this.id=user_role.user_id AND user_role.role_id=id")
private List<Role> roleList;

實現(xiàn)以上方案乏奥,開發(fā)過程中的大部分關(guān)聯(lián)場景SQL都可以大大簡化摆舟,使代碼具備極好的可維護性。另外以上方案實現(xiàn)需要拆解成單表查詢SQL通過主鍵去查詢邓了,可以充分利用數(shù)據(jù)庫緩存恨诱,提高性能。


詳細了解其實現(xiàn)代碼骗炉,請至 Diboot - 簡單高效的輕代碼開發(fā)框架 (歡迎star)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末照宝,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子痕鳍,更是在濱河造成了極大的恐慌硫豆,老刑警劉巖龙巨,帶你破解...
    沈念sama閱讀 218,941評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件笼呆,死亡現(xiàn)場離奇詭異熊响,居然都是意外死亡,警方通過查閱死者的電腦和手機诗赌,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,397評論 3 395
  • 文/潘曉璐 我一進店門汗茄,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人铭若,你說我怎么就攤上這事洪碳。” “怎么了叼屠?”我有些...
    開封第一講書人閱讀 165,345評論 0 356
  • 文/不壞的土叔 我叫張陵瞳腌,是天一觀的道長。 經(jīng)常有香客問我镜雨,道長嫂侍,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,851評論 1 295
  • 正文 為了忘掉前任荚坞,我火速辦了婚禮挑宠,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘颓影。我一直安慰自己各淀,他們只是感情好,可當我...
    茶點故事閱讀 67,868評論 6 392
  • 文/花漫 我一把揭開白布诡挂。 她就那樣靜靜地躺著碎浇,像睡著了一般。 火紅的嫁衣襯著肌膚如雪璃俗。 梳的紋絲不亂的頭發(fā)上南捂,一...
    開封第一講書人閱讀 51,688評論 1 305
  • 那天,我揣著相機與錄音旧找,去河邊找鬼溺健。 笑死,一個胖子當著我的面吹牛钮蛛,可吹牛的內(nèi)容都是我干的鞭缭。 我是一名探鬼主播,決...
    沈念sama閱讀 40,414評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼魏颓,長吁一口氣:“原來是場噩夢啊……” “哼岭辣!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起甸饱,我...
    開封第一講書人閱讀 39,319評論 0 276
  • 序言:老撾萬榮一對情侶失蹤沦童,失蹤者是張志新(化名)和其女友劉穎仑濒,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體偷遗,經(jīng)...
    沈念sama閱讀 45,775評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡墩瞳,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了氏豌。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片喉酌。...
    茶點故事閱讀 40,096評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖泵喘,靈堂內(nèi)的尸體忽然破棺而出泪电,到底是詐尸還是另有隱情,我是刑警寧澤纪铺,帶...
    沈念sama閱讀 35,789評論 5 346
  • 正文 年R本政府宣布相速,位于F島的核電站,受9級特大地震影響鲜锚,放射性物質(zhì)發(fā)生泄漏突诬。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,437評論 3 331
  • 文/蒙蒙 一烹棉、第九天 我趴在偏房一處隱蔽的房頂上張望攒霹。 院中可真熱鬧,春花似錦浆洗、人聲如沸催束。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,993評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽抠刺。三九已至,卻和暖如春摘昌,著一層夾襖步出監(jiān)牢的瞬間速妖,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,107評論 1 271
  • 我被黑心中介騙來泰國打工聪黎, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留罕容,地道東北人。 一個月前我還...
    沈念sama閱讀 48,308評論 3 372
  • 正文 我出身青樓稿饰,卻偏偏與公主長得像锦秒,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子喉镰,可洞房花燭夜當晚...
    茶點故事閱讀 45,037評論 2 355

推薦閱讀更多精彩內(nèi)容