91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

java的executor包有什么功能

發布時間:2022-02-16 09:15:01 來源:億速云 閱讀:123 作者:iii 欄目:開發技術

本篇內容主要講解“java的executor包有什么功能”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“java的executor包有什么功能”吧!

sql語句中的參數賦值是有由executor包中的parameter子包完成的。

parameter子包其實只有一個parameterHandler接口,它定義了2個方法:

public interface ParameterHandler {

  Object getParameterObject();

  void setParameters(PreparedStatement ps)
      throws SQLException;

}

ParameterHandler接口有一個默認的實現類DefaultParameterHandler,它在scripting包的子包中。

mybatis中支持進行參數設置的語句類型是PreparedStatement接口及其子接口CallableStatement, 所以setParameters的輸入參數是PreparedStatement類型。

setParameters方法的實現邏輯就是依次取出每個參數的值,然后根據參數類型調用PreparedStatement中的賦值方法進行賦值。

public class DefaultParameterHandler implements ParameterHandler {
  // 類型處理器注冊表
  private final TypeHandlerRegistry typeHandlerRegistry;
  // MappedStatement對象(包含完整的增刪改查節點信息)
  private final MappedStatement mappedStatement;
  // 參數對象
  private final Object parameterObject;
  // BoundSql對象(包含SQL語句、參數、實參信息)
  private final BoundSql boundSql;
  // 配置信息
  private final Configuration configuration;

  public DefaultParameterHandler(MappedStatement mappedStatement, Object parameterObject, BoundSql boundSql) {
    this.mappedStatement = mappedStatement;
    this.configuration = mappedStatement.getConfiguration();
    this.typeHandlerRegistry = mappedStatement.getConfiguration().getTypeHandlerRegistry();
    this.parameterObject = parameterObject;
    this.boundSql = boundSql;
  }

  @Override
  public Object getParameterObject() {
    return parameterObject;
  }

  /**
   * 為語句設置參數
   * @param ps 語句
   */
  @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);
        // ParameterMode.OUT是CallableStatement的輸出參數,已經單獨注冊。故忽略
        if (parameterMapping.getMode() != ParameterMode.OUT) {
          Object value;
          // 取出屬性名稱
          String propertyName = parameterMapping.getProperty();
          if (boundSql.hasAdditionalParameter(propertyName)) {
            // 從附加參數中讀取屬性值
            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 {
            // 此方法最終根據參數類型,調用java.sql.PreparedStatement類中的參數賦值方法,對SQL語句中的參數賦值
            typeHandler.setParameter(ps, i + 1, value, jdbcType);
          } catch (TypeException | SQLException e) {
            throw new TypeException("Could not set parameters for mapping: " + parameterMapping + ". Cause: " + e, e);
          }
        }
      }
    }
  }

}

到此,相信大家對“java的executor包有什么功能”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

于都县| 古交市| 子长县| 浪卡子县| 定日县| 沁水县| 桦南县| 芦溪县| 桐城市| 阿克| 盐津县| 鄱阳县| 临海市| 和硕县| 清远市| 宁河县| 平舆县| 台东市| 霍山县| 阆中市| 金沙县| 青冈县| 奉节县| 商洛市| 紫云| 沁水县| 朝阳县| 明溪县| 桐庐县| 云阳县| 灵宝市| 信宜市| 南澳县| 汶上县| 三明市| 迁西县| 乡宁县| 富平县| 鄄城县| 高雄县| 茶陵县|