UserMapper.xml
2.23 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.xly.erp.module.usr.mapper.UserMapper">
<!-- REQ-USR-003 用户列表查询:LEFT JOIN tStaff + 动态 WHERE。
column 由 service 层白名单映射后通过 @Param("column") 单独传入,
绝不接受 DTO 中可被 GET query-string 绑定的字段。 -->
<select id="searchUsers" resultType="com.xly.erp.module.usr.vo.UserListItemVO">
SELECT
u.iIncrement, u.sUserName, s.sStaffName, u.sUserNo,
s.sDepartment, u.sUserType, u.sLanguage, u.bDeleted,
u.tLastLoginDate, u.sCreatedBy, u.tCreateDate
FROM tUser u
LEFT JOIN tStaff s ON u.iStaffId = s.iIncrement AND s.bDeleted = 0
<where>
<!-- 默认过滤已软删除:仅当 queryField=='deleted' 且 queryValue 非空时让用户控制 bDeleted 取值 -->
<if test="query.queryField != 'deleted' or query.queryValue == null or query.queryValue == ''">
u.bDeleted = 0
</if>
<if test="column != null and column != '' and query.queryValue != null and query.queryValue != ''">
AND
<choose>
<!-- deleted 是 bit(1) 列,MySQL 与字符串 '1'/'0' 隐式比较不可靠;
service 已把 queryValue 标准化为 '0' / '1',此处显式 CAST 成整数。 -->
<when test="query.queryField == 'deleted'">
${column} = CAST(#{query.queryValue} AS UNSIGNED)
</when>
<when test="query.matchType == 'equals'">
${column} = #{query.queryValue}
</when>
<when test="query.matchType == 'notContains'">
${column} NOT LIKE CONCAT('%', #{query.queryValue}, '%')
</when>
<otherwise>
${column} LIKE CONCAT('%', #{query.queryValue}, '%')
</otherwise>
</choose>
</if>
</where>
ORDER BY u.tCreateDate DESC, u.iIncrement DESC
</select>
</mapper>