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("张三");
}