在以前一篇文章 MyBatis多表關聯的無SQL通用方案 中咱們提到了註解綁定關聯查詢的實踐方案,這裏咱們再彙總梳理一下經常使用開發場景中須要涉及到 關聯 的場景以及其要支持的綁定方式。
開發過程當中的枚舉值,好比用戶狀態(ACTIVE:激活,LOCKED:鎖定 ...)、身份證類型等,咱們會將其名稱name和值value定義在數據字典表,以支持擴展不改代碼以及用戶可編輯。其餘數據表中關聯該字典時,存儲對應的value,顯示時又須要查詢字典表將value轉換爲對應的name。java
經過註解綁定,我但願簡單使用如這樣:git
@BindDict(type="USER_STATUS", field = "status") private String statusLabel;
如部門實體Department(department表的Java映射對象)對應的VO對象中須要關聯組織Organization實體(organization表的映射對象)。github
我但願簡單使用如這樣:數據庫
// 支持關聯條件+附加條件綁定字段 @BindField(entity=Department.class, field="name", condition="department_id=id AND parent_id>=0") private String deptName; // 支持經過中間表的級聯關聯綁定字段 @BindField(entity = Organization.class, field="name", condition="this.department_id=department.id AND department.org_id=id") private String orgName;
如部門實體Department(department表的Java映射對象)對應的VO對象中須要關聯組織Organization實體(organization表的映射對象)。segmentfault
我但願簡單使用如這樣:緩存
// 支持關聯條件+附加條件綁定Entity @BindEntity(entity = Department.class, condition="department_id=id") private Department department; // 經過中間表的級聯關聯綁定Entity(支持附加條件) @BindEntity(entity = Organization.class, condition = "this.department_id=department.id AND department.org_id=id AND department.deleted=0") private Organization organization;
如部門實體Department對應的VO對象中須要關聯多個子部門Department實體。框架
我但願簡單使用如這樣:性能
// 支持關聯條件+附加條件綁定多個Entity @BindEntityList(entity = Department.class, condition = "id=parent_id") private List<Department> children; // 經過中間表的 多對多關聯 綁定Entity(支持附加條件) @BindEntityList(entity = Role.class, condition="this.id=user_role.user_id AND user_role.role_id=id") private List<Role> roleList;
實現以上方案,開發過程當中的大部分關聯場景SQL均可以大大簡化,使代碼具有極好的可維護性。另外以上方案實現須要拆解成單表查詢SQL經過主鍵去查詢,能夠充分利用數據庫緩存,提升性能。
詳細瞭解其實現代碼,請至 Diboot - 簡單高效的輕代碼開發框架 (歡迎star)this