zoukankan      html  css  js  c++  java
  • 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[]{"小马"});
    

    公众号

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

  • 相关阅读:
    定义serialVersionUID的作用与意义整理
    HttpClient学习整理
    Eclipse+TestNG搭建接口自动化测试框架
    Jmeter之Bean shell使用(一)
    吴军博士的《数学之美》(摘录)
    SqlServer—大话函数依赖与范式
    MySQL—FOREIGN KEY
    MYSQL-用户操作
    WAMPServer 默认安装启动后,图标显示橙黄色
    Linux time命令
  • 原文地址:https://www.cnblogs.com/javaDeveloper/p/13151682.html
Copyright © 2011-2022 走看看