|
|
<?xml version="1.0" encoding="UTF-8"?>
|
|
|
<!-- XML声明,指定了XML的版本为1.0以及字符编码为UTF-8,这是告诉XML解析器如何正确解析该XML文件的基础信息 -->
|
|
|
|
|
|
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
|
|
<!-- 文档类型定义(DOCTYPE)声明,表明此XML文档遵循MyBatis的Mapper 3.0的文档类型定义(DTD)规范,同时给出了DTD文件的网络地址,以便解析器能依据该DTD验证XML文档结构的正确性 -->
|
|
|
|
|
|
<mapper namespace="com.yf.exam.modules.paper.mapper.PaperQuMapper">
|
|
|
<!-- 定义了一个MyBatis的Mapper,namespace属性指定了该Mapper在整个项目中的唯一标识,这里对应着com.yf.exam.modules.paper.mapper.PaperQuMapper接口,用于将XML中的SQL语句与对应的Java接口方法关联起来 -->
|
|
|
|
|
|
<!-- 通用查询映射结果 -->
|
|
|
<resultMap id="BaseResultMap" type="com.yf.exam.modules.paper.entity.PaperQu">
|
|
|
<!-- 开始定义一个名为BaseResultMap的结果映射,用于将数据库查询结果准确地映射到指定的Java对象(这里是PaperQu类型)。id属性为该结果映射的唯一标识符 -->
|
|
|
<id column="id" property="id" />
|
|
|
<!-- 定义主键的映射关系,将数据库表中的id列的值映射到Java对象的id属性上。column属性指定数据库表中的列名,property属性指定要映射到的Java对象中的属性名 -->
|
|
|
<result column="paper_id" property="paperId" />
|
|
|
<!-- 把数据库表中的paper_id列的值映射到Java对象的paperId属性 -->
|
|
|
<result column="qu_id" property="quId" />
|
|
|
<!-- 将数据库表中的qu_id列的值映射到Java对象的quId属性 -->
|
|
|
<result column="qu_type" property="quType" />
|
|
|
<!-- 把数据库表中的qu_type列的值映射到Java对象的quType属性 -->
|
|
|
<result column="answered" property="answered" />
|
|
|
<!-- 将数据库表中的answered列的值映射到Java对象的answered属性 -->
|
|
|
<result column="answer" property="answer" />
|
|
|
<!-- 把数据库表中的answer列的值映射到Java对象的answer属性 -->
|
|
|
<result column="sort" property="sort" />
|
|
|
<!-- 将数据库表中的sort列的值映射到Java对象的sort属性 -->
|
|
|
<result column="score" property="score" />
|
|
|
<!-- 把数据库表中的score列的值映射到Java对象的score属性 -->
|
|
|
<result column="actual_score" property="actualScore" />
|
|
|
<!-- 将数据库表中的actual_score列的值映射到Java对象的actualScore属性 -->
|
|
|
<result column="is_right" property="isRight" />
|
|
|
<!-- 把数据库表中的is_right列的值映射到Java对象的isRight属性 -->
|
|
|
</resultMap>
|
|
|
|
|
|
<!-- 通用查询结果列 -->
|
|
|
<sql id="Base_Column_List">
|
|
|
<!-- 定义了一个名为Base_Column_List的SQL片段,可在其他SQL语句中引用,这里列出了通用查询时要从数据库表中选择的列名,使用反引号(`)括起来是为了防止列名是SQL关键字时出现语法错误 -->
|
|
|
`id`,`paper_id`,`qu_id`,`qu_type`,`answered`,`answer`,`sort`,`score`,`actual_score`,`is_right`
|
|
|
</sql>
|
|
|
|
|
|
|
|
|
<!-- 计算总分 -->
|
|
|
<select id="sumObjective" resultType="int">
|
|
|
<!-- 定义一个名为sumObjective的查询语句,用于计算客观题的总分,其结果类型为整数(int) -->
|
|
|
SELECT IFNULL(SUM(actual_score),0) as total
|
|
|
<!-- 使用IFNULL函数对SUM(actual_score)的结果进行处理,如果SUM(actual_score)为NULL,则返回0,将结果命名为total -->
|
|
|
FROM el_paper_qu
|
|
|
<!-- 指定从el_paper_qu表中进行查询 -->
|
|
|
WHERE paper_id=#{paperId}
|
|
|
<!-- 添加WHERE子句条件,筛选出在el_paper_qu表中paper_id等于传入的#{paperId}参数值的记录 -->
|
|
|
AND is_right=true
|
|
|
<!-- 进一步筛选出is_right列值为true的记录,即只计算回答正确的客观题分数 -->
|
|
|
AND qu_type < 4
|
|
|
<!-- 再筛选出qu_type列值小于4的记录,通常用于区分客观题类型(假设小于4代表客观题类型) -->
|
|
|
</select>
|
|
|
|
|
|
<select id="sumSubjective" resultType="int">
|
|
|
<!-- 定义一个名为sumSubjective的查询语句,用于计算主观题的总分,其结果类型为整数(int) -->
|
|
|
SELECT IFNULL(SUM(actual_score),0) as total
|
|
|
<!-- 使用IFNULL函数对SUM(actual_score)的结果进行处理,如果SUM(actual_score)为NULL,则返回0,将结果命名为total -->
|
|
|
FROM el_paper_qu
|
|
|
<!-- 指定从el_paper_qu表中进行查询 -->
|
|
|
WHERE paper_id=#{paperId}
|
|
|
<!-- 添加WHERE子句条件,筛选出在el_paper_qu表中paper_id等于传入的#{paperId}参数值的记录 -->
|
|
|
AND qu_type=4
|
|
|
<!-- 筛选出qu_type列值等于4的记录,通常用于区分主观题类型(假设等于4代表主观题类型) -->
|
|
|
</select>
|
|
|
|
|
|
<resultMap id="ListResultMap" extends="BaseResultMap" type="com.yf.exam.modules.paper.dto.ext.PaperQuDetailDTO">
|
|
|
<!-- 定义一个名为ListResultMap的结果映射,它通过extends属性继承了BaseResultMap,意味着它会包含BaseResultMap中定义的所有映射关系,在此基础上还可以添加新的映射关系。其类型是PaperQuDetailDTO -->
|
|
|
<result column="image" property="image" />
|
|
|
<!-- 新增的映射关系,将数据库表中的image列的值映射到Java对象的image属性 -->
|
|
|
<result column="content" property="content" />
|
|
|
<!-- 将数据库表中的content列的值映射到Java对象的content属性 -->
|
|
|
<collection property="answerList" column="{paperId=paper_id,quId=qu_id}"
|
|
|
select="com.yf.exam.modules.paper.mapper.PaperQuAnswerMapper.listForShow" />
|
|
|
<!-- 使用<collection>标签来处理一对多的关系,这里表示将根据指定的条件(paperId和quId)从PaperQuAnswerMapper.listForShow查询中获取多条记录,并将这些记录映射到Java对象的answerList属性上。column属性用于指定传递给子查询的参数,select属性指定了要调用的子查询的Mapper方法 -->
|
|
|
</resultMap>
|
|
|
|
|
|
<select id="listByPaper" resultMap="ListResultMap">
|
|
|
<!-- 定义一个名为listByPaper的查询语句,其结果将按照ListResultMap定义的映射关系进行映射 -->
|
|
|
SELECT pq.*,eq.content,eq.image
|
|
|
<!-- 从el_paper_qu表(pq)中选择所有列,并通过LEFT JOIN连接el_qu表(eq)获取相关列(content和image)的数据,以便在查询结果中包含题目内容和图片等相关信息 -->
|
|
|
FROM el_paper_qu pq
|
|
|
LEFT JOIN el_qu eq ON pq.qu_id = eq.id
|
|
|
<!-- 使用LEFT JOIN连接el_paper_qu表和el_qu表,连接条件是pq.qu_id等于eq.id,这样可以获取到与试卷题目相关的完整信息 -->
|
|
|
WHERE pq.paper_id=#{paperId}
|
|
|
<!-- 添加WHERE子句条件,筛选出在el_paper_qu表中paper_id等于传入的#{paperId}参数值的记录 -->
|
|
|
ORDER BY pq.sort ASC
|
|
|
<!-- 按照pq.sort列的值进行升序排序,以便以特定顺序展示查询结果 -->
|
|
|
</select>
|
|
|
|
|
|
</mapper> |