|
|
<!-- 声明 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.user.exam.mapper.UserExamMapper">
|
|
|
|
|
|
<!-- 通用查询映射结果
|
|
|
定义一个基础结果映射,将数据库查询结果映射到 Java 实体类 com.yf.exam.modules.user.exam.entity.UserExam
|
|
|
id: 结果映射的唯一标识,可在其他 SQL 语句中引用
|
|
|
type: 指定映射的 Java 实体类的全限定名
|
|
|
-->
|
|
|
<resultMap id="BaseResultMap" type="com.yf.exam.modules.user.exam.entity.UserExam">
|
|
|
<!-- 映射数据库表的主键列到 Java 实体类的属性
|
|
|
column: 数据库表的列名
|
|
|
property: Java 实体类的属性名
|
|
|
-->
|
|
|
<id column="id" property="id" />
|
|
|
<!-- 映射用户 ID 列到 Java 实体类的 userId 属性 -->
|
|
|
<result column="user_id" property="userId" />
|
|
|
<!-- 映射考试 ID 列到 Java 实体类的 examId 属性 -->
|
|
|
<result column="exam_id" property="examId" />
|
|
|
<!-- 映射尝试次数列到 Java 实体类的 tryCount 属性 -->
|
|
|
<result column="try_count" property="tryCount" />
|
|
|
<!-- 映射最高分数列到 Java 实体类的 maxScore 属性 -->
|
|
|
<result column="max_score" property="maxScore" />
|
|
|
<!-- 映射是否通过列到 Java 实体类的 passed 属性 -->
|
|
|
<result column="passed" property="passed" />
|
|
|
<!-- 映射创建时间列到 Java 实体类的 createTime 属性 -->
|
|
|
<result column="create_time" property="createTime" />
|
|
|
<!-- 映射更新时间列到 Java 实体类的 updateTime 属性 -->
|
|
|
<result column="update_time" property="updateTime" />
|
|
|
</resultMap>
|
|
|
|
|
|
<!-- 通用查询结果列
|
|
|
定义一段可复用的 SQL 片段,包含常用的查询列
|
|
|
id: SQL 片段的唯一标识,可在其他 SQL 语句中通过 <include> 标签引用
|
|
|
-->
|
|
|
<sql id="Base_Column_List">
|
|
|
`id`,`user_id`,`exam_id`,`try_count`,`max_score`,`passed`,`create_time`,`update_time`
|
|
|
</sql>
|
|
|
|
|
|
<!-- 列表查询结果映射
|
|
|
定义一个结果映射,继承自 BaseResultMap,将数据库查询结果映射到 Java DTO 类 com.yf.exam.modules.user.exam.dto.response.UserExamRespDTO
|
|
|
id: 结果映射的唯一标识,可在其他 SQL 语句中引用
|
|
|
type: 指定映射的 Java DTO 类的全限定名
|
|
|
extends: 继承的基础结果映射
|
|
|
-->
|
|
|
<resultMap id="ListResultMap"
|
|
|
type="com.yf.exam.modules.user.exam.dto.response.UserExamRespDTO"
|
|
|
extends="BaseResultMap">
|
|
|
<!-- 映射考试标题列到 Java DTO 类的 title 属性 -->
|
|
|
<result column="title" property="title" />
|
|
|
<!-- 映射用户真实姓名列到 Java DTO 类的 realName 属性 -->
|
|
|
<result column="real_name" property="realName" />
|
|
|
</resultMap>
|
|
|
|
|
|
<!-- 分页查询方法
|
|
|
定义一个查询方法,根据条件进行分页查询,使用 ListResultMap 进行结果映射
|
|
|
id: 查询方法的唯一标识,对应 Java Mapper 接口中的方法名
|
|
|
resultMap: 指定使用的结果映射
|
|
|
-->
|
|
|
<select id="paging" resultMap="ListResultMap">
|
|
|
<!-- 从 el_user_exam 表中选取所有列,同时选取 el_exam 表的 title 列和 sys_user 表的 real_name 列 -->
|
|
|
SELECT ue.*,ee.title,uc.real_name FROM el_user_exam ue
|
|
|
<!-- 左连接 el_exam 表,通过 exam_id 和 id 关联 -->
|
|
|
LEFT JOIN el_exam ee ON ue.exam_id=ee.id
|
|
|
<!-- 左连接 sys_user 表,通过 user_id 和 id 关联 -->
|
|
|
LEFT JOIN sys_user uc ON ue.user_id=uc.id
|
|
|
<!-- 筛选条件:确保 el_exam 表和 sys_user 表的关联记录存在 -->
|
|
|
WHERE ee.id IS NOT NULL AND uc.id IS NOT NULL
|
|
|
|
|
|
<!-- 判断查询参数 query 是否不为空 -->
|
|
|
<if test="query!=null">
|
|
|
|
|
|
<!-- 判断查询参数中的 userId 属性是否不为空且不为空字符串 -->
|
|
|
<if test="query.userId!=null and query.userId!=''">
|
|
|
<!-- 注意:此处存在错误,应使用 #{query.userId} 进行参数绑定,避免 SQL 注入
|
|
|
正确写法:AND ue.user_id = #{query.userId}
|
|
|
-->
|
|
|
AND ue.user_id='{{userId}}'
|
|
|
</if>
|
|
|
<!-- 判断查询参数中的 examId 属性是否不为空且不为空字符串 -->
|
|
|
<if test="query.examId!=null and query.examId!=''">
|
|
|
<!-- 添加筛选条件,根据考试 ID 过滤 -->
|
|
|
AND ue.exam_id = #{query.examId}
|
|
|
</if>
|
|
|
<!-- 判断查询参数中的 title 属性是否不为空且不为空字符串 -->
|
|
|
<if test="query.title!=null and query.title!=''">
|
|
|
<!-- 添加模糊查询条件,根据考试标题过滤 -->
|
|
|
AND ee.title LIKE CONCAT('%',#{query.title},'%')
|
|
|
</if>
|
|
|
<!-- 判断查询参数中的 realName 属性是否不为空且不为空字符串 -->
|
|
|
<if test="query.realName!=null and query.realName!=''">
|
|
|
<!-- 添加模糊查询条件,根据用户真实姓名过滤 -->
|
|
|
AND uc.real_name LIKE CONCAT('%',#{query.realName},'%')
|
|
|
</if>
|
|
|
</if>
|
|
|
|
|
|
</select>
|
|
|
</mapper>
|