项目运行慢的原因剖析

项目运行慢的原因剖析

背景

打开Chrome浏览器,输入url之后,其他页面显示都正常,但是当打开问题(暂且称为问题url)url的时候,服务器给回的响应特别慢。

剖析原因

前端原因

慢的原因很有可能是js文件或者css文件使用的cdn加速,但是有的cdn加速会特别慢,这就导致了使用cdn服务器的响应回的特别慢,导致浏览器给用户的响应就慢。所以打开F12调试窗口,查看如下:

会发现主要的时间都浪费在index的请求,点击进去会发现一个url延迟特别高。这就排除了前端原因了。

后台原因

找到对应的controller的url,然后发现对应的应该也没问题啊,取表中的数据,

将其拷贝到idea数据库的console进行搜索,

数据都是毫秒级别的,不可能这么慢。那问题到底在哪?

进入debug模式,然后单步执行

查看执行sql的debug模式:

会发现直接执行了应该执行的sql方法,其他下面我确实没写。直到后来,查看我的mapper的xml文件

其中这个BaseResultMap是映射集,他的映射集是这样写的。

<resultMap id="BaseResultMap" type="cn.tj.entity.Application">
    ....
    <result column="app_create_time" property="appCreateTime" jdbcType="DATE"/>
    <result column="app_interview_pass" property="appInterviewPass" jdbcType="VARCHAR"/>
    <result column="app_interview_time" property="appInterviewTime" jdbcType="DATE"/>
    <association property="user" column="user_id" select="cn.tj.mapper.UserMapper.selectByPrimaryKey"/>
</resultMap>

你会想问那为什么会出现TrainMapper的selectByPrimaryKey的sql呢,没错,就是在userMapper里面还有Train的引用。如下图:

<resultMap id="BaseResultMap" type="cn.tj.entity.User" >
  <id column="user_id" property="userId" jdbcType="INTEGER" />
  ...
  <result column="user_type" property="userType" jdbcType="VARCHAR" />
  <result column="user_apply_status" property="userApplyStatus" jdbcType="VARCHAR" />
  <result column="user_train_status" property="userTrainStatus" jdbcType="VARCHAR" />
  <association property="trainClass" column="user_highest_tclass_id" select="cn.tj.mapper.TrainClassMapper.selectByPrimaryKey" />
  <association property="train" column="user_highest_train_id" select="cn.tj.mapper.TrainMapper.selectByPrimaryKey" />
</resultMap>

这一下子就明白了吧,为什么每次打开这个页面有点慢,就是在mapper的时候,使用了association查询了其他类的sql,所以一下子就慢了。

解决

其实我也不想解决啊。但是没办法。肯定不用BaseResultMap,自己写一个mapper,然后将查询结果直接映射到自己的写的dto里面就行了。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值