背景:
有一张评议人表(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" /> <result column="city_code" property="cityCode" jdbcType="VARCHAR" /> <result column="city_name" property="cityName" jdbcType="VARCHAR" /> <result column="county_code" property="countyCode" jdbcType="VARCHAR" /> <result column="county_name" property="countyName" jdbcType="VARCHAR" /> <result column="position_name" property="positionName" jdbcType="VARCHAR" /> <result column="organization_name" property="organizationName" jdbcType="VARCHAR" /> <result column="create_user_id" property="createUserId" jdbcType="VARCHAR" /> <result column="create_time" property="createTime" jdbcType="TIMESTAMP" /> <result column="update_user_id" property="updateUserId" jdbcType="VARCHAR" /> <result column="update_time" property="updateTime" jdbcType="TIMESTAMP" /> <result column="order_no" property="orderNo" jdbcType="FLOAT" /> <result column="status" property="status" jdbcType="INTEGER" /> <result column="office_people_id" property="officePeopleId" jdbcType="VARCHAR" /> <result column="work_unit" property="workUnit" jdbcType="VARCHAR" /> <result column="office_id" property="officeId" jdbcType="VARCHAR" /> <result column="answer_status" property="answerStatus" jdbcType="INTEGER" /> <collection property="attendEnterpriseLst" ofType="com.hhsoft.evaluation.model.dto.AttendEnterprise" > <id column="attend_enterprise_id" property="attendEnterpriseId"/> <result column="attend_enterprise_name" property="attendEnterpriseName"/> </collection> </resultMap>
其中,重点在collection
<collection property="attendEnterpriseLst" ofType="com.hhsoft.evaluation.model.dto.AttendEnterprise" > <id column="attend_enterprise_id" property="attendEnterpriseId"/> <result column="attend_enterprise_name" property="attendEnterpriseName"/> </collection>
查询的sql
<select id="queryEvaluators" resultMap="BaseResultMap" parameterType="com.hhsoft.evaluation.model.dto.Evaluator" > SELECT eei.evaluator_id, eei.evaluator_name, eei.account, eei.password, eei.login_status, eei.gender, eei.mobile, eei.administrative_area_code, eei.administrative_area_grade, eei.questionnaire_id, eei.evaluator_type, eei.city_code, eei.county_code, eei.position_name, eei.organization_name, eei.create_user_id, eei.create_time, eei.update_user_id, eei.update_time, eei.order_no, eei.status, eei.office_people_id, eei.work_unit, eei.office_id, b1.area_name administrative_area_name, b2.area_name city_name, b3.area_name county_name, eeae.attend_enterprise_id, eae.attend_enterprise_name FROM e_evaluator eei LEFT JOIN b_area b1 ON b1.area_code = eei.administrative_area_code LEFT JOIN b_area b2 ON b2.area_code = eei.city_code LEFT JOIN b_area b3 ON b3.area_code = eei.county_code LEFT JOIN e_office_info eoi ON eoi.office_id = eei.office_id LEFT JOIN e_office_people_info eopi ON eopi.office_people_id = eei.office_people_id LEFT JOIN er_evaluator_attend_enterprise eeae ON eei.evaluator_id = eeae.evaluator_id LEFT JOIN e_attend_enterprise eae ON eeae.attend_enterprise_id = eae.attend_enterprise_id where eei.status = 0 and eeae.status = 0 ORDER BY eei.city_code, eei.county_code, eoi.order_no,eopi.order_no, eei.order_no <!-- 分页 --> <include refid="pagerB"></include> </select>
用时:10463ms
第二种写法:
第一步:配置返回的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" /> <result column="city_code" property="cityCode" jdbcType="VARCHAR" /> <result column="city_name" property="cityName" jdbcType="VARCHAR" /> <result column="county_code" property="countyCode" jdbcType="VARCHAR" /> <result column="county_name" property="countyName" jdbcType="VARCHAR" /> <result column="position_name" property="positionName" jdbcType="VARCHAR" /> <result column="organization_name" property="organizationName" jdbcType="VARCHAR" /> <result column="create_user_id" property="createUserId" jdbcType="VARCHAR" /> <result column="create_time" property="createTime" jdbcType="TIMESTAMP" /> <result column="update_user_id" property="updateUserId" jdbcType="VARCHAR" /> <result column="update_time" property="updateTime" jdbcType="TIMESTAMP" /> <result column="order_no" property="orderNo" jdbcType="FLOAT" /> <result column="status" property="status" jdbcType="INTEGER" /> <result column="office_people_id" property="officePeopleId" jdbcType="VARCHAR" /> <result column="work_unit" property="workUnit" jdbcType="VARCHAR" /> <result column="office_id" property="officeId" jdbcType="VARCHAR" /> <result column="answer_status" property="answerStatus" jdbcType="INTEGER" /> <collection property="attendEnterpriseLst" select="queryErAttendEnterpriseEvaluator" column="evaluator_id"> </collection> </resultMap>
重点还是在collection
<collection property="attendEnterpriseLst" select="queryErAttendEnterpriseEvaluator" column="evaluator_id"> </collection>
sql语句
<select id="queryEvaluators" resultMap="BaseResultMap" parameterType="com.hhsoft.evaluation.model.dto.Evaluator" > SELECT eei.evaluator_id, eei.evaluator_name, eei.account, eei.password, eei.login_status, eei.gender, eei.mobile, eei.administrative_area_code, eei.administrative_area_grade, eei.questionnaire_id, eei.evaluator_type, eei.city_code, eei.county_code, eei.position_name, eei.organization_name, eei.create_user_id, eei.create_time, eei.update_user_id, eei.update_time, eei.order_no, eei.status, eei.office_people_id, eei.work_unit, eei.office_id, b1.area_name administrative_area_name, b2.area_name city_name, b3.area_name county_name FROM e_evaluator eei LEFT JOIN b_area b1 ON b1.area_code = eei.administrative_area_code LEFT JOIN b_area b2 ON b2.area_code = eei.city_code LEFT JOIN b_area b3 ON b3.area_code = eei.county_code LEFT JOIN e_office_info eoi ON eoi.office_id = eei.office_id LEFT JOIN e_office_people_info eopi ON eopi.office_people_id = eei.office_people_id where eei.status = 0 ORDER BY eei.city_code, eei.county_code, eoi.order_no,eopi.order_no, eei.order_no <!-- 分页 --> <include refid="pagerB"></include> </select>
关联关系select用到的sql语句
<select id="queryErAttendEnterpriseEvaluator" parameterType="string" resultType="com.hhsoft.evaluation.model.dto.AttendEnterprise"> select eae.attend_enterprise_id attendEnterpriseId, eae.attend_enterprise_name attendEnterpriseName from e_attend_enterprise eae left join er_evaluator_attend_enterprise eeae on eeae.attend_enterprise_id = eae.attend_enterprise_id where eeae.evaluator_id = #{evaluator_id} </select>
用时:4862ms
效率提高一倍。具体原理待分析
相关推荐
mybatis 多层级collection嵌套
mybatis 关联查询 一对一 一对多 ResultMap association collection 完整代码
该资源主要通过举例讲述mybatis中的一对一关联查询,并用两种不同的方法进行操作。
mybatis 关联下旬 一对多 一对一 多对多
支持mysl底过程查询,可以查询帖子评论的多级回复以及每个回复关联的用户信息.可以作为类似于帖子回复这种嵌套递归查询业务的模板,可移植性高.如果疑问之处可多多交流
这是一个springboot架构搭建的一个整合mybatis递归查询的demo,其中整合了分布式事物jta,mybatis的分页插件等
本资源是手写mybatis实现查询所有操作,详细描述了mybatis框架查询所有操作的实现过程,通过手动模拟mybatis框架的实现过程对mybatis框架有更深刻的认识。
NULL 博文链接:https://jaychang.iteye.com/blog/2357143
Mybatis框架(子查询)
mybatis中mapper文件resultMap中collection和association的使用,参考地址:https://blog.csdn.net/zhizhuodewo6/article/details/82863452
主要介绍了mybatis collection 多条件查询的实现方法的相关资料,希望通过本文能帮助到大家,需要的朋友可以参考下
今天小编就为大家分享一篇关于mybatis利用association或collection传递多参数子查询,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
自关联查询一对多的例子,也就是充当一方,以新闻栏目为例子
mybatis 一对多collection的使用 在mybatis如何进行一对多的多表查询呢?这里用一个简单的例子说明
Mybatis关联映射 Mybatis关联映射 Mybatis关联映射 Mybatis关联映射 Mybatis关联映射
针对父子级数据目录查询, 以前都是逐级的去根据父级id查询子集目录, 查出后最后再在代码中拼成树形结构, 相当复杂,我们可以利用 mybatis 提供的 collection 标签自动组织树形结构
mybatis关联查询问题(一对多、多对一) 博客系统源码
查询+mybatis+mybatis+查询
MyBatis关联映射代码