在使用 mybatis-Plus 或 tk.mybatis 進(jìn)行數(shù)據(jù)庫(kù)查詢時(shí),直接使用字符串拼接屬性名(例如 criteria.andEqualTo(“isdeleted”, deleteFlagenum.undelete.getCode()))會(huì)降低代碼可讀性和可維護(hù)性。本文探討如何優(yōu)雅地獲取 Java 實(shí)體類屬性名,避免這種硬編碼。
問(wèn)題核心:在構(gòu)建數(shù)據(jù)庫(kù)查詢條件時(shí),如何避免直接使用字符串表示實(shí)體類屬性名,例如 dog.isdeleted 代替 “isdeleted”,提升代碼質(zhì)量。 示例代碼:
Example example = new Example(Dog.class); Example.Criteria criteria = example.createCriteria(); criteria.andEqualTo("isdeleted", deleteFlagenum.undelete.getCode());
直接使用 dog.isdeleted 獲取屬性名在 Java 中不可行。Java 反射機(jī)制可以獲取屬性信息,但無(wú)法直接提供這種語(yǔ)法糖。 tk.mybatis 本身也不支持。
解決方案:使用 MyBatis-Plus 的 LambdaQueryChainWrapper。它允許使用 Lambda 表達(dá)式構(gòu)建查詢條件,自動(dòng)獲取屬性名,避免字符串拼接。
立即學(xué)習(xí)“Java免費(fèi)學(xué)習(xí)筆記(深入)”;
// 鏈?zhǔn)讲樵?Lambda 表達(dá)式 (不支持 kotlin) LambdaQueryChainWrapper<T> lambdaQuery(); // 示例: lambdaQuery().eq(Dog::getIsdeleted, deleteFlagenum.undelete.getCode()).list();
Dog::getIsdeleted 這種方式,MyBatis-Plus 能自動(dòng)識(shí)別 isdeleted 屬性名,顯著提升代碼可讀性和可維護(hù)性,完美解決問(wèn)題。 注意:LambdaQueryChainWrapper 不支持 Kotlin。 如果使用Kotlin,需要考慮其他方案,例如反射結(jié)合注解或自定義工具類。