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 方法。