热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

开发笔记:使用mybatis的resultMap进行复杂查询

篇首语:本文由编程笔记#小编为大家整理,主要介绍了使用mybatis的resultMap进行复杂查询相关的知识,希望对你有一定的参考价值。本来写了一

篇首语:本文由编程笔记#小编为大家整理,主要介绍了使用mybatis的resultMap进行复杂查询相关的知识,希望对你有一定的参考价值。



本来写了一份,临时有事忘保存,丢了,现在重新写一份

使用mybatis的resultMap进行复杂查询

首先来了解一下数据表的结构。

 

 现在共有两张表,paper_template和paper_template_question_setting,其中paper_template是主表,setting是从表,主要负责记录模板中的一些设置,两表是一对多的关系

现在我想查询模板列表,并且附带模板的设置信息


select t.id,t.name,s.* from paper_template as t
left join paper_template_question_setting as s on t.id= s.template_id
where t.id=104

 对应的resultmap应该这么写


<resultMap id="testResultMap" type="com.xkw.its.homework.papertemplate.PaperTemplateDto">
<id column="id" jdbcType="INTEGER" property="id"/>
<result column="name" jdbcType="VARCHAR" property="name"/>
<result column="organization_id" jdbcType="VARCHAR" property="organizationId"/>
<result column="stage_id" jdbcType="VARCHAR" property="stageId"/>
<result column="subject_id" jdbcType="INTEGER" property="subjectId"/>
<result column="grade_id" jdbcType="INTEGER" property="gradeId"/>
<result column="semester" jdbcType="TINYINT" property="semester"/>
<result column="year" jdbcType="INTEGER" property="year"/>
<result column="create_user_id" jdbcType="VARCHAR" property="createUserId"/>
<result column="create_time" jdbcType="TIMESTAMP" property="createTime"/>
<result column="update_time" jdbcType="TIMESTAMP" property="updateTime"/>
<result column="update_user_id" jdbcType="VARCHAR" property="updateUserId"/>
<result column="explain_info" jdbcType="VARCHAR" property="explainInfo"/>
<result column="difficulty_degree" jdbcType="VARCHAR" property="difficultyDegree"/>
<result column="student_info" jdbcType="VARCHAR" property="studentInfo"/>
<result column="sealing_line_text" jdbcType="VARCHAR" property="sealingLineText"/>
<result column="is_deleted" jdbcType="BIT" property="isDeleted"/>
<result column="source" jdbcType="TINYINT" property="source"/>
<collection property="paperTemplateQuestionSettingDtoList"
ofType
="com.xkw.its.homework.papertemplatequestionsetting.PaperTemplateQuestionSetting">
<id column="id" jdbcType="INTEGER" property="id"/>
<result column="start" jdbcType="INTEGER" property="start"/>
<result column="end" jdbcType="INTEGER" property="end"/>
<result column="question_count" jdbcType="INTEGER" property="questionCount" />
<result column="is_composite" jdbcType="BIT" property="isComposite" />
<result column="qcourse_id" jdbcType="INTEGER" property="courseId" />
<result column="qsubject_id" jdbcType="INTEGER" property="subjectId"/>
<result column="question_type_id" jdbcType="VARCHAR" property="questionTypeId"/>
<result column="score" jdbcType="DOUBLE" property="score"/>
<result column="template_id" jdbcType="INTEGER" property="templateId"/>
<result column="difficulty_id" jdbcType="INTEGER" property="difficultyId" />
collection>
resultMap>

 

 此处做一个说明

property 对应的类中的字段名

collection 对应一个集合

ofType 是集合对应的类名
将子类的各个字段放在
collection 中即可

接口的查询结果如下图所示

 

 

  对比从数据库的直接查询结果,和从接口获取的结果发现:

paperTemplateQuestionSettingDtoList接口中只返回一条,并且id和template表中的id一样。这是因为本次查询中出现了两个id,查询映射自动默认第一个。解决方法就是在查询语句中为setting表中的id重命名,代码如下:

select *,q.id as q_id
from paper_template t
left join paper_template_catalog c on t.id=c.template_id
left join paper_template_question_setting q on t.id=q.template_id
where t.id=104

 

 

 今天只测试了带集合的用法,带对象的用法还没有测试,改天再来补充

 



