|
|
<!-- 声明 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 < 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>
|