欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

java?executor包參數處理功能?

 更新時間:2022年02月15日 16:57:50   作者:灰太狼_cxh  
這篇文章主要介紹了java?executor包參數處理功能,sql語句中的參數賦值是有由executor包中的parameter子包完成的。parameter子包其實只有一個parameterHandler接口并且它定義了兩個方法,下面我們就來看詳細內容吧,需要的朋友可以參考一下

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對象(包含完整的增刪改查節(jié)點信息)
? 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包參數處理功能 的文章就介紹到這了,更多相關executor包參數處理功能 內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • spring mvc常用注解_動力節(jié)點Java學院整理

    spring mvc常用注解_動力節(jié)點Java學院整理

    這篇文章主要介紹了spring mvc常用注解,詳細的介紹了@RequestMapping, @RequestParam, @ModelAttribute等等這樣類似的注解,有興趣的可以了解一下
    2017-08-08
  • java通過PDF模板填寫PDF表單

    java通過PDF模板填寫PDF表單

    這篇文章主要為大家詳細介紹了java通過PDF模板填寫PDF表單,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-10-10
  • java 域對象共享數據的實現

    java 域對象共享數據的實現

    本文主要介紹了java 域對象共享數據的實現,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-03-03
  • 使用Lombok @Builder注解導致默認值無效的問題

    使用Lombok @Builder注解導致默認值無效的問題

    這篇文章主要介紹了使用Lombok @Builder注解導致默認值無效的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-08-08
  • 每日六道java新手入門面試題,通往自由的道路第二天

    每日六道java新手入門面試題,通往自由的道路第二天

    這篇文章主要為大家分享了最有價值的6道java面試題,涵蓋內容全面,包括數據結構和算法相關的題目、經典面試編程題等,對hashCode方法的設計、垃圾收集的堆和代進行剖析,感興趣的小伙伴們可以參考一下
    2021-06-06
  • Java中使用ConcurrentHashMap實現線程安全的Map

    Java中使用ConcurrentHashMap實現線程安全的Map

    在Java中,ConcurrentHashMap是一種線程安全的哈希表,可用于實現多線程環(huán)境下的Map操作。它支持高并發(fā)的讀寫操作,通過分段鎖的方式實現線程安全,同時提供了一些高級功能,比如迭代器弱一致性和批量操作等。ConcurrentHashMap在高并發(fā)場景中具有重要的應用價值
    2023-04-04
  • Spring整合Weblogic jms實例詳解

    Spring整合Weblogic jms實例詳解

    這篇文章主要介紹了Spring整合Weblogic jms實例詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-10-10
  • SpringBoot解決jar包沖突的問題,簡單有效

    SpringBoot解決jar包沖突的問題,簡單有效

    這篇文章主要介紹了SpringBoot解決jar包沖突的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • java byte數組與16進制間相互轉換的示例

    java byte數組與16進制間相互轉換的示例

    這篇文章主要介紹了java byte數組與16進制間相互轉換的示例,幫助大家更好的理解和使用Java,感興趣的朋友可以了解下
    2020-10-10
  • Spring Cloud Feign組件實例解析

    Spring Cloud Feign組件實例解析

    這篇文章主要介紹了Spring Cloud Feign組件實例解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-11-11

最新評論