You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
exam/mapper/paper/PaperQuMapper.xml

95 lines
5.5 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<!-- 声明 XML 文档版本为 1.0,指定字符编码为 UTF-8确保文档能正确处理各种字符 -->
<?xml version="1.0" encoding="UTF-8"?>
<!-- 定义文档类型,引用 MyBatis Mapper 3.0 的 DTD用于验证当前 XML 文档是否符合 MyBatis Mapper 规范 -->
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!-- 定义 Mapper 命名空间,将此 XML 映射文件与对应的 Java Mapper 接口关联起来,方便 MyBatis 找到对应的操作方法 -->
<mapper namespace="com.yf.exam.modules.paper.mapper.PaperQuMapper">
<!-- 通用查询映射结果,将数据库查询结果映射到 Java 实体类 com.yf.exam.modules.paper.entity.PaperQu -->
<resultMap id="BaseResultMap" type="com.yf.exam.modules.paper.entity.PaperQu">
<!-- 映射数据库表的主键列 id 到 Java 实体类的 id 属性 -->
<id column="id" property="id" />
<!-- 映射数据库表的 paper_id 列到 Java 实体类的 paperId 属性 -->
<result column="paper_id" property="paperId" />
<!-- 映射数据库表的 qu_id 列到 Java 实体类的 quId 属性 -->
<result column="qu_id" property="quId" />
<!-- 映射数据库表的 qu_type 列到 Java 实体类的 quType 属性 -->
<result column="qu_type" property="quType" />
<!-- 映射数据库表的 answered 列到 Java 实体类的 answered 属性 -->
<result column="answered" property="answered" />
<!-- 映射数据库表的 answer 列到 Java 实体类的 answer 属性 -->
<result column="answer" property="answer" />
<!-- 映射数据库表的 sort 列到 Java 实体类的 sort 属性 -->
<result column="sort" property="sort" />
<!-- 映射数据库表的 score 列到 Java 实体类的 score 属性 -->
<result column="score" property="score" />
<!-- 映射数据库表的 actual_score 列到 Java 实体类的 actualScore 属性 -->
<result column="actual_score" property="actualScore" />
<!-- 映射数据库表的 is_right 列到 Java 实体类的 isRight 属性 -->
<result column="is_right" property="isRight" />
</resultMap>
<!-- 通用查询结果列,定义一段可复用的 SQL 片段,包含常用的查询列 -->
<!-- 可在其他 SQL 语句中通过 <include refid="Base_Column_List"/> 标签引用 -->
<sql id="Base_Column_List">
`id`,`paper_id`,`qu_id`,`qu_type`,`answered`,`answer`,`sort`,`score`,`actual_score`,`is_right`
</sql>
<!-- 计算客观题总分 -->
<!-- id: 查询方法的唯一标识,对应 Java Mapper 接口中的方法名 -->
<!-- resultType: 查询结果的数据类型,这里为整数类型 -->
<select id="sumObjective" resultType="int">
<!-- 使用 IFNULL 函数处理 SUM(actual_score) 为 NULL 的情况,若为 NULL 则返回 0将结果命名为 total -->
SELECT IFNULL(SUM(actual_score),0) as total
FROM el_paper_qu
<!-- 根据传入的 paperId 进行筛选 -->
WHERE paper_id=#{paperId}
<!-- 筛选出回答正确的记录 -->
AND is_right=true
<!-- 筛选出题型小于 4 的客观题 -->
AND qu_type &lt; 4
</select>
<!-- 计算主观题总分 -->
<!-- id: 查询方法的唯一标识,对应 Java Mapper 接口中的方法名 -->
<!-- resultType: 查询结果的数据类型,这里为整数类型 -->
<select id="sumSubjective" resultType="int">
<!-- 使用 IFNULL 函数处理 SUM(actual_score) 为 NULL 的情况,若为 NULL 则返回 0将结果命名为 total -->
SELECT IFNULL(SUM(actual_score),0) as total
FROM el_paper_qu
<!-- 根据传入的 paperId 进行筛选 -->
WHERE paper_id=#{paperId}
<!-- 筛选出题型为 4 的主观题 -->
AND qu_type=4
</select>
<!-- 扩展查询结果映射,继承自 BaseResultMap将结果映射到 Java DTO 类 com.yf.exam.modules.paper.dto.ext.PaperQuDetailDTO -->
<resultMap id="ListResultMap" extends="BaseResultMap" type="com.yf.exam.modules.paper.dto.ext.PaperQuDetailDTO">
<!-- 映射数据库表的 image 列到 Java DTO 类的 image 属性 -->
<result column="image" property="image" />
<!-- 映射数据库表的 content 列到 Java DTO 类的 content 属性 -->
<result column="content" property="content" />
<!-- 定义一个集合映射,将关联查询结果映射到 Java DTO 类的 answerList 属性 -->
<!-- column: 传递给关联查询的参数paperId 和 quId -->
<!-- select: 指定关联查询的方法,调用 PaperQuAnswerMapper 中的 listForShow 方法 -->
<collection property="answerList" column="{paperId=paper_id,quId=qu_id}"
select="com.yf.exam.modules.paper.mapper.PaperQuAnswerMapper.listForShow" />
</resultMap>
<!-- 根据试卷 ID 查询题目列表 -->
<!-- id: 查询方法的唯一标识,对应 Java Mapper 接口中的方法名 -->
<!-- resultMap: 指定使用 ListResultMap 进行结果映射 -->
<select id="listByPaper" resultMap="ListResultMap">
<!-- 查询 el_paper_qu 表的所有列以及 el_qu 表的 content 和 image 列 -->
SELECT pq.*,eq.content,eq.image
FROM el_paper_qu pq
<!-- 左连接 el_qu 表,通过 qu_id 和 id 关联 -->
LEFT JOIN el_qu eq ON pq.qu_id = eq.id
<!-- 根据传入的 paperId 进行筛选 -->
WHERE pq.paper_id=#{paperId}
<!-- 按 sort 字段升序排序 -->
ORDER BY pq.sort ASC
</select>
</mapper>