|
|
<?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.user.exam.mapper.UserExamMapper">
|
|
|
<!-- 定义了一个MyBatis的Mapper,namespace属性指定了该Mapper在整个项目中的唯一标识,这里对应着com.yf.exam.modules.user.exam.mapper.UserExamMapper接口,用于将XML中的SQL语句与对应的Java接口方法关联起来 -->
|
|
|
|
|
|
<!-- 通用查询映射结果 -->
|
|
|
<resultMap id="BaseResultMap" type="com.yf.exam.modules.user.exam.entity.UserExam">
|
|
|
<!-- 开始定义一个名为BaseResultMap的结果映射,用于将数据库查询结果准确地映射到指定的Java对象(这里是UserExam类型)。id属性为该结果映射的唯一标识符 -->
|
|
|
<id column="id" property="id" />
|
|
|
<!-- 定义主键的映射关系,将数据库表中的id列的值映射到Java对象的id属性上。column属性指定数据库表中的列名,property属性指定要映射到的Java对象中的属性名 -->
|
|
|
<result column="user_id" property="userId" />
|
|
|
<!-- 把数据库表中的user_id列的值映射到Java对象的userId属性 -->
|
|
|
<result column="exam_id" property="examId" />
|
|
|
<!-- 将数据库表中的exam_id列的值映射到Java对象的examId属性 -->
|
|
|
<result column="try_count" property="tryCount" />
|
|
|
<!-- 把数据库表中的try_count列的值映射到Java对象的tryCount属性 -->
|
|
|
<result column="max_score" property="maxScore" />
|
|
|
<!-- 将数据库表中的max_score列的值映射到Java对象的maxScore属性 -->
|
|
|
<result column="passed" property="passed" />
|
|
|
<!-- 把数据库表中的passed列的值映射到Java对象的passed属性 -->
|
|
|
<result column="create_time" property="createTime" />
|
|
|
<!-- 将数据库表中的create_time列的值映射到Java对象的createTime属性 -->
|
|
|
<result column="update_time" property="updateTime" />
|
|
|
<!-- 把数据库表中的update_time列的值映射到Java对象的updateTime属性 -->
|
|
|
</resultMap>
|
|
|
|
|
|
<!-- 通用查询结果列 -->
|
|
|
<sql id="Base_Column_List">
|
|
|
<!-- 定义了一个名为Base_Column_List的SQL片段,可在其他SQL语句中引用,这里列出了通用查询时要从数据库表中选择的列名,使用反引号(`)括起来是为了防止列名是SQL关键字时出现语法错误 -->
|
|
|
`id`,`user_id`,`exam_id`,`try_count`,`max_score`,`passed`,`create_time`,`update_time`
|
|
|
</sql>
|
|
|
|
|
|
|
|
|
<resultMap id="ListResultMap"
|
|
|
type="com.yf.exam.modules.user.exam.dto.response.UserExamRespDTO"
|
|
|
extends="BaseResultMap">
|
|
|
<!-- 定义一个名为ListResultMap的结果映射,它的类型是UserExamRespDTO,并且通过extends属性继承了BaseResultMap,意味着它会包含BaseResultMap中定义的所有映射关系,在此基础上还可以添加新的映射关系 -->
|
|
|
<result column="title" property="title" />
|
|
|
<!-- 新增的映射关系,将数据库表中的title列的值映射到Java对象的title属性 -->
|
|
|
<result column="real_name" property="realName" />
|
|
|
<!-- 将数据库表中的real_name列的值映射到Java对象的realName属性 -->
|
|
|
</resultMap>
|
|
|
|
|
|
|
|
|
<select id="paging" resultMap="ListResultMap">
|
|
|
<!-- 定义一个名为paging的查询语句,其结果将按照ListResultMap定义的映射关系进行映射 -->
|
|
|
SELECT ue.*,ee.title,uc.real_name FROM el_user_exam ue
|
|
|
LEFT JOIN el_exam ee ON ue.exam_id=ee.id
|
|
|
LEFT JOIN sys_user uc ON ue.user_id=uc.id
|
|
|
<!-- 使用LEFT JOIN连接el_user_exam表(ue)、el_exam表(ee)和sys_user表(uc),分别通过ue.exam_id=ee.id和ue.user_id=uc.id建立连接条件,以便在查询结果中获取到与用户考试相关的考试信息(如考试标题)以及用户的真实姓名等信息 -->
|
|
|
WHERE ee.id IS NOT NULL AND uc.id IS NOT NULL
|
|
|
<!-- 添加WHERE子句条件,筛选出在el_exam表和sys_user表中对应的id不为空的记录,确保连接后的数据是有效的 -->
|
|
|
|
|
|
<if test="query!=null">
|
|
|
<!-- <if>标签用于条件判断,这里判断传入的参数query是否不为空 -->
|
|
|
<if test="query.userId!=null and query.userId!=''">
|
|
|
<!-- 进一步判断query对象中的userId属性是否不为空且不为空字符串,如果满足条件则添加以下WHERE子句条件 -->
|
|
|
AND ue.user_id='{{userId}}'
|
|
|
<!-- 将数据库表中的ue.user_id列与传入的query.userId参数值(这里使用{{userId}}这种格式可能不太常见,通常应该是#{query.userId}这种MyBatis的参数占位符格式,需要确认一下是否正确)进行精确匹配 -->
|
|
|
</if>
|
|
|
<if test="query.examId!=null and query.examId!=''">
|
|
|
<!-- 进一步判断query对象中的examId属性是否不为空且不为空字符串,如果满足条件则添加以下WHERE子句条件 -->
|
|
|
AND ue.exam_id = #{query.examId}
|
|
|
<!-- 将数据库表中的ue.exam_id列与传入的query.examId参数值进行精确匹配,这里使用了正确的MyBatis参数占位符格式 -->
|
|
|
</if>
|
|
|
<if test="query.title!=null and query.title!=''">
|
|
|
<!-- 进一步判断query对象中的title属性是否不为空且不为空字符串,如果满足条件则添加以下WHERE子句条件 -->
|
|
|
AND ee.title LIKE CONCAT('%',#{query.title},'%')
|
|
|
<!-- 使用LIKE关键字进行模糊查询,将查询条件中的title值与数据库表中的ee.title列进行模糊匹配,#{query.title}是MyBatis的参数占位符,会被实际传入的参数值替换 -->
|
|
|
</if>
|
|
|
<if test="query.realName!=null and query.realName!=''">
|
|
|
<!-- 进一步判断query对象中的realName属性是否不为空且不为空字符串,如果满足条件则添加以下WHERE子句条件 -->
|
|
|
AND uc.real_name LIKE CONCAT('%',#{query.realName},'%')
|
|
|
<!-- 使用LIKE关键字进行模糊查询,将查询条件中的realName值与数据库表中的uc.real_name列进行模糊匹配,#{query.realName}是MyBatis的参数占位符,会被实际传入的参数值替换 -->
|
|
|
</if>
|
|
|
</if>
|
|
|
|
|
|
</select>
|
|
|
</mapper> |