亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

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

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

Mybatis工具類JdbcTypeInterceptor運行時自動添加jdbcType屬性

發布時間:2020-08-22 18:01:11 來源:腳本之家 閱讀:236 作者:isea533 欄目:編程語言

JdbcTypeInterceptor

運行時自動添加 jdbcType 屬性

攔截器簽名

@Intercepts({
    @Signature(
      type = ParameterHandler.class, 
      method = "setParameters", 
      args = {PreparedStatement.class})
})

這類攔截器很少見,所以和其他攔截器(如分頁插件)等搭配使用時不需要考慮順序。

這個插件最適合的場景可能就是 Oracle 數據庫,可以自動給所有方法添加 jdbcType 屬性,避免 null 導致的錯誤。遇到這種情況時,你可以先嘗試配置 setting:

<settings>
 <setting name="jdbcTypeForNull" value="NULL"/>
</settings>

如果這個配置仍然無法解決你的問題,就可以試試JdbcType插件。

說明,必看!

首先,這個插件默認情況下是適合通用 Mapper 使用的!因為默認情況下,這個攔截器會處理所有繼承自Mapper<T> 的方法,代碼如下:

//設置默認的方法,是用 Mapper 所有方法
Method[] methods = tk.mybatis.mapper.common.Mapper.class.getMethods();
for (Method method : methods) {
  methodSet.add(method.getName());
}

上面這是默認的方法,如果你不是用于通用Mapper,建議去掉這段代碼,或者換成你自己的默認方法。

默認會自動根據java類型自動配置的jdbcType類型如下:

//設置默認的類型轉換,參考 TypeHandlerRegistry
register(Boolean.class, JdbcType.BOOLEAN);
register(boolean.class, JdbcType.BOOLEAN);
register(Byte.class, JdbcType.TINYINT);
register(byte.class, JdbcType.TINYINT);
register(Short.class, JdbcType.SMALLINT);
register(short.class, JdbcType.SMALLINT);
register(Integer.class, JdbcType.INTEGER);
register(int.class, JdbcType.INTEGER);
register(Long.class, JdbcType.BIGINT);
register(long.class, JdbcType.BIGINT);
register(Float.class, JdbcType.FLOAT);
register(float.class, JdbcType.FLOAT);
register(Double.class, JdbcType.DOUBLE);
register(double.class, JdbcType.DOUBLE);
register(String.class, JdbcType.VARCHAR);
register(BigDecimal.class, JdbcType.DECIMAL);
register(BigInteger.class, JdbcType.DECIMAL);
register(Byte[].class, JdbcType.BLOB);
register(byte[].class, JdbcType.BLOB);
register(Date.class, JdbcType.DATE);
register(java.sql.Date.class, JdbcType.DATE);
register(java.sql.Time.class, JdbcType.TIME);
register(java.sql.Timestamp.class, JdbcType.TIMESTAMP);
register(Character.class, JdbcType.CHAR);
register(char.class, JdbcType.CHAR);

除了上面這些默認類型外,還可以通過參數進行配置。

參數代碼:

@Override
public void setProperties(Properties properties) {
  String methodStr = properties.getProperty("methods");
  if (isNotEmpty(methodStr)) {
    //處理所有方法
    if (methodStr.equalsIgnoreCase("ALL")) {
      methodSet.clear();
    } else {
      String[] methods = methodStr.split(",");
      for (String method : methods) {
        methodSet.add(method);
      }
    }
  }
  //手動配置
  String typeMapStr = properties.getProperty("typeMaps");
  if (isNotEmpty(typeMapStr)) {
    String[] typeMaps = typeMapStr.split(",");
    for (String typeMap : typeMaps) {
      String[] kvs = typeMap.split(":");
      if (kvs.length == 2) {
        register(kvs[0], kvs[1]);
      }
    }
  }
}

從代碼可以看到,支持下面兩個參數:

  • methods:攔截的方法,如果配置為ALL,就會攔截所有的方法,你可以配置為方法名用逗號隔開的形式。
  • typeMaps:配置 java 到 jdbcType 的類型映射,使用如:java1:jdbcType1,java2:jdbcType2這種形式進行配置,java1代表具體的類型,要用全限定名稱方式。jdbcType 的值參考 org.apache.ibatis.type.JdbcType枚舉。

配置方式

<plugins>
  <plugin interceptor="tk.mybatis.plugin.JdbcTypeInterceptor">
    <property name="methods" value="ALL"/>
    <property name="typeMaps" value="java.lang.String:VARCHAR"/>
  </plugin>
</plugins>

特別注意,上面配置的兩個參數只是示例,不要照抄,最簡單的就是下面這樣配置:

<plugins>
  <plugin interceptor="tk.mybatis.plugin.JdbcTypeInterceptor"/>
</plugins>

因為這個插件就一個類,所以有什么問題自己看源碼解決,發現bug可以提!

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對億速云的支持。如果你想了解更多相關內容請查看下面相關鏈接

向AI問一下細節

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

AI

星子县| 永福县| 盘山县| 大名县| 鄂尔多斯市| 湘潭县| 宁都县| 平遥县| 迭部县| 缙云县| 合阳县| 嵊州市| 岚皋县| 乌拉特后旗| 惠东县| 伊宁县| 来安县| 曲靖市| 宕昌县| 同心县| 集贤县| 静安区| 临朐县| 西乡县| 紫云| 清原| 兴隆县| 阿城市| 海城市| 张家口市| 灵川县| 汕尾市| 金坛市| 柳林县| 积石山| 扬州市| 长治市| 岐山县| 福建省| 榆中县| 宜黄县|