@Data public class BaseIndexRequest extends SearchCriteria { /** * 考核周期起-年份 */ private Integer beginAssessYear; /** * 考核周期起-月份 */ private Integer beginAssessMonth; /** * 考核周期止-年份 */ private Integer endAssessYear; /** * 考核周期止-月份 */ private Integer endAssessMonth; /** * 地区id */ private String siteId; /** * 小组Code */ private String orgCode; /** * 考核条线code */ private String assessLineCode; /** * 员编 */ private String employeeId; /** * 员工姓名 */ private String employeeName; } 根据这个类和List<QualityCheck> query(PagingCriteria searchCriteria, BaseIndexRequest request); 帮我写一下对应的xml的select
时间: 2025-05-26 08:06:49 浏览: 14
根据你提供的 `BaseIndexRequest` 类和方法签名 `List<QualityCheck> query(PagingCriteria searchCriteria, BaseIndexRequest request)`,我们可以推断出这是一个基于 MyBatis 的查询场景。以下是对应的 XML 配置文件中的 `<select>` 标签实现:
### XML 配置代码
```xml
<select id="query" parameterType="map" resultType="QualityCheck">
SELECT
qc.*
FROM
quality_check qc
<where>
<!-- 考核周期起始 -->
<if test="beginAssessYear != null and beginAssessMonth != null">
AND qc.assess_date >= STR_TO_DATE(CONCAT(${beginAssessYear}, '-', ${beginAssessMonth}, '-01'), '%Y-%m-%d')
</if>
<!-- 考核周期结束 -->
<if test="endAssessYear != null and endAssessMonth != null">
AND qc.assess_date <= LAST_DAY(STR_TO_DATE(CONCAT(${endAssessYear}, '-', ${endAssessMonth}, '-01'), '%Y-%m-%d'))
</if>
<!-- 地区ID -->
<if test="siteId != null">
AND qc.site_id = #{siteId}
</if>
<!-- 小组Code -->
<if test="orgCode != null">
AND qc.org_code = #{orgCode}
</if>
<!-- 考核条线Code -->
<if test="assessLineCode != null">
AND qc.assess_line_code = #{assessLineCode}
</if>
<!-- 员工ID -->
<if test="employeeId != null">
AND qc.employee_id = #{employeeId}
</if>
<!-- 员工姓名 -->
<if test="employeeName != null">
AND qc.employee_name LIKE CONCAT('%', #{employeeName}, '%')
</if>
</where>
<choose>
<when test="searchCriteria.orderByField != null and searchCriteria.orderByDirection != null">
ORDER BY ${searchCriteria.orderByField} ${searchCriteria.orderByDirection}
</when>
<otherwise>
ORDER BY qc.id DESC
</otherwise>
</choose>
LIMIT #{searchCriteria.pageSize} OFFSET #{searchCriteria.pageNumber}
</select>
```
---
### 代码解释
1. **SQL 查询结构**:
- 查询的目标是从 `quality_check` 表中获取数据。
- 使用了 `<where>` 标签动态生成 WHERE 条件,确保只有非空参数才会被加入到 SQL 中。
2. **考核周期条件**:
- 如果 `beginAssessYear` 和 `beginAssessMonth` 不为空,则生成一个日期范围的起始条件。
- 如果 `endAssessYear` 和 `endAssessMonth` 不为空,则生成一个日期范围的结束条件。
- 使用了 `STR_TO_DATE` 和 `LAST_DAY` 函数来处理日期格式。
3. **其他字段条件**:
- 每个字段都通过 `<if>` 标签判断是否为空,避免生成无效的 SQL。
4. **排序逻辑**:
- 使用 `<choose>` 标签实现排序逻辑的动态切换。
- 如果 `searchCriteria` 中提供了排序字段和方向,则按照指定字段排序。
- 如果没有提供排序信息,则默认按 `qc.id` 降序排列。
5. **分页逻辑**:
- 使用 `LIMIT` 和 `OFFSET` 实现分页功能。
- `pageSize` 和 `pageNumber` 从 `PagingCriteria` 对象中获取。
---
### 注意事项
- 确保数据库表 `quality_check` 的字段名与 `BaseIndexRequest` 类中的属性名一一对应。
- 如果 `BaseIndexRequest` 和 `PagingCriteria` 是作为独立对象传递的,需要在调用时将它们封装为一个 `Map` 或者自定义的对象。
- 动态 SQL 中的 `${}` 占位符直接插入字符串值,可能存在 SQL 注入风险,建议仅对经过严格校验的字段使用 `${}`。
---
###
阅读全文
相关推荐


















