java metaobject_Mybatis3源码分析(12)-Sql解析执行-MetaObject

MetaObject是Mybatis中的一个关键工具类,用于便捷地设置SQL参数和映射结果。它封装了原始对象,并提供了getter、setter方法,支持对Map、Collection和普通Java对象的属性访问,包括复杂属性路径。MetaObject的实现通过不同的ObjectWrapper(如MapWrapper、BeanWrapper)处理不同类型的数据。通过对MetaObject的使用,可以实现类似于OGNL或JSTL的表达式访问方式。
摘要由CSDN通过智能技术生成

MetaObject

MetaObject类相当于一个工具类,Mybatis在sql参数设置和结果集映射里经常使用到这个对象。下面来详细分析一下这类。

这个类有四个属性,其中两个基本不用看。

//原始的对象

private Object originalObject;

//对原始对象的一个包装

private ObjectWrapper objectWrapper;

//这两个属性基本不用,因为在Mybatis中都找不到ObjectWrapperFactory的有效实现类

private ObjectFactory objectFactory;

private ObjectWrapperFactory objectWrapperFactory;

再看他的方法

//构造方法

private MetaObject(Object object, ObjectFactory objectFactory, ObjectWrapperFactory objectWrapperFactory) {

this.originalObject = object;

this.objectFactory = objectFactory;

this.objectWrapperFactory = objectWrapperFactory;

if (object instanceof ObjectWrapper) {

this.objectWrapper = (ObjectWrapper) object;

} else if (objectWrapperFactory.hasWrapperFor(object)) {

this.objectWrapper = objectWrapperFactory.getWrapperFor(this, object);

} else if (object instanceof Map) {

this.objectWrapper = new MapWrapper(this, (Map) object);

} else if (object instanceof Collection) {

this.objectWrapper = new CollectionWrapper(this, (Collection) object);

} else {

this.objectWrapper = new BeanWrapper(this, object);

}

}

public String findProperty(String propName, boolean useCamelCaseMapping) {

return objectWrapper.findProperty(propName, useCamelCaseMapping);

}

public String[] getGetterNames() {

return objectWrapper.ge

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值