zoukankan      html  css  js  c++  java
  • mybatis四大接口之 ParameterHandler

    1.  继承结构

      只有一个默认的实现类

      

    2. ParameterHandler

      获取参数对象:

      设置参数对象:

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

    3. DefaultParameterHandler

     @Override
      public void setParameters(PreparedStatement ps) {
        ErrorContext.instance().activity("setting parameters").object(mappedStatement.getParameterMap().getId());
        // 参数集合
        List<ParameterMapping> 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 metaObject = configuration.newMetaObject(parameterObject);
                value = metaObject.getValue(propertyName);
              }
              TypeHandler typeHandler = parameterMapping.getTypeHandler();
              JdbcType jdbcType = parameterMapping.getJdbcType();
              if (value == null && jdbcType == null) {
                jdbcType = configuration.getJdbcTypeForNull();
              }
              try {
                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);
              }
            }
          }
        }
      }

      它的 setParameters() 只在两处地方被调用;

      分别为 PreparedStatementHandlerCallableStatementHandler 的  parameterize();

  • 相关阅读:
    Seaborn基础3
    【C语言】将输入的10个整数逆序输出
    【C语言】(数组方式)输出一组成绩中的最高分与最低分
    【C语言】(数组方式)求n名同学的平均成绩
    【C语言】编写程序,输出以下图形
    【C语言】输入一个年份和月份,输出该月的天数
    【C语言】输入圆的半径,求解圆的周长和面积
    Draw.io--自认为最好用的流程图绘制软件
    【C语言】极坐标转换为直角坐标
    【C语言】计算N名同学的某门功课的平均成绩
  • 原文地址:https://www.cnblogs.com/virgosnail/p/10068355.html
Copyright © 2011-2022 走看看