麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 開發(fā) > Java > 正文

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

2024-07-14 08:43:22
字體:
來源:轉載
供稿:網(wǎng)友

JdbcTypeInterceptor

運行時自動添加 jdbcType 屬性

攔截器簽名

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

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

這個插件最適合的場景可能就是 Oracle 數(shù)據(jù)庫,可以自動給所有方法添加 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,建議去掉這段代碼,或者換成你自己的默認方法。

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

//設置默認的類型轉換,參考 TypeHandlerRegistryregister(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);

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

參數(shù)代碼:

@Overridepublic 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]);      }    }  }}

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

  • 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>

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

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

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

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對VeVb武林網(wǎng)的支持。


注:相關教程知識閱讀請移步到JAVA教程頻道。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 日本高清在线免费 | 小雪奶水翁胀公吸小说最新章节 | 国产福利不卡一区二区三区 | 日韩精品一区二区三区中文 | 久久久中精品2020中文 | 亚洲免费视频大全 | 97伦理| 亚洲电影在线播放 | 久久久电影电视剧免费看 | 国产视频精品在线 | 羞羞视频2023| 激情视频导航 | 99爱在线免费观看 | xxxⅹ96日本护士hd | 亚洲午夜不卡 | 日韩一级免费 | 色视频在线观看 | 亚洲成人播放 | 久久免费视频一区二区三区 | 全黄性色大片 | 成年免费看 | 国产精品jk白丝蜜臀av软件 | 一区在线视频观看 | 欧美乱论| av老司机久久 | hdhdhd79xxxxх| chinese军人gay呻吟 | 亚洲综合色视频在线观看 | 激情小说色 | 亚洲小视频在线 | 国产精品久久久久久久久久电影 | 亚洲成人国产综合 | 一区二区三区在线观看av | 日本一区二区不卡高清 | 国产污污视频 | 亚洲精品 在线播放 | 久久激情免费视频 | 久久久久久中文字幕 | 国产精品免费一区二区三区都可以 | 人人舔人人插 | 一级在线观看 |