graph LR
A["sql id=Base_Column"] --> B["include refid"]
B --> C[selectAll]
B --> D[selectById]
B --> E[selectByCondition]
style A fill:#c8e6c9,stroke:#333,color:#000
style C fill:#bbdefb,stroke:#333,color:#000
style D fill:#bbdefb,stroke:#333,color:#000
style E fill:#bbdefb,stroke:#333,color:#000
<!-- 查询列表 --> <selectid="selectList"resultMap="BaseResultMap"> SELECT id, name, email, status, created_at, updated_at FROM t_user WHERE deleted = 0 ORDER BY created_at DESC </select>
<!-- 按 ID 查询 --> <selectid="selectById"resultMap="BaseResultMap"> SELECT id, name, email, status, created_at, updated_at FROM t_user WHERE id = #{id} AND deleted = 0 </select>
<!-- 按条件查询 --> <selectid="selectByCondition"resultMap="BaseResultMap"> SELECT id, name, email, status, created_at, updated_at FROM t_user WHERE deleted = 0 <iftest="status != null"> AND status = #{status} </if> </select>
<!-- 列表查询 --> <selectid="listArticles"resultMap="ListResultMap"> SELECT <includerefid="List_Column_List"/> FROM t_article WHERE deleted = 0 ORDER BY created_at DESC LIMIT #{offset}, #{limit} </select>
<!-- 详情查询 --> <selectid="getArticleDetail"resultMap="DetailResultMap"> SELECT <includerefid="Detail_Column_List"/> FROM t_article WHERE id = #{id} AND deleted = 0 </select>
3.2 过滤软删除条件
1 2 3 4 5 6 7 8 9 10 11 12
<!-- 通用软删除过滤 --> <sqlid="Not_Deleted"> AND deleted = 0 </sql>
<!-- 使用 --> <selectid="selectActiveUsers"resultMap="BaseResultMap"> SELECT <includerefid="Base_Column_List"/> FROM t_user WHERE 1 = 1 <includerefid="Not_Deleted"/> </select>
3.3 过滤特定状态值
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
<!-- 过滤指定状态 --> <sqlid="Active_Status_Filter"> AND status IN ('ACTIVE', 'VERIFIED') </sql>
<sqlid="Exclude_Test_Data"> AND email NOT LIKE '%@test.com' AND name NOT LIKE 'test_%' </sql>
<!-- 组合使用 --> <selectid="selectRealActiveUsers"resultMap="BaseResultMap"> SELECT <includerefid="Base_Column_List"/> FROM t_user WHERE 1 = 1 <includerefid="Not_Deleted"/> <includerefid="Active_Status_Filter"/> <includerefid="Exclude_Test_Data"/> </select>
<sqlid="Base_Where"> <iftest="name != null and name != ''"> AND name LIKE CONCAT('%', #{name}, '%') </if> <iftest="status != null"> AND status = #{status} </if> <iftest="startDate != null"> AND created_at >= #{startDate} </if> <iftest="endDate != null"> AND created_at <= #{endDate} </if> AND deleted = 0 </sql>
<selectid="queryByCondition"resultMap="BaseResultMap"> SELECT <includerefid="Base_Column_List"/> FROM t_user <where> <includerefid="Base_Where"/> </where> ORDER BY created_at DESC </select>
<sqlid="Order_Clause"> <choose> <whentest="orderBy == 'name'"> ORDER BY name </when> <whentest="orderBy == 'date'"> ORDER BY created_at </when> <otherwise> ORDER BY id </otherwise> </choose> <iftest="orderDir == 'ASC'">ASC</if> <iftest="orderDir != 'ASC'">DESC</if> </sql>
// XML 方式:复杂查询(复用 sql 片段) List<UserDTO> users = userMapper.selectWithDepartment(params);
1 2 3 4 5 6 7 8 9 10 11 12 13
<!-- 复杂查询用 XML,复用公共片段 --> <selectid="selectWithDepartment"resultMap="UserDeptResultMap"> SELECT u.id, u.name, u.email, d.name AS dept_name FROM t_user u LEFT JOIN t_department d ON u.dept_id = d.id <where> <includerefid="Base_Where"/> <includerefid="com.example.mapper.CommonMapper.soft_delete_condition"/> </where> ORDER BY u.created_at DESC </select>
<!-- 通用查询条件 --> <sqlid="Base_Where"> <iftest="name != null and name != ''"> AND name LIKE CONCAT('%', #{name}, '%') </if> <iftest="email != null and email != ''"> AND email = #{email} </if> <iftest="status != null"> AND status = #{status} </if> <iftest="startDate != null"> AND created_at >= #{startDate} </if> <iftest="endDate != null"> AND created_at <= #{endDate} </if> AND deleted = 0 </sql>
<!-- 列表查询 --> <selectid="selectUserList"resultType="com.example.dto.UserListDTO"> SELECT <includerefid="List_Column_List"/> FROM t_user <where> <includerefid="Base_Where"/> </where> ORDER BY created_at DESC LIMIT #{offset}, #{pageSize} </select>
<!-- 详情查询 --> <selectid="selectUserDetail"resultType="com.example.dto.UserDetailDTO"> SELECT <includerefid="Base_Column_List"/> FROM t_user WHERE id = #{id} AND deleted = 0 </select>
<!-- 导出查询(带关联) --> <selectid="selectForExport"resultType="com.example.dto.UserExportDTO"> SELECT u.id, u.name, u.email, u.phone, u.status, d.name AS dept_name, u.created_at FROM t_user u LEFT JOIN t_department d ON u.dept_id = d.id <where> <includerefid="Base_Where"/> </where> ORDER BY u.created_at DESC </select>