<强> 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属性