浅谈mybatis返回ResultMap,若是字段为空,返回值属性自动忽略问题。

前段时间,使用mybatis遇到一个奇葩问题。

当返回类型为ResultMap的时候,如果选择的字段为空,那么mybatis会忽略掉该对应属性。

也是就是,你想要这种类型的数据返回:

	{
		name : "隔壁老王",
		age : 20,
		sex : "男"
	}

然而,却返回这种数据:

	{
		name : "隔壁老王",
		age : 20
	}

没错,这是mybatis返回机制的锅。

讲道理,mybatis中不管你使用resultType还是resultMap,其实返回的结果都是结果集的Map。

唯一的不同,就是使用resultType的时候,mybatis会将Map结果集,赋值给resultType所对应的类。

也就是说,结果集合中,为空的字段也会进行赋值。

所以,当使用resultType的时候,是不会造成结果集空值丢失的情况。

那么很明显,解决方案中,就有将resultMap转换成实体类resultType的的方式。

即,根据需求,新建实体类来取代Map。

好吧,解决问题不难,但每次解决都那么繁琐,假设出现一个需求需要返回100个属性,那.......每次都要去新建一个类?

Are you kidding me ?

没错,我们可以尝试着从SQL层解决(mysql),比如使用函数,让选择字段不为空。

即,使用IFNULL(exp1, exp2)。当exp1为空的时候,返回值为expe2


最后,好像在配置文件中添加一行配置,也可以解决问题,但是,笔者没成功......emmmm




你可能感兴趣的:(浅谈mybatis返回ResultMap,若是字段为空,返回值属性自动忽略问题。)