<返回更多

MyBatis源码解读 | MetaObject——Mybatis的反射工具类

2022-07-06    嗨皮汪小成
加入收藏

简介

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

声明:本站部分内容来自互联网,如有版权侵犯或其他问题请与我们联系,我们将立即删除或处理。
▍相关推荐
更多资讯 >>>