千家信息网

Mybatis中ParameterHandler的作用是什么

发表于:2025-02-02 作者:千家信息网编辑
千家信息网最后更新 2025年02月02日,Mybatis中ParameterHandler的作用是什么,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。List-1public
千家信息网最后更新 2025年02月02日Mybatis中ParameterHandler的作用是什么

Mybatis中ParameterHandler的作用是什么,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。

List-1

public interface ParameterHandler {  Object getParameterObject();  void setParameters(PreparedStatement ps)      throws SQLException;}

它的默认实现只有一个DefaultParameterHandler,

List-2

  @Override  public void setParameters(PreparedStatement ps) {    ErrorContext.instance().activity("setting parameters").object(mappedStatement.getParameterMap().getId());    //获取Sql语句的参数列表    List parameterMappings = boundSql.getParameterMappings();    if (parameterMappings != null) {      //遍历参数      for (int i = 0; i < parameterMappings.size(); i++) {        ParameterMapping parameterMapping = parameterMappings.get(i);        //只处理输入参数        if (parameterMapping.getMode() != ParameterMode.OUT) {          Object value;          String propertyName = parameterMapping.getProperty();          //获取参数值          if (boundSql.hasAdditionalParameter(propertyName)) { // issue #448 ask first for additional params            value = boundSql.getAdditionalParameter(propertyName);          } else if (parameterObject == null) {            value = null;          } else if (typeHandlerRegistry.hasTypeHandler(parameterObject.getClass())) {            value = parameterObject;          } else {            //MetaObject是Mybatis用于处理对象属性的辅助类            MetaObject metaObject = configuration.newMetaObject(parameterObject);            //如果参数不是Map,也不是List,则MetaObject是BeanWrapper            //metaObject.getValue内部,通过JDK的反射获取参数的get方法,用反射的方式获取值,method.invoke(object);            value = metaObject.getValue(propertyName);          }          TypeHandler typeHandler = parameterMapping.getTypeHandler();          JdbcType jdbcType = parameterMapping.getJdbcType();          if (value == null && jdbcType == null) {            jdbcType = configuration.getJdbcTypeForNull();          }          try {            //内部实现上,会用PreparedStatement的方法来进行参数设置            typeHandler.setParameter(ps, i + 1, value, jdbcType);          } catch (TypeException e) {            throw new TypeException("Could not set parameters for mapping: " + parameterMapping + ". Cause: " + e, e);          } catch (SQLException e) {            throw new TypeException("Could not set parameters for mapping: " + parameterMapping + ". Cause: " + e, e);          }        }      }    }  }

关于Mybatis中ParameterHandler的作用是什么问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注行业资讯频道了解更多相关知识。

0