MetaClass 是 Mybatis 中的反射工具类,与 MetaObject 不同的是,MetaObject 用于获取和设置对象的属性值,而 MetaClass 则用于获取类相关的信息。
Order.java:
@Data
@AllArgsConstructor
public class Order {
/** 主键 */
private String id;
/** 订单号 */
private String orderNo;
/** 商品名称 */
private String goodsName;
}User.java:
@Data
@AllArgsConstructor
public class User {
/** 主键 */
private String id;
/** 用户名 */
private String username;
/** 邮箱 */
private String email;
/** 订单 */
List orders;
} 示例:
public static void main(String[] args) {
MetaClass metaClass = MetaClass.forClass(Order.class, new DefaultReflectorFactory());
// 获取所有有get方法的属性名
String [] getterNames = metaClass.getGetterNames();
System.out.println(new Gson().toJson(getterNames));
// 是否有默认构造方法
boolean hasDefaultConstructor = metaClass.hasDefaultConstructor();
System.out.println("是否有默认的构造方法:" + hasDefaultConstructor);
// 某个属性是否有get/set方法
boolean hasGetter = metaClass.hasGetter("goodsName");
System.out.println("goodsName属性是否有get方法:" + hasGetter);
boolean hasSetter = metaClass.hasSetter("goodsName");
System.out.println("goodsName属性是否有set方法:" + hasSetter);
// 某个属性的类型
Class getterType = metaClass.getGetterType("goodsName");
System.out.println("goodsName属性类型:" + getterType.getName());
// 通过Invoker对象调用get方法获取属性值
try {
Invoker invoker = metaClass.getGetInvoker("goodsName");
Order testOrder = new Order("1", "001", "美的电压力锅");
Object propertyValue = invoker.invoke(testOrder, null);
System.out.println("goodsName属性值:" + propertyValue);
} catch (Exception e) {
e.printStackTrace();
}
}输出结果:
["orderNo","id","goodsName"]
是否有默认的构造方法:false
goodsName属性是否有get方法:true
goodsName属性是否有set方法:true
goodsName属性类型:java.lang.String
goodsName属性值:美的电压力锅| 留言与评论(共有 0 条评论) “” |