我们都知道mybatis是orm框架,那么数据库对应的类型跟实体对应的类型是一致的。但是有很多同学们还是有很多误区的,不知道为什么会这样。(java==oracle的情况分析)
(1)为什么有时候我都是用同样的返回类型怎么有一个会报错,一个不会。
上sql,最简单的方式。
<select id='xxx' resultType='int'>这种方式不会报错。
select count(*) from tablename;
</slect>
<select id='xxx' resultType='java.lang.integer'>这种方式不会报错
select age from tablename where id='xxx';==age 为number类型
</slect>
<select id='xxx' resultType='int'>这种方式会存在报错
select age from tablename where id='xxx';==age 为number类型
</slect>
请大家好好想想,其实这三种种的方式是有区别的。
解析:因为第二跟第三种情况是有可能为null的,假如id不存在呢,返回的数据就为null,int不能null哦。
第一种,因为有cout的函数。可以保证返回的数据是number类型,大不了为0.
第二种情况,因为接收参数为integer类型,包装类是可以为null的。
第三种情况,int类型,假如接收的数据为null是会报错的。
(2)怎么处理可能为null的数据呢。
第一种:返回的参数为integer类型。可以保证不管什么情况下都不出发生错误。
需要注意的是,在后台记得转换成int类型的时候,记得要转换,
第二种:把数据处理成number的类型即可
select NVL(SUM(MONEY) ,0) from tb where id='xxx'全都在NVL这儿起作用。 推荐用这种
select NVL(MONEY,0) from tb where id='xxx'。 这种不一定有效
这两种的写法是有区别的.假如id为xxx的数据是存在的,那么直接用nvl的函数来判断是否为空是起作用的。
假如id为xxx的数据不存在的话,直接用nvl的函数不起作用哦。要一个max()的函数处理在用nvl的函数