• Mybatis常用工具类(三)-- MetaObject、MetaClass


    原文链接:Mybatis常用工具类(三)-- MetaObject、MetaClass

    MetaObject

    MetaObject 是 Mybatis 反射工具类,通过 MetaObject 获取和设置对象的属性值。

    MetaObject 主要方法

    方法 说明
    hasGetter(name) 判断是否有属性 name 或 name 的 getter 方法。
    1. 若定义 userId,没定义 getUserId() 方法,hasGetter("userId") 则返回 true;
    2. 若定义方法 getUserId1(),没定义属性 userId1,hasGetter("userId1") 则返回 true。
    getGetterNames() 获取含有 getter 相关的属性名称。
    1. 若定义 userId,没定义 getUserId() 方法,则 userId 会被返回;
    2. 若定义方法 getUserId1(),没定义属性 userId1, 则 userId1 会被返回。
    getGetterType(name) 获取 getter 方法的返回类型。
    getValue(name) 获取属性值。
    hasSetter(name) 判断是否有属性 name 或 name 的 setter 方法。
    1. 若定义 userId,没定义 setUserId(userId) 方法,hasSetter("userId") 则返回 true;
    2. 若定义方法 setUserId1(userId1),没定义属性 userId1,hasSetter("userId1") 则返回 true。
    getSetterNames() 获取含有 setter 相关的属性名称。
    1. 若定义 userId,没定义 setUserId(userId) 方法,则 userId 会被返回;
    2. 若定义方法 setUserId1(userId1),没定义属性 userId1, 则 userId1 会被返回。
    getSetterType(name) 获取 setter 方法的参数类型。
    setValue(name, value) 设置属性值。

    备注

    • 跟 getter 相关的 name,为属性名称 或 isXXX()/getXXX() 中的 xXX 部分(首字母小写)
    • 跟 setter 相关的 name,为属性名称 或 setXXX() 中的 xXX 部分(首字母小写)

    相关例子

    接下来我们通过例子讲解如何通过 MetaObject 获取和设置对象属性。

    创建一个 MetaObject 对象

    MetaObject metaObject = SystemMetaObject.forObject(company);
    

    判断是否有 getter 方法

    metaObject.hasGetter("companyName")
    

    获取含有 getter 方法的属性名

    metaObject.getGetterNames()
    

    获取 getter 方法的返回类型

    metaObject.getGetterType("companyName")
    

    获取值

    eg: 获取 Persons 列表中第一个 Person 的 personName

    metaObject.getValue("persons[0].personName")
    

    判断是否有 setter 方法

    metaObject.hasSetter("companyName")
    

    获取含有 setter 方法的属性名

    metaObject.getSetterNames()
    

    获取 setter 方法的参数类型

    metaObject.getSetterType("companyName")
    

    设置值

    eg: 将 Persons 列表中第一个 Person 的 personName 设置为 "小马"

    metaObject.setValue("persons[0].personName", "小马")
    

    MetaClass

    与 MetaObject 不同的是,MetaObject 用于获取和设置对象的属性值,而 MetaClass 则用于获取类相关的信息。

    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 = 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[]{"小马"});
    

    公众号

    喜欢我的文章,请关注公众号

  • 相关阅读:
    笔记44 Hibernate快速入门(一)
    tomcat 启用https协议
    笔记43 Spring Security简介
    笔记43 Spring Web Flow——订购披萨应用详解
    笔记42 Spring Web Flow——Demo(2)
    笔记41 Spring Web Flow——Demo
    Perfect Squares
    Factorial Trailing Zeroes
    Excel Sheet Column Title
    Excel Sheet Column Number
  • 原文地址:https://www.cnblogs.com/javaDeveloper/p/13151682.html
Copyright © 2020-2023  润新知