今天遇到一个场景,接口在调用的时候耗时 7 秒,然后在分析代码的时候发现 sql 执行只需要 0.5 秒, mybatis 在将结果集转换成对象的过程中耗时 6 秒,如果将返回的对象改成 list<map>那么只需要 2 秒,我一次返回的数据量大概在 10 万左右

看了一下源码一个对象需要根据具体查询的字段数量去 for 循环,这样下来一个对象 10 个字段,获取 10 万的数据大概就需要循环 100 万次,这效率也太差了,大家有什么更好的办法吗?

我想知道如何优化 mybatis 的对象转换过程,不要说多线程查询,限制 sql 之类的

举报· 418 次点击
登录 注册 站外分享
3 条回复  
shadowyue 初学 3 小时前
应该是 new 返回的数据对象花了太多时间吧
visper 小成 3 小时前
猜测,像这种 orm 转换成对象的话,都在使用反射。一个个字段对。这样的话如果你知道了数据是怎样的,想极限优化的话,也不用先查出 list什么的,直接自己查出 resultSet 然后一个个读出来,new 自己的对象一个个字段 set 进去。
WashFreshFresh 小成 3 小时前
没得优化,我遇到过好多次了,如果返回 map 快的话,你可以试试用 parallelStream 遍历 list转对象 list 。
返回顶部