推荐阅读
  • 本文详细介绍了在 Oracle 数据库中使用 MyBatis 实现增删改查操作的方法。针对查询操作,文章解释了如何通过创建字段映射来处理数据库字段风格与 Java 对象之间的差异,确保查询结果能够正确映射到持久层对象。此外,还探讨了插入、更新和删除操作的具体实现及其最佳实践,帮助开发者高效地管理和操作 Oracle 数据库中的数据。 ... [详细]
  • 在MySQL中实现时间比较功能的详细解析与应用
    在MySQL中实现时间比较功能的详细解析与应用。本文深入探讨了MySQL中时间比较的实现方法,重点介绍了`UNIX_TIMESTAMP`函数的应用。该函数可以接收一个日期时间参数,也可以不带参数使用,其返回值为Unix时间戳,便于进行时间的精确比较和计算。此外,文章还涵盖了其他相关的时间处理函数和技巧,帮助读者更好地理解和掌握MySQL中的时间操作。 ... [详细]
  • 本文详细介绍了MySQL数据库的基础语法与核心操作,涵盖从基础概念到具体应用的多个方面。首先,文章从基础知识入手,逐步深入到创建和修改数据表的操作。接着,详细讲解了如何进行数据的插入、更新与删除。在查询部分,不仅介绍了DISTINCT和LIMIT的使用方法,还探讨了排序、过滤和通配符的应用。此外,文章还涵盖了计算字段以及多种函数的使用,包括文本处理、日期和时间处理及数值处理等。通过这些内容,读者可以全面掌握MySQL数据库的核心操作技巧。 ... [详细]
  • MySQL Decimal 类型的最大值解析及其在数据处理中的应用艺术
    在关系型数据库中,表的设计与SQL语句的编写对性能的影响至关重要,甚至可占到90%以上。本文将重点探讨MySQL中Decimal类型的最大值及其在数据处理中的应用技巧,通过实例分析和优化建议,帮助读者深入理解并掌握这一重要知识点。 ... [详细]
  • 在使用 Cacti 进行监控时,发现已运行的转码机未产生流量,导致 Cacti 监控界面显示该转码机处于宕机状态。进一步检查 Cacti 日志,发现数据库中存在 SQL 查询失败的问题,错误代码为 145。此问题可能是由于数据库表损坏或索引失效所致,建议对相关表进行修复操作以恢复监控功能。 ... [详细]
  • 本文介绍了UUID(通用唯一标识符)的概念及其在JavaScript中生成Java兼容UUID的代码实现与优化技巧。UUID是一个128位的唯一标识符,广泛应用于分布式系统中以确保唯一性。文章详细探讨了如何利用JavaScript生成符合Java标准的UUID,并提供了多种优化方法,以提高生成效率和兼容性。 ... [详细]
  • 本文深入探讨了CGLIB BeanCopier在Bean对象复制中的应用及其优化技巧。相较于Spring的BeanUtils和Apache的BeanUtils,CGLIB BeanCopier在性能上具有显著优势。通过详细分析其内部机制和使用场景,本文提供了多种优化方法,帮助开发者在实际项目中更高效地利用这一工具。此外,文章还讨论了CGLIB BeanCopier在复杂对象结构和大规模数据处理中的表现,为读者提供了实用的参考和建议。 ... [详细]
  • 如何在Java中使用DButils类
    这期内容当中小编将会给大家带来有关如何在Java中使用DButils类,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。D ... [详细]
  • 本文总结了在SQL Server数据库中编写和优化存储过程的经验和技巧,旨在帮助数据库开发人员提升存储过程的性能和可维护性。 ... [详细]
  • 在《Linux高性能服务器编程》一书中,第3.2节深入探讨了TCP报头的结构与功能。TCP报头是每个TCP数据段中不可或缺的部分,它不仅包含了源端口和目的端口的信息,还负责管理TCP连接的状态和控制。本节内容详尽地解析了TCP报头的各项字段及其作用,为读者提供了深入理解TCP协议的基础。 ... [详细]
  • 本文将继续探讨 JavaScript 函数式编程的高级技巧及其实际应用。通过一个具体的寻路算法示例,我们将深入分析如何利用函数式编程的思想解决复杂问题。示例中,节点之间的连线代表路径,连线上的数字表示两点间的距离。我们将详细讲解如何通过递归和高阶函数等技术实现高效的寻路算法。 ... [详细]
  • 数据库多表联合查询:内连接与外连接详解
    在数据库的多表查询中,内连接和外连接是两种常用的技术手段。内连接用于检索多个表中相互匹配的记录,即只有当两个表中的记录满足特定的连接条件时,这些记录才会被包含在查询结果中。相比之下,外连接则不仅返回匹配的记录,还可以选择性地返回不匹配的记录,具体取决于左外连接、右外连接或全外连接的选择。本文将详细解析这两种连接方式的使用场景及其语法结构,帮助读者更好地理解和应用多表查询技术。 ... [详细]
  • HBase Java API 进阶:过滤器详解与应用实例
    本文详细探讨了HBase 1.2.6版本中Java API的高级应用,重点介绍了过滤器的使用方法和实际案例。首先,文章对几种常见的HBase过滤器进行了概述,包括列前缀过滤器(ColumnPrefixFilter)和时间戳过滤器(TimestampsFilter)。此外,还详细讲解了分页过滤器(PageFilter)的实现原理及其在大数据查询中的应用场景。通过具体的代码示例,读者可以更好地理解和掌握这些过滤器的使用技巧,从而提高数据处理的效率和灵活性。 ... [详细]
  • 利用 Spring BeanUtils 实现 JavaBean 的深度克隆与属性复制 ... [详细]
  • 本文深入探讨了MySQL数据库设计的核心概念与实用技巧,重点讲解了数据库设计的三范式。第一范式要求每个表都应具备主键,并确保所有字段具有原子性,即不可再进一步分割。第二范式则在此基础上进一步规范,确保所有非主键字段完全依赖于主键,避免部分依赖带来的数据冗余问题。第三范式则进一步消除传递依赖,确保非主键字段之间不存在依赖关系,从而提高数据的一致性和完整性。通过这些范式的应用,可以有效提升数据库的设计质量和性能。 ... [详细]
author-avatar
275514908_9369d7
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有