在日常工作中,接触到的orm框架最多得到是mybatis和mybatis plus。这篇文章记一下最近时间遇到的一些问题。后面有新问题还会继续记录。
实体类字段类型问题。
之前遇到一个问题,主要是应用钉钉审批流时,业务对象在数据库的值被改写。
审批流的业务就是新增接口处理完前置业务逻辑后,保存业务数据到数据库,然后发一条消息。消息中主要是发起审批流,发起审批流后会对之前保存的业务数据进行修改,主要是修改一些审批流的一些字段,审批流ID呀,审批流创建人,审批流状态这些。
然后问题来了,有几个布尔值,业务逻辑设置好了true后,一过审批流就被改成false。因为审批流发起的业务通过MyBatis生成了数据库对象,然后去修改了数据库的值。最开始我以为是数据库默认值的问题,后面发现不行。最后打断点发现,问题出在业务类的字段类型。
一般来说数据库类都是包装类型,但是这类的几个布尔值的类型用的是基元类型,然后MyBatis看到这个类型直接赋值false。然后MyBatisPlus修改的时候,这几个值就覆盖掉了正确的true值。
这个问题,主要是大意,另外是不了解这个小知识。
MyBatis在处理基元类型(如int, long, float, double等)时,如果数据库字段为NULL,则会使用基元类型的默认值(如int的默认值为0)。如果你希望MyBatis在获取结果时,对于基元类型字段如果数据库值为NULL时能够映射为null而不是默认值,你可以通过配置typeHandlers来实现。
类型转换问题
公司有个新人同事,有一天找我说他的接口数据一直不对,找我帮忙看看。
问题是这样的:在XML中写SQL语句时,if标签中非空判断的时候写的是 != null and != ’ ‘。有些朋友可能已经想到了。这个字段是一个Integer类型的值,在MyBatis里面,如果Integer的值是0,那么在生成查询语句的判断条件中,会被转成’ ',这个时候你就发现了,是0的时候,会判断会空导致查询条件进不去,最后查询数据一直不对。
这是一个小