一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - Mybatis工具類JdbcTypeInterceptor運行時自動添加jdbcType屬性

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

2021-06-25 13:46isea533 Java教程

今天小編就為大家分享一篇關于Mybatis工具類JdbcTypeInterceptor運行時自動添加jdbcType屬性,小編覺得內容挺不錯的,現在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧

jdbctypeinterceptor

運行時自動添加 jdbctype 屬性

攔截器簽名

?
1
2
3
4
5
6
@intercepts({
    @signature(
      type = parameterhandler.class,
      method = "setparameters",
      args = {preparedstatement.class})
})

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

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

?
1
2
3
<settings>
 <setting name="jdbctypefornull" value="null"/>
</settings>

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

說明,必看!

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

?
1
2
3
4
5
//設置默認的方法,是用 mapper 所有方法
method[] methods = tk.mybatis.mapper.common.mapper.class.getmethods();
for (method method : methods) {
  methodset.add(method.getname());
}

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

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
//設置默認的類型轉換,參考 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);

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

參數代碼:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
@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枚舉。

配置方式

?
1
2
3
4
5
6
<plugins>
  <plugin interceptor="tk.mybatis.plugin.jdbctypeinterceptor">
    <property name="methods" value="all"/>
    <property name="typemaps" value="java.lang.string:varchar"/>
  </plugin>
</plugins>

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

?
1
2
3
<plugins>
  <plugin interceptor="tk.mybatis.plugin.jdbctypeinterceptor"/>
</plugins>

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

總結

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

原文鏈接:https://blog.csdn.net/isea533/article/details/58307149

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 青青久久精品国产 | 国产一级一级片 | 99色在线播放 | 扒开黑女人p大荫蒂老女人 扒开大腿狠狠挺进视频 | 性关系免费视频 | 555www成人网 | 日韩视频免费看 | 国产精品成人亚洲 | 99精品在线免费 | 成人伊人青草久久综合网破解版 | 午夜人妻理论片天堂影院 | 亚洲 欧美 中文字幕 在线 | 无码人妻99久久密AV | 风间由美被义子中文字幕 | 婷婷在线成人免费观看搜索 | 青青草在视线频久久 | 免费在线视频成人 | 免费在线观看视频 | xxx中国bbbwww| 精品久久一 | 91精品国产人成网站 | 貂蝉沦为姓奴小说 | 99久久精品久久久久久清纯 | 久久综合香蕉久久久久久久 | 国产婷婷综合丁香亚洲欧洲 | 国产99精品 | 丁香五香天堂 | 亚洲色图.com| 欧美综合在线 | 欧美日韩一区二区综合在线视频 | 91tm视频| 久久大胆视频 | 欧洲男同直粗无套播放视频 | 久久这里都是精品 | 91最新高端约会系列178 | freesex 18 19处xx| 女人张开腿 让男人桶个爽 免费观看 | 国产另类视频一区二区三区 | tiny4k欧美极品在线 | ai换脸杨幂被c在线观看 | 国产午夜视频在线观看网站 |