开发了java这么久,有的时候会偷懒写一些代码,影响性能。
比如 消息列表里面,查询用户信息。
这样就会造成一个n+1的问题,有多少条消息就查询了多少次用户信息。
hibernate 里面有个很不错的功能 left outer join fetch。可以解决n+1的问题,但是现在已经没有人用hibernate了,用mybatis的人比较多,所以得手动写代码进行查询优化了。
开始写代码想着完成功能,在后来就要考虑优化,使用高效的查询方式,这样的才能提高用户体验。
比如数据表为:
然后使用在循环里面,找到多个id,然后用in查询将user_info数据查询出来,在放到msg的对象里面。
虽然代码写的比较多,但是性能得到了提供,查询数据库的次数减少了。
优化了查询效率,提高了用户体验,减少了用户等待时间。
这里有个小技巧,mybatis不支持set,只能用list。set保持id不重复。
使用new arraylist(msgids) 可以将set转换成list。
查询完成之后放到map数组里面,减少循环次数。
这样就完成优化了,效率得到了提高。