好记性,不如烂笔头。
今天翻看项目代码,看到mybatis的callSettersOnNulls和jdbcTypeForNull两个全局配置,于是尝试了一番。
一.callSettersOnNulls配置
1.用途:解决查询结果返回有map时,其值为空,key不显示的问题
2.mysql查询演示
- mysql数据库数据
测试数据
- 配置callSettersOnNulls运行结果如图
值为null的字段,查询结果【显示】
mysql-配置callSettersOnNulls
- 不配置callSettersOnNulls运行结果如图
值为null的字段,查询结果【不显示】
mysql-不配置callSettersOnNulls
3.oracle查询演示
- oracle测试数据
oracle测试数据
- 配置callSettersOnNulls运行结果如图
值为null的字段,查询结果【显示】
oracle-配置callSettersOnNulls
- 不配置callSettersOnNulls运行结果如图
值为null的字段,查询结果【不显示】
oracle-不配置callSettersOnNulls
4 结论
此配置项适用于oracle和mysql
二.jdbcTypeForNull配置
1.用途:操作Oracle:当传入参数含null,也能够将其转成合适的数据类型
2.mysql数据保存演示
- 配置jdbcTypeForNull 和不配置jdbcTypeForNull
mysql-不配置jdbcTypeForNull
mysql-配置jdbcTypeForNull
3.oracle数据保存演示
- 不配置jdbcTypeForNull
oracle-不配置jdbcTypeForNull-报错
- 配置jdbcTypeForNull
oracle-配置jdbcTypeForNull-正常保存
4.结论
jdbcTypeForNull的配置在mysql数据库中,如果入参为null,无论配不配置不影响使用;
在oracle数据库中,如果入参为null,会提示类型异常,这是因为在操作oracle数据库时,当入参为null时,jdbcType的默认类型为OTHER,mybatis不能有效识别,所以在操作oracle时,非常有必要配置上。
因此为了系统的兼容性最好将此配置配置上。
当然也可以在mapper中指明数据类型如下(但这样写太麻烦,不推荐):
#{属性参数,jdbcType=VARCHAR}或其他jdbctype类型