Mybatis源码 - 强大反射工具类 - MetaObject

74 阅读1分钟

Mybatis里面提供了一个强大的反射工具类用于反射操作。MetaObject可以方便的进行属性赋值,和读取。可以包含复杂类型,例如List,Map。

@Test
public void test() {
    User user = new User();
    user.setAge(1);
    user.setId("1");

    Configuration configuration = new Configuration();
    MetaObject metaObject = configuration.newMetaObject(user);

    // 读值
    assert ((int) metaObject.getValue("age")) == 1;
    assert metaObject.getValue("id").equals("1");

    // 写值
    metaObject.setValue("age", 2);
    metaObject.setValue("id", "12345");

    assert ((int) metaObject.getValue("age")) == 2;
    assert metaObject.getValue("id").equals("12345");

    // 嵌套写
    metaObject.setValue("school.address", "北京");
    // 嵌套读
    assert metaObject.getValue("school.address").equals("北京");

    // 操作数组
    metaObject.setValue("list", Arrays.asList(1,2,3));
    assert ((int) metaObject.getValue("list[0]")) == 1;

    // 操作map
    Map<String, String> map = new HashMap<>();
    map.put("name", "张三");
    metaObject.setValue("map", map);
    assert metaObject.getValue("map[name]").equals("张三");
}