java的executor包有什么功能
本篇内容主要讲解“java的executor包有什么功能”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“java的executor包有什么功能”吧!
sql语句中的参数赋值是有由executor
包中的parameter
子包完成的。
parameter
子包其实只有一个parameterHandler
接口,它定义了2个方法:
publicinterfaceParameterHandler{ObjectgetParameterObject();voidsetParameters(PreparedStatementps)throwsSQLException;}
ParameterHandler
接口有一个默认的实现类DefaultParameterHandler
,它在scripting
包的子包中。
mybatis
中支持进行参数设置的语句类型是PreparedStatement
接口及其子接口CallableStatement
, 所以setParameters
的输入参数是PreparedStatement
类型。
setParameters
方法的实现逻辑就是依次取出每个参数的值,然后根据参数类型调用PreparedStatement
中的赋值方法进行赋值。
publicclassDefaultParameterHandlerimplementsParameterHandler{//类型处理器注册表privatefinalTypeHandlerRegistrytypeHandlerRegistry;//MappedStatement对象(包含完整的增删改查节点信息)privatefinalMappedStatementmappedStatement;//参数对象privatefinalObjectparameterObject;//BoundSql对象(包含SQL语句、参数、实参信息)privatefinalBoundSqlboundSql;//配置信息privatefinalConfigurationconfiguration;publicDefaultParameterHandler(MappedStatementmappedStatement,ObjectparameterObject,BoundSqlboundSql){this.mappedStatement=mappedStatement;this.configuration=mappedStatement.getConfiguration();this.typeHandlerRegistry=mappedStatement.getConfiguration().getTypeHandlerRegistry();this.parameterObject=parameterObject;this.boundSql=boundSql;}@OverridepublicObjectgetParameterObject(){returnparameterObject;}/***为语句设置参数*@paramps语句*/@OverridepublicvoidsetParameters(PreparedStatementps){ErrorContext.instance().activity("settingparameters").object(mappedStatement.getParameterMap().getId());//取出参数列表List<ParameterMapping>parameterMappings=boundSql.getParameterMappings();if(parameterMappings!=null){for(inti=0;i<parameterMappings.size();i++){ParameterMappingparameterMapping=parameterMappings.get(i);//ParameterMode.OUT是CallableStatement的输出参数,已经单独注册。故忽略if(parameterMapping.getMode()!=ParameterMode.OUT){Objectvalue;//取出属性名称StringpropertyName=parameterMapping.getProperty();if(boundSql.hasAdditionalParameter(propertyName)){//从附加参数中读取属性值value=boundSql.getAdditionalParameter(propertyName);}elseif(parameterObject==null){value=null;}elseif(typeHandlerRegistry.hasTypeHandler(parameterObject.getClass())){//参数对象是基本类型,则参数对象即为参数值value=parameterObject;}else{//参数对象是复杂类型,取出参数对象的该属性值MetaObjectmetaObject=configuration.newMetaObject(parameterObject);value=metaObject.getValue(propertyName);}//确定该参数的处理器TypeHandlertypeHandler=parameterMapping.getTypeHandler();JdbcTypejdbcType=parameterMapping.getJdbcType();if(value==null&&jdbcType==null){jdbcType=configuration.getJdbcTypeForNull();}try{//此方法最终根据参数类型,调用java.sql.PreparedStatement类中的参数赋值方法,对SQL语句中的参数赋值typeHandler.setParameter(ps,i+1,value,jdbcType);}catch(TypeException|SQLExceptione){thrownewTypeException("Couldnotsetparametersformapping:"+parameterMapping+".Cause:"+e,e);}}}}}}
到此,相信大家对“java的executor包有什么功能”有了更深的了解,不妨来实际操作一番吧!这里是亿速云网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。