在使用 mybatis-Plus 或 tk.mybatis 進行數據庫查詢時,直接使用字符串拼接屬性名(例如 criteria.andEqualTo(“isdeleted”, deleteFlagenum.undelete.getCode()))會降低代碼可讀性和可維護性。本文探討如何優雅地獲取 Java 實體類屬性名,避免這種硬編碼。
問題核心:在構建數據庫查詢條件時,如何避免直接使用字符串表示實體類屬性名,例如 dog.isdeleted 代替 “isdeleted”,提升代碼質量。 示例代碼:
Example example = new Example(Dog.class); Example.Criteria criteria = example.createCriteria(); criteria.andEqualTo("isdeleted", deleteFlagenum.undelete.getCode());
直接使用 dog.isdeleted 獲取屬性名在 Java 中不可行。Java 反射機制可以獲取屬性信息,但無法直接提供這種語法糖。 tk.mybatis 本身也不支持。
解決方案:使用 MyBatis-Plus 的 LambdaQueryChainWrapper。它允許使用 Lambda 表達式構建查詢條件,自動獲取屬性名,避免字符串拼接。
立即學習“Java免費學習筆記(深入)”;
// 鏈式查詢 Lambda 表達式 (不支持 kotlin) LambdaQueryChainWrapper<T> lambdaQuery(); // 示例: lambdaQuery().eq(Dog::getIsdeleted, deleteFlagenum.undelete.getCode()).list();
Dog::getIsdeleted 這種方式,MyBatis-Plus 能自動識別 isdeleted 屬性名,顯著提升代碼可讀性和可維護性,完美解決問題。 注意:LambdaQueryChainWrapper 不支持 Kotlin。 如果使用Kotlin,需要考慮其他方案,例如反射結合注解或自定義工具類。
? 版權聲明
文章版權歸作者所有,未經允許請勿轉載。
THE END