MetaObject 是 MyBatis 反射工具类,通过 MetaObject 获取和设置对象的属性值
方法 | 说明 |
---|
hashGetter(name) | 判断是否有属性 name 或 name 的 getter 方法。<br /> 若定义 userId,没定义 getUserId () 方法,hasGetter ("userId") 则返回 true;<br /> 若定义方法 getUserId1 (),没定义属性 userId1,hasGetter ("userId1") 则返回 true。 |
getGetterNames() | 获取含有 getter 相关的属性名称。<br /> 若定义 userId,没定义 getUserId () 方法,则 userId 会被返回;<br /> 若定义方法 getUserId1 (),没定义属性 userId1, 则 userId1 会被返回。 |
getGetterType(name) | 获取 getter 方法的返回类型。 |
getValue(name) | 获取属性值。 |
hasSetter(name) | 判断是否有属性 name 或 name 的 setter 方法。<br /> 若定义 userId,没定义 setUserId (userId) 方法,hasSetter ("userId") 则返回 true;<br /> 若定义方法 setUserId1 (userId1),没定义属性 userId1,hasSetter ("userId1") 则返回 true。 |
getSetterNames() | 获取含有 setter 相关的属性名称。<br /> 若定义 userId,没定义 setUserId (userId) 方法,则 userId 会被返回;<br /> 若定义方法 setUserId1 (userId1),没定义属性 userId1, 则 userId1 会被返回。 |
getSetterType(name) | 获取 setter 方法的参数类型。 |
setValue(name, value) | 设置属性值。 |
# 备注
跟 getter 相关的 name,为属性名称 或 isXXX () /getXXX () 中的 XXX 部分 (首字母小写)
跟 setter 相关的 name,为属性名称 或 setXXX () 中的 XXX 部分 (首字母小写)
# 相关例子
接下来我们通过例子讲解如何通过 MetaObject 获取和设置对象属性。
| MetaObject metaObject = SystemMetaObject.forObject(company); |
# 判断是否有 getter 方法
| metaObject.hasGetter("companyName") |
# 获取含有 getter 方法的属性名
| metaObject.getGetterNames() |
# 获取 getter 方法的返回类型
| metaObject.getGetterType("companyName") |
# 获取值
eg:获取 Person 列表中第一个 Person 的 personName
| metaObject.getValue("persons[0].personName") |
# 判断是否有 setter 方法
| metaObject.hasSetter("companyName") |
# 获取含有 setter 方法的属性名
| metaObject.getSetterNames() |
# 获取 setter 方法的参数类型
| metaObject.getSetterType("companyName") |
# 设置值
eg:将 Person 列表中第一个 Person 的 personName 设置为 "小马"
| metaObject.setValue("persons[0].personName", "小马") |
# MeataClass
与 MetaObject 不同的是,MetaObject 用于获取和设置对象的属性值,而 MetaClass 则用于获取类相关的信息。
方法 | 说明 |
---|
静态方法 forClass (type, reflectorFactory) | 创建 MetaClass 对象 |
hasDefaultConstructor() | 判断是否有默认构造方法 |
hasGetter(name) | 判断是否有属性 name 或 name 的 getter 方法。与 MetaObject 判断类似。 |
getGetterNames() | 获取含有 getter 相关的属性名称。与 MetaObject 判断类似。 |
getGetInvoker(name) | name 的 getter 方法的 Invoker。 |
hasSetter(name) | 判断是否有属性 name 或 name 的 setter 方法。与 MetaObject 判断类似。 |
getSetterNames() | 获取含有 setter 相关的属性名称。与 MetaObject 判断类似。 |
getSetterType(name) | 获取 setter 方法的参数类型。与 MetaObject 判断类似。 |
getSetInvoker(name) | name 的 setter 方法的 Invoker。 |
# 备注
- 跟 getter 相关的 name,为属性名称 或 isXXX ()/getXXX () 中的 xXX 部分(首字母小写)
- 跟 setter 相关的 name,为属性名称 或 setXXX () 中的 xXX 部分(首字母小写)
# 相关例子
| MetaClass metaClass = MetaClass.forClass(Person.class, new DefaultReflectorFactory()); |
# 判断是否有默认构造方法
| metaClass.hasDefaultConstructor() |
# 判断是否有 getter 方法
| metaClass.hasGetter("personName") |
# 获取含有 getter 方法的属性名
| metaClass.getGetterNames() |
# 获取 getter 方法的返回类型
| metaClass.getGetterType("personName") |
# 获取值
eg:person 的 personName
| Invoker invoker = metaClass.getGetInvoker("personName"); |
| Object personName = invoker.invoke(person, null); |
# 判断是否有 setter 方法
| metaClass.hasSetter("personName") |
# 获取含有 setter 方法的属性名
| metaClass.getSetterNames() |
# 获取 setter 方法的参数类型
| metaClass.getSetterType("personName") |
# 设置值
eg:person 的 personName 设置为 "小马"
| Invoker invoker = metaClass.getSetInvoker("personName"); |
| invoker.invoke(person, new String[]{"小马"}); |