查询结果有多个字段的select语句都要使用resultMap进行明确映射。尽量少的使用resultType!!!


当使用Mybatis进行查询时,Mybatis会自动将SQL语句查询出的数据,通过字段名与实体类中的属性名进行一一对应,当有相同的名称时进行赋值。

这个功能是Mybatis的基本功能,学过Mybatis就会对这个感觉理所应当。但是Mybatis在匹配时做的远远比你想的要多,而就是这些多做的事情本意是想让框架更加好用,更加智能,但却埋下了严重的性能问题,多做的判断自然带来性能的降低,我们要做的就是要让Mybatis最少的执行代码。也就是要给Mybatis最明确的指令。

Mybatis在匹配时不仅只会按名称相同匹配,而且会做忽略大小写的匹配,我的猜想是(还没读源码,但已在实践中证实),它首先会按照严格的相等来做判断,如果没有匹配,它就会忽略大小写再进行一次判断,我们需要做的,除了在设计时将数据库字段名跟实体类属性名大小写设为完全相同的名称外(大多数情况下,这个并不会如我们所愿)。更多的,我们在写Mapper映射文件时,不管结果集有没有关联查询,关联赋值,都要使用resultMap对属性名和字段名进行明确的一一对应!告诉Mybatis最明确的指令,将框架判断代码执行量降到最低。


项目中小小的命名问题影响的已经不仅仅是可读性。而且也很大的影响了性能。严谨的命名和编程规范对于程序非常重要!