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.
test/src-源文件/main/resources/mapper/user/UserExamMapper.xml

83 lines
6.7 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 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的Mappernamespace属性指定了该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>