今天在使用mybatis从数据库中拿数据的时候发现数据的枚举字段无法取出枚举类,其他的量都能够取到有效值。
在同样的环境下,另一个服务中的类似代码却能够正常取出枚举类,这就让事情显得离奇了起来,把两对代码进行了详细的比较,但是我和前辈都没有发现代码的问题,因为两段代码从枚举类到mybatis的使用方法都是一样的。
一直到我们突发奇想可能不是数据库的问题,终于触及了这次问题的真正成因,在数据库中枚举类所对应的字段因为想要节省空间被设成了tinyint(1),因为布尔型和枚举类基本都只需要一位整数就能储存了,但是我们没有考虑到mysql中tinyint(1)和布尔类型之间的对应联系是特有的,于是在使用mybatis取对象的时候,本应是枚举类的变量其值其实是布尔类型,由于无法放入枚举类变量中,所以表现出来就是该枚举变量值为空,就好像没有取出来一样。
总结一下:tinyint(1)在mysql数据库中与java的布尔类型有特殊的对应关系,就算是使用tinyint(2)也不会造成上述的问题。
P.S.:后来我们还是沿用了以前的设置习惯把枚举类设成了int(11)类型。