簡介
MetaObject 是 MyBatis 中的反射工具類,用于獲取和設置對象的屬性值。
示例
List<Order> orders = new ArrayList<>(2);
orders.add(new Order("1", "001", "美的電壓力鍋"));
orders.add(new Order("2", "002", "格力空調"));
User user = new User("1", "hAppyMybatis", "happy-mybatis@gmail.com", orders);
// 使用 SystemMetaObject.forObject() 創建 MetaObject 對象
MetaObject metaObject = SystemMetaObject.forObject(user);
// 獲取屬性值
System.out.println("修改前-username: " + metaObject.getValue("username"));
System.out.println("修改前-orders[0].goodsName: " + metaObject.getValue("orders[0].goodsName"));
// 設置屬性值
metaObject.setValue("username", "helloMetaObject");
metaObject.setValue("orders[0].goodsName", "美的電熱水器");
// 獲取屬性值
System.out.println("修改后-username: " + metaObject.getValue("username"));
System.out.println("修改后-orders[0].goodsName: " + metaObject.getValue("orders[0].goodsName"));
輸出結果:
修改前-username: happyMybatis
修改前-orders[0].goodsName: 美的電壓力鍋
修改后-username: helloMetaObject
修改后-orders[0].goodsName: 美的電熱水器
通過調用 MetaObject 對象的 getValue() 方法以表達式的方式獲取對象的屬性值;通過調用 MetaObject 對象的 setValue() 方法以表達式的方式設置對象的屬性值。
當類的層級比較深時,使用 MetaObject 工具類能夠很方便地獲取和設置對象的屬性值。
還可以使用 MetaObject 工具類的 hasSetter() 和 hasGetter() 方法通過名稱判斷對象是否有某個屬性且該屬性有對應的 Getter/Setter 方法。