天天看点

MyBatis 实现消息页面,批量查询用户信息

开发了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数组里面,减少循环次数。

这样就完成优化了,效率得到了提高。