最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Mybatis工具類JdbcTypeInterceptor運(yùn)行時(shí)自動(dòng)添加jdbcType屬性

 更新時(shí)間:2018年12月26日 10:37:59   作者:isea533  
今天小編就為大家分享一篇關(guān)于Mybatis工具類JdbcTypeInterceptor運(yùn)行時(shí)自動(dòng)添加jdbcType屬性,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧

JdbcTypeInterceptor

運(yùn)行時(shí)自動(dòng)添加 jdbcType 屬性

攔截器簽名

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

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

這個(gè)插件最適合的場(chǎng)景可能就是 Oracle 數(shù)據(jù)庫(kù),可以自動(dòng)給所有方法添加 jdbcType 屬性,避免 null 導(dǎo)致的錯(cuò)誤。遇到這種情況時(shí),你可以先嘗試配置 setting:

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

如果這個(gè)配置仍然無(wú)法解決你的問(wèn)題,就可以試試JdbcType插件。

說(shuō)明,必看!

首先,這個(gè)插件默認(rèn)情況下是適合通用 Mapper 使用的!因?yàn)槟J(rèn)情況下,這個(gè)攔截器會(huì)處理所有繼承自Mapper<T> 的方法,代碼如下:

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

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

默認(rèn)會(huì)自動(dòng)根據(jù)java類型自動(dòng)配置的jdbcType類型如下:

//設(shè)置默認(rèn)的類型轉(zhuǎn)換,參考 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);

除了上面這些默認(rèn)類型外,還可以通過(guò)參數(shù)進(jìn)行配置。

參數(shù)代碼:

@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);
      }
    }
  }
  //手動(dòng)配置
  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]);
      }
    }
  }
}

從代碼可以看到,支持下面兩個(gè)參數(shù):

  • methods:攔截的方法,如果配置為ALL,就會(huì)攔截所有的方法,你可以配置為方法名用逗號(hào)隔開的形式。
  • typeMaps:配置 java 到 jdbcType 的類型映射,使用如:java1:jdbcType1,java2:jdbcType2這種形式進(jìn)行配置,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>

特別注意,上面配置的兩個(gè)參數(shù)只是示例,不要照抄,最簡(jiǎn)單的就是下面這樣配置:

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

因?yàn)檫@個(gè)插件就一個(gè)類,所以有什么問(wèn)題自己看源碼解決,發(fā)現(xiàn)bug可以提!

總結(jié)

以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對(duì)腳本之家的支持。如果你想了解更多相關(guān)內(nèi)容請(qǐng)查看下面相關(guān)鏈接

相關(guān)文章

最新評(píng)論

临漳县| 济宁市| 武陟县| 平阴县| 高台县| 湄潭县| 洛川县| 北川| 丰宁| 宾阳县| 九寨沟县| 万盛区| 汝城县| 林周县| 太谷县| 卢龙县| 宣汉县| 金门县| 旺苍县| 宿迁市| 柯坪县| 桓台县| 舞钢市| 淳化县| 马公市| 阿巴嘎旗| 抚宁县| 梧州市| 枣庄市| 平顶山市| 达日县| 茶陵县| 轮台县| 宝丰县| 龙南县| 崇文区| 陇西县| 沧州市| 尉氏县| 鸡东县| 镇沅|