Mybatis工具类JdbcTypeInterceptor运行时自动添加jdbcType属性

  

<强> JdbcTypeInterceptor

  

运行时自动添加jdbcType属性

  

拦截器签名

        @Intercepts ({   @Signature (   类型=ParameterHandler.class,   方法=" setParameters ",   args={PreparedStatement.class})   })      

这类拦截器很少见,所以和其他拦截器(如分页插件)等搭配使用时不需要考虑顺序。

  

这个插件最适合的场景可能就是甲骨文数据库,可以自动给所有方法添加jdbcType属性,避免空导致的错误。遇到这种情况时,你可以先尝试配置设置:

        & lt; settings>   & lt;设置name=" jdbcTypeForNull " value=" https://www.yisu.com/zixun/NULL "/比;   & lt;/settings>      

如果这个配置仍然无法解决你的问题,就可以试试<代码> JdbcType>   

<强>说明,必看!

  

首先,这个插件默认情况下是适合通用映射器使用的!因为默认情况下,这个拦截器会处理所有继承自<代码> Mapper      //设置默认的方法,是用映射器所有方法   方法[]方法=tk.mybatis.mapper.common.Mapper.class.getMethods ();   (方法方法:方法){   methodSet.add (method.getName ());   }      

上面这是默认的方法,如果你不是用于通用映射器,建议去掉这段代码,或者换成你自己的默认方法。

  

默认会自动根据java类型自动配置的jdbcType类型如下:

     //设置默认的类型转换,参考TypeHandlerRegistry   注册(布尔。类,JdbcType.BOOLEAN);   注册(布尔。类,JdbcType.BOOLEAN);   注册(字节。类,JdbcType.TINYINT);   注册(字节。类,JdbcType.TINYINT);   注册(短。类,JdbcType.SMALLINT);   注册(短。类,JdbcType.SMALLINT);   注册(整数。类,JdbcType.INTEGER);   注册(int。类,JdbcType.INTEGER);   注册(长。类,JdbcType.BIGINT);   注册(长。类,JdbcType.BIGINT);   注册(浮动。类,JdbcType.FLOAT);   注册(浮动。类,JdbcType.FLOAT);   注册(双。类,JdbcType.DOUBLE);   注册(双。类,JdbcType.DOUBLE);   注册(字符串。类,JdbcType.VARCHAR);   注册(BigDecimal。类,JdbcType.DECIMAL);   先导入BigInteger。注册(类,JdbcType.DECIMAL);   注册(Byte []。类,JdbcType.BLOB);   注册(byte []。类,JdbcType.BLOB);   (日期登记。类,JdbcType.DATE);   (java.sql.Date登记。类,JdbcType.DATE);   (java.sql.Time登记。类,JdbcType.TIME);   (java.sql.Timestamp登记。类,JdbcType.TIMESTAMP);   注册(性格。类,JdbcType.CHAR);   注册(char。类,JdbcType.CHAR);      

除了上面这些默认类型外,还可以通过参数进行配置。

  

参数代码:

        @Override   公共空间找(属性属性){   字符串methodStr=properties.getProperty(“方法”);   如果(isNotEmpty (methodStr)) {//处理所有方法   如果(methodStr.equalsIgnoreCase(“所有”)){   methodSet.clear ();   其他}{   String []=methodStr.split方法(",");   (字符串方法:方法){   methodSet.add(方法);   }   }   }//手动配置   字符串typeMapStr=properties.getProperty (“typeMaps”);   如果(isNotEmpty (typeMapStr)) {   String [] typeMaps=typeMapStr.split (", ");   (字符串typeMap: typeMaps) {   String[]变电站=typeMap.split (“:”);   如果(变电站。长度==2){   注册(变电站[0],变电站[1]);   }   }   }   }      

从代码可以看的到,支持下面两个参数:

  
      <李>方法:拦截的方法,如果配置为,就会拦截所有的方法,你可以配置为方法名用逗号隔开的形式。   <李> typeMaps:配置java到jdbcType的类型映射,使用如:java1: jdbcType1, java2: jdbcType2这种形式进行配置,java1代表具体的类型,要用全限定名称方式.jdbcType的值参考org.apache.ibatis.type.JdbcType枚举。   
  

<>强配置方式

        & lt; plugins>   & lt;插件拦截=皌k.mybatis.plugin.JdbcTypeInterceptor”比;   & lt;属性名="方法" value=" https://www.yisu.com/zixun/ALL "/比;   & lt;属性名=" typeMaps " value=" https://www.yisu.com/zixun/java.lang.String VARCHAR "/比;   & lt;/plugin>   & lt;/plugins>      

特别注意,上面配置的两个参数只是示例,不要照抄,最简单的就是下面这样配置:

        & lt; plugins>   & lt;插件拦截=" tk.mybatis.plugin.JdbcTypeInterceptor "/比;   & lt;/plugins>

Mybatis工具类JdbcTypeInterceptor运行时自动添加jdbcType属性