Mybatis 关联查询 collection 效率 分析

本文探讨了在Mybatis中使用两种不同方式处理一对多关联查询的效率问题。通过对e_evaluator、attend_enterprise_info和er_evaluator_attend_enterprise三张表的数据进行分析,发现使用不同的collection配置在xml映射文件中,查询效率存在显著差异。第一种写法耗时10463ms,而第二种写法仅需4862ms,效率提高了近一倍。具体的效率提升原因有待进一步分析。
摘要由CSDN通过智能技术生成

背景:

有一张评议人表(e_evaluator),一张参评企业表(attend_enterprise_info),一张评议人和参评企业关系表(er_evaluator_attend_enterprise),关系如下图

 


 目前e_evaluator表中有3800条数据,attend_enterprise_info表中有130条数据,er_evaluator_attend_enterprise表中有42000条数据

 

通过中间表er_evaluator_attend_enterprise,建立一个e_evaluator与多个e_attend_enterprise的一对多关系

 

java代码调用

long s1 = System.currentTimeMillis();
// 所有评议人
List<Evaluator> evaluatorLst = this.evaluatorMapper.queryEvaluators(evaluatorParam);
long s2 = System.currentTimeMillis();
log.info("用时:" + (s2 - s1))

 mybatis的xml文件用到了两种写法

 

第一种写法:

        第一步:配置返回的resultMap

<resultMap id="BaseResultMap" type="com.hhsoft.evaluation.model.dto.Evaluator" >
    	<id column="evaluator_id" property="evaluatorId" jdbcType="VARCHAR" />
	    <result column="evaluator_name" property="evaluatorName" jdbcType="VARCHAR" />
	    <result column="account" property="account" jdbcType="VARCHAR" />
	    <result column="password" property="password" jdbcType="VARCHAR" />
	    <result column="login_status" property="loginStatus" jdbcType="VARCHAR" />
	    <result column="gender" property="gender" jdbcType="VARCHAR" />
	    <result column="mobile" property="mobile" jdbcType="VARCHAR" />
	    <result column="administrative_area_code" property="administrativeAreaCode" jdbcType="VARCHAR" />
	    <result column="administrative_area_name" property="administrativeAreaName" jdbcType="VARCHAR" />
	    <result column="administrative_area_grade" property="administrativeAreaGrade" jdbcType="VARCHAR" />
	    <result column="questionnaire_id" property="questionnaireId" jdbcType="VARCHAR" />
	    <result column="evaluator_type" property="evaluatorType" jdbcType="VARCHAR" />
	 
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值