All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.beetl.sql.mapper.call.CallMapperSelectInvoke Maven / Gradle / Ivy

The newest version!
package org.beetl.sql.mapper.call;

import org.beetl.sql.clazz.kit.BeanKit;
import org.beetl.sql.core.SQLManager;
import org.beetl.sql.core.call.CallArg;
import org.beetl.sql.core.call.CallReady;
import org.beetl.sql.core.call.InArg;
import org.beetl.sql.core.call.OutArg;
import org.beetl.sql.mapper.MapperInvoke;

import java.lang.reflect.Method;
import java.util.List;
import java.util.Map;

/**
 * Mapper中存储过程执行
 * 
@{code
 * @Call("...")
 * List queryUser(String id,String name);
 *
 * }
*/ public class CallMapperSelectInvoke extends MapperInvoke { String sql ; Class target; InConfig inConfig; OutBeanConfig outBeanConfig; boolean isUpdate = false; /** * 如果是查询,是返回List还是单个值 */ boolean isSingle = false; /** * * @param sql 调用存储过程的sql语句,如 call xx(?,?) * @param target 如果是存储过程返回一个结果集,则可以映射到target的对象上 * @param inConfig * @param outBeanConfig 如果存储过程有输出,则此包含了输出的配置 * @param isUpdate 存储过程是更新还是查询 */ public CallMapperSelectInvoke(String sql,Class target,InConfig inConfig ,OutBeanConfig outBeanConfig,boolean isUpdate,boolean isSingle){ this.sql = sql; this.target = target; this.inConfig = inConfig; this.outBeanConfig = outBeanConfig; this.isUpdate = isUpdate; this.isSingle = isSingle; } @Override public Object call(SQLManager sm, Class entityClass, Method m, Object[] args) { CallReady callReady = new CallReady(sql); Object outBean = null; if(args!=null){ for(int i=0;i entry:outBeanConfig.getIndexTypeMap().entrySet()){ int callPosition = entry.getKey(); Class targetType = entry.getValue(); Integer jdbcType = outBeanConfig.getIndexJdbcMap().get(callPosition); if(jdbcType!=null){ callReady.add(callPosition,new OutArg(targetType,jdbcType)); }else{ callReady.add(callPosition,new OutArg(targetType)); } } }else{ //不可能到这 throw new IllegalStateException(m.toString()); } } } //存储过程调用 Object ret = null; if(isUpdate){ ret = sm.executeCall(callReady); }else{ List list = (List)sm.executeCall(callReady,entityClass); if(isSingle){ ret = list.size()==0?null:list.get(0); }else{ ret = list; } } //如果有输出结果 if(outBean!=null){ for(CallArg callArg:callReady.getArgs()){ if(callArg instanceof OutArg){ OutArg outArg = (OutArg) callArg; Object outValue = outArg.getOutValue(); int index = outArg.getIndex(); String attrName = outBeanConfig.indexMap.get(index); BeanKit.setBeanProperty(outBean,outValue,attrName); } } } return ret; } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